Hallo,
ich bin gerade am Programmieren einer Ampelschaltung. Nun bin ich aber auf ein Problem gestoßen:
Wie bekomme ich es hin, dass wenn man den Taster drückt die KFZ-Ampel auf Rot gehen und dann die Fußgängerampeln auf Grün?
Durch die Delays kann ich auch nicht dazwischen immer testen, ob der Taster gedrückt ist, da man den Taster ja nur kurz drückt und wenn dies halt während dem delay ist und erst danach abgefragt wird, ist der Taster bei der Abfrage nicht mehr gedrückt!
Momentan ist es so, dass immer nur am Anfang angefragt wird, ob der Taster gedrückt ist.
Ich bitte um Hilfe.
Programmcode:
// Variablen
// Zeit
int Warten = 2000;
int Gelb = 2000;
int Gruen = 10000;
// Ampel 1
int kfz_rot1 = 13;
int kfz_gelb1 = 12;
int kfz_gruen1 = 11;
// Ampel 2
int kfz_rot2 = 10;
int kfz_gelb2 = 9;
int kfz_gruen2 = 8;
// Ampel 3
int kfz_rot3 = 7;
int kfz_gelb3 = 6;
int kfz_gruen3 = 5;
// Fußgaengerampel
int fg_rot = 4;
int fg_gruen = 3;
// Taster
int taste = 2;
void setup() {
pinMode(kfz_rot1, OUTPUT);
pinMode(kfz_gelb1, OUTPUT);
pinMode(kfz_gruen1, OUTPUT);
pinMode(kfz_rot2, OUTPUT);
pinMode(kfz_gelb2, OUTPUT);
pinMode(kfz_gruen2, OUTPUT);
pinMode(kfz_rot3, OUTPUT);
pinMode(kfz_gelb3, OUTPUT);
pinMode(kfz_gruen3, OUTPUT);
pinMode(fg_rot, OUTPUT);
pinMode(fg_gruen, OUTPUT);
pinMode(taste, INPUT_PULLUP);
// Alle Ampeln auf Rot schalten
digitalWrite(kfz_rot1, HIGH);
digitalWrite(kfz_rot2, HIGH);
digitalWrite(kfz_rot3, HIGH);
digitalWrite(fg_rot, HIGH);
digitalWrite(kfz_gelb1, LOW);
digitalWrite(kfz_gelb2, LOW);
digitalWrite(kfz_gelb3, LOW);
digitalWrite(fg_gruen, LOW);
digitalWrite(kfz_gruen1, LOW);
digitalWrite(kfz_gruen2, LOW);
digitalWrite(kfz_gruen3, LOW);
}
void loop() {
delay(Warten);
if(digitalRead(taste) == LOW) {
// Fußgaengerampel auf Gruen
digitalWrite(fg_rot, LOW);
digitalWrite(fg_gruen, HIGH);
delay(Gruen);
// Fußgaengerampel auf Rot
digitalWrite(fg_rot, HIGH);
digitalWrite(fg_gruen, LOW);
}
// Ampel 1 auf Gruen
digitalWrite(kfz_gelb1, HIGH);
delay(Gelb);
digitalWrite(kfz_rot1, LOW);
digitalWrite(kfz_gelb1, LOW);
digitalWrite(kfz_gruen1, HIGH);
delay(Gruen);
// Ampel 1 auf Rot
digitalWrite(kfz_gelb1, HIGH);
digitalWrite(kfz_gruen1, LOW);
delay(Gelb);
digitalWrite(kfz_rot1, HIGH);
digitalWrite(kfz_gelb1, LOW);
delay(Warten);
//Ampel 2 auf Gruen
digitalWrite(kfz_gelb2, HIGH);
delay(Gelb);
digitalWrite(kfz_rot2, LOW);
digitalWrite(kfz_gelb2, LOW);
digitalWrite(kfz_gruen2, HIGH);
delay(Gruen);
// Ampel 2 auf Rot
digitalWrite(kfz_gelb2, HIGH);
digitalWrite(kfz_gruen2, LOW);
delay(Gelb);
digitalWrite(kfz_rot2, HIGH);
digitalWrite(kfz_gelb2, LOW);
delay(Warten);
//Ampel 3 auf Gruen
digitalWrite(kfz_gelb3, HIGH);
delay(Gelb);
digitalWrite(kfz_rot3, LOW);
digitalWrite(kfz_gelb3, LOW);
digitalWrite(kfz_gruen3, HIGH);
delay(Gruen);
// Ampel 3 auf Rot
digitalWrite(kfz_gelb3, HIGH);
digitalWrite(kfz_gruen3, LOW);
delay(Gelb);
digitalWrite(kfz_rot3, HIGH);
digitalWrite(kfz_gelb3, LOW);
}
Vielen Dank!