Wie kann ich einen arduino taster in einen "haltezustand" bringen?
Hi, ich hab ein Arduino Uno Programm geschrieben wo eine Ampel durchläuft und wenn man einen Knopf drückt, soll die Autoampel rot werden und Die Fußgängerampel grün. Ich muss aber genau im richtigen Moment drücken dass das funktioniert. Weis jemand was ich machen muss dass sich der Arduino merkt, dass ich den Knopf gedrückt habe ? Außerdem wird die Fußgngerampel automatisch jede runde grün ohne dass ich was drücke
Danke schonmal
Das ist mein code:
int Rot1=13;
int Gelb1=12;
int Gruen1=11;
int Rot2=10;
int Gelb2=9;
int Gruen2=8;
int Taster=7;
int F_Rot=6;
int F_Gruen=5;
int Lautsprecher=4;
int Orange=3;
int tasterstatus=0;
void setup(){
pinMode(Rot1, OUTPUT);
pinMode(Gelb1, OUTPUT);
pinMode(Gruen1, OUTPUT);
pinMode(Rot2, OUTPUT);
pinMode(Gelb2, OUTPUT);
pinMode(Gruen2, OUTPUT);
pinMode(Taster, INPUT_PULLUP);
pinMode(F_Rot, OUTPUT);
pinMode(F_Gruen, OUTPUT);
pinMode(Lautsprecher, OUTPUT);
pinMode(Orange, OUTPUT);
}
void loop(){
tasterstatus = digitalRead(Taster);
if (tasterstatus == 1){
digitalWrite(F_Rot,HIGH);
digitalWrite(Rot1,HIGH);
digitalWrite(Rot2,HIGH);
countdown();
digitalWrite(F_Rot,LOW);
digitalWrite(F_Gruen,HIGH);
blinken();
delay(8000);
digitalWrite(F_Gruen,LOW);
digitalWrite(F_Rot,HIGH);
}
digitalWrite(F_Rot,HIGH);
digitalWrite(Rot1,HIGH);
digitalWrite(Rot2,HIGH);
delay(10000);
digitalWrite(Gelb1,HIGH);
digitalWrite(Gelb2,HIGH);
delay(1500);
digitalWrite(Rot1,LOW);
digitalWrite(Gelb1,LOW);
digitalWrite(Rot2,LOW);
digitalWrite(Gelb2,LOW);
digitalWrite(Gruen1,HIGH);
digitalWrite(Gruen2,HIGH);
delay(10000);
digitalWrite(Gruen1,LOW);
digitalWrite(Gruen2,LOW);
digitalWrite(Gelb1,HIGH);
digitalWrite(Gelb2,HIGH);
delay(1500);
digitalWrite(Gelb1,LOW);
digitalWrite(Gelb2,LOW);
}
4 Antworten
Das delay() macht dir alles kaputt.
Zwei Dinge solltest du dir ansehen:
1) Blinken ohne delay
2) Interrupts bei Tastendruck
Dann kommst du schnell ans Ziel.
Für beides findest du im Netz viele Anleitungen.
Die Ausführung des Programmes wird unterbrochen, die Befehle des Unterprogrammes werden ausgeführt und das Programm fortgesetzt.
Schaust du hier: https://www.pheli.de/externer-interrupt-am-arduino-nano/
Dein Problem ist das Delay. Da stoppt das Programm. Du müsstest entweder ohne Delay arbeiten (alternative Timer, "Blink without Delay") oder ggf mit Interrupt-Routinen deinen Programmablauf aus dem Delay holen und die Routine ausführen...
Alle Delays außerhalb der if, die verhindern, dass der Taster eingelesen wird...
Entweder schaust du, ob du eine asynchrone Methode findest oder du machst statt Delays ein aktives Warten mit Tasterabfrage und schaust auch, dass die tasterabfrage sonstwo zwischendrinnen häufig genug auftaucht.
Du hast den physischen Taster ja nirgends initialisiert? Vielleicht hilft dir das weiter: https://spacehal.github.io/docs/arduino/input
Danke für den tipp. Wird wenn ich ein Interrupt einbaue die Autoampel unterbrochen oder wird der code erst zuende ausgeführt und dann die Fußgängerampel geschaltet ?