2016-08-23 6 views
0

Funktionalität:Arduino-Taste ist nicht auf dem kontinuierlichen Serien "1"

Serien Monitor druckt "0" bei jedem 100ms, signalisiert, dass der Button LOW ist.

Wenn der Benutzer jedoch die rote Kuppeltaste Red Dome Button drückt, wird signalisiert, dass der ButtonState HIGH ist und am seriellen Monitor sollte alle 100ms "1" gedruckt werden, bis der Benutzer die rote Kuppel erneut drückt signalisieren, dass der ButtonState LOW ist und der serielle Monitor "0" ausgibt.

Ausgabe:

Der serielle Monitor wird „0“ an alle 100ms Ausgeben zunächst und wenn ich den roten Kuppel-Taste drücken, kehrt der Button ein HIGH und an der seriellen Monitor ausgibt „1 ". Die serielle "1" bleibt jedoch nicht erhalten und wird sofort wieder auf "0" zurückgesetzt.

Die serielle "1" wird nur im seriellen Monitor angezeigt, wenn ich die Taste kontinuierlich drücke.

Bedeutung:

Richtiges Verhalten:

Anfangs Bundesland-> die serielle Monitor ausgibt serielle alle 0, bis der Benutzer den Knopf drückt dann die serielle Monitor ausgegeben alle seriellen 1, bis der Benutzer den Knopf drückt

i: wieder so wird dann die Ausgabe an seriellem 0

Aktuelles Verhalten ändern nitial state-> Der serielle Monitor gibt alle seriellen 0 aus, bis der Benutzer die Taste drückt, dann gibt der serielle Monitor seriell 1 aus, aber die serielle Schnittstelle kehrt sofort zu 0

zurück. Wie kann ich den seriellen Status aktivieren? seriell 1 nachdem ich den Knopf gedrückt habe und die Seriennummer wird nur dann angezeigt, wenn ich den Knopf erneut drücke? Ich brauche etwas Hilfe dabei. Danke

Code:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 

void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 

    // check if the pushbutton is pressed. 
    // if it is, the buttonState is HIGH: 
    if (buttonState == HIGH) { 
    Serial.println("1"); 
    } 
    else { 
    Serial.println("0"); 
    } 
delay(100); 
} 

Antwort

1

Es scheint, dass Ihre Schaltfläche unpressed wird, nachdem sie losgelassen wird (kein 2-Staaten-Taste mögen). Sie müssen also eine eigene Statusvariable erstellen, die beim Drücken der Schaltfläche wechselt.

Angenommen, Sie möchten den Status ändern, wenn ein HIGH von der Schaltfläche erkannt wird. Dies bedeutet, dass Sie die Änderung von LOW auf HIGH und nicht nur im HIGH-Modus erkennen müssen. Um dies zu tun, müssen Sie den letzten Status der Schaltfläche speichern. Außerdem müssen Sie einen Ausgangszustand beibehalten, der wechselt, wenn ein Wechsel von LOW nach HIGH erkannt wird.

In Ihrem Code sollte wie folgt sein:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 
int buttonLastState = 0; 
int outputState = 0; 


void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 
    // Check if there is a change from LOW to HIGH 
    if (buttonLastState == LOW && buttonState == HIGH) 
    { 
    outputState = !outputState; // Change outputState 
    } 
    buttonLastState = buttonState; //Set the button's last state 

    // Print the output 
    if (outputState) 
    { 
    Serial.println("1"); 
    } 
    else 
    { 
    Serial.println("0"); 
    } 
    delay(100); 
} 
+0

eine 2-Staaten-Taste wirkt wie ein Schalter, wo einmal durch den Benutzer gedrückt wird, wird es die Schaltung schließen und wenn erneut gedrückt, wird die Schaltung öffnen. Bin ich richtig? so scheint der physikalische Knopf, den ich habe, nur ein Unterbrechungsknopf. habe ich recht? – Luke

+0

Ich denke, dass dein Knopf wie du sagst. Hat der Code funktioniert? – dubafek

+0

ja, hat es getan. danke – Luke

Verwandte Themen