Arduino, 1 LED zum blinken bringen mit 2 Taster?
Hallo, ich habe ein Problem bei meinem Arduino, undzwar versuche ich 1 LED mit 2 Taster zu steuern, dass wenn ich z.B Taster 1 drücke es anfängt zu blinken(ohne delay, mit interval), und wenn ich Taster 2 dücke das die LED aufhört zu blinken.
Kann mir da jemand helfen, und mir sagen was an meinen Code falsch ist.
int ledPin=12;
int taster1=2;
int taster2=3;
int tasterstatus1=0;
int tasterstatus2=0;
bool value = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 500;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(taster1, INPUT);
pinMode(taster2, INPUT);
}
void loop() {
tasterstatus1=digitalRead(taster1); tasterstatus2=digitalRead(taster2);
if (tasterstatus1 == HIGH){
value = false;
digitalWrite(ledPin, LOW);
}
if (tasterstatus2 == HIGH){
value = true;
}
if ((millis() - previousMillis >= interval)&&(value==true)){
previousMillis = millis();
value = !value;
digitalWrite(ledPin, value);
}
}
Vielen Dank im Vorraus.
3 Antworten
Eine boolsche Variable kennt meines Wissens nach nur die Zustände "true" oder "false", jedoch nicht den Zustand "LOW"...
Und ich kann den Posts von RareDevil zustimmen. Ich würde das schwarze Kabel(GND) weglassen, genauso übrigens den 20.000Ω Widerstand. Stattdessen würde ich dir raten, das rote Kabel an die Stelle des schwarzen Kabels zu stecken.
Das ganze 2mal für jeden Taster, dann kannst du "tasterstatus1" und "tasterstatus2" auf HIGH lassen.
Außerdem macht mir die unterste Ecke ein bisschen Kopfschmerzen
Aktuell geht die LED ganz kurz aus und sofort wieder an, wenn ich das richtig sehe...
Und ich kann den Posts von RareDevil zustimmen. Ich würde das schwarze Kabel(GND) weglassen, genauso übrigens den 20.000Ω Widerstand. Stattdessen würde ich dir raten, das rote Kabel an die Stelle des schwarzen Kabels zu stecken
Das passt aber nicht. Entweder mit dem Taster auf GND ziehen und den internen PullUp aktivieren, oder mit einem Pulldownwiderstand auf Masse ziehen und mit dem Taster 5V auf den Eingang schalten. Wenn Du mit dem Taster die 5V schaltest, ohne das DU einen PullDownwiderstand gegen Masse hast, kann es passieren, das die Eingänge HIGH annehmen, obwohl der Taster nicht gedrückt wird. Und zwar allein durch Felder, die in der Umgebung existieren. Die Eingänge des Arduino haben keinen PullDown intern und sind so hochohmig, das ein Stück Draht als Antenne reicht, das die EIngänge ansprechen. Also immer definierte HIGH oder LOW-Signale. Aber keine offenen benutzen EIngänge ohne Bezug einfach schwebend lassen.
Du brauchst eine 2. Variable, die Du als On/Off-Speicher nimmst. Jetzt setzt Du die Variable "value" mit den Tastern, fragst diese aber auch in de If zum blinken ab und änderst diese, wenn die Bedingung erfüllt ist. Danach ist value nicht mehr erfüllt und die If wird nicht mehr abgearbeitet...
So viel zur ersten Diagnose...
Ach so. Du hast die WIderstände auch als PullUp an den Tastern. Somit sind beide Taster HIGH und wenn du tastest, sind diese LOW... Also entweder STatus LOW abfragen (Dann kannst Du auch auf die Widerstände verzichten und die Eingänge mit "INPUT_PULLUP" direkt augf HIGH schalten, und LOW abfragen wenn der Taster gedrückt wird, oder Du musst die Taster gegen 5V schalten und die Widerstände an den EIngängen auf Masse schalten, damit die 5V nur anstehen, wenn der Taster gedrückt wird und die Widerstände als PullDown funktionieren...
Dein letzter digitalWrite befindet sich innerhalb des letzten if konstrukts und wird deswegen immer den Wert LOW (bzw. false) haben. Du setzt in diesem Sketch die LED nie auf high
Hab ich korrigiert, jedoch blinkt die LED nicht, sondern leuchtet kontinuierlich. Und die Taster tun auch nichts.
PS. Das mit "Nicht hilfreich" war ein Missklick, sorry