2016-05-20 18 views
2

Ich habe eine Arduino-Schaltung zusammengestellt, die die LEDs ausschaltet, wenn die Taste gedrückt wird. Wie kann ich es so codieren wenn ich es einmal drücke es wird angeschaltet und bleibt nur an und wird erst einmal wieder gedrückt? Jede mögliche Hilfe würdeArduino-Taste mit LED

Mein Aktueller Code ist geschätzt werden:

int ledred = 12; 
    int ledgreen = 8; 
    int BUTTON = 4; 
    int speakerPin = 1; 

    void setup() { 
    // initialize the digital pin as an output. 
    Serial.begin(9600); 
    pinMode(ledgreen, OUTPUT); 
    pinMode(ledred, OUTPUT); 
    pinMode(BUTTON,INPUT); 
    } 

void loop() { 
if(digitalRead(BUTTON) == HIGH){ 
    digitalWrite(ledred,HIGH); 
    digitalWrite(ledgreen,HIGH); 
    }else 
    { 
    digitalWrite(ledred,LOW); 
    digitalWrite(ledgreen,LOW); 
    } 
    } 

Antwort

1

Wenn alles, was Sie wollen, ist dies tun, können Sie eine der Interrupt-Pins verwenden und achten Sie auf die RISING (oder FALLING) Ereignis.

Etwas ähnliches wie this example:

const byte ledPin = 13; 
const byte interruptPin = 2; 
volatile byte state = LOW; 

void setup() { 
    pinMode(ledPin, OUTPUT); 
    pinMode(interruptPin, INPUT_PULLUP); 
    attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING); 
} 

void loop() { 
    digitalWrite(ledPin, state); 
} 

void blink() { 
    state = !state; 
} 

daran, dass Sie noch einige debouncing strategy benötigen.

Sie müssen auch keinen Interrupt dafür verwenden, aber dann benötigen Sie einen Flankenerkennungsalgorithmus. Diese sind im obigen Entprellen-Artikel recht gut erklärt. Ich persönlich bevorzuge diese, da Unterbrechungsstifte in der UNO-Platine wertvoll genug sind, um mit bescheidenen Knopfdrücken nicht verwendet zu werden ...: o)

+0

Dies scheint eine gute Antwort außer dem ersten Satz. Ich sehe nicht, wie man auf steigende oder fallende Signale achten kann, wenn ein neuer Knopf gedrückt wird. –

+0

@AdrianMcCarthy, meinst du wegen der Prellen? Weil ich sicher bin, dass ich schon Interrupts für Buttons benutzt habe. So weit ging es gerade wegen des Prellens nicht. Mit einer idealen (oder Hardware-entprellten) Taste sollte es gut funktionieren. – heltonbiker