Mein erstes Arduino Programm sah ähnlich aus (Fußgänger Ampel).
Ich hatte im Define Teil keine "const" drin.
Und ich habe durchgängig nur "HIGH" und "LOW" benutzt und keine "0" und "1".
Als erste Maßnahme kann man mal prüfen welche Werte den "schwelle1" und 2 annehmen.
Also eine Serielle Übertragung starten und nach der übernahme durch digitalRead mit Serial.print ausgeben und mit dem seriellen Monitor beobachten.
Denn bis auf die Zuweisung statt des Vergleichs erscheint der Code OK zu sein.
Und im dem Fall macht er ja was er soll.
Die Konzequenz daraus wäre, daß das was er macht zwar richtig ist, aber nicht das was Du erwartest.
Und da bleiben nur die beiden Variablen, die als einziges Zustandsänderungen verursachen können.
Alo mal nachsehen was die für Werte haben.
Beispiel für eine serielle Ausgabe in Deinem Code
Code:
void setup() {
Serial.begin(9600); <<<< Serielle Ausgabe starten
.
.
.
}
void loop() {
int schwelle1 = digitalRead(M1);
int schwelle2 = digitalRead(M2);
Serial.print(schwelle1); <<<< Wert ausgeben
Serial.println(schwelle2); <<<< Wert ausgeben und Zeilenumbruch
if (schwelle1 == 0){
.
.
.
.
.
}
Hier habe ich mal meinen Code drangehängt. der funktioniert so auf einem Arduino Nano.
Code:
int f_tast = 2;
int a_rot = 3;
int a_gelb = 4;
int a_gruen = 5;
int f_rot = 8;
int f_gruen = 9;
int f_lamp_tast = 13;
int s_licht = A0;
byte f_press = HIGH;
void setup() {
pinMode(f_tast, INPUT);
pinMode(a_rot, OUTPUT);
pinMode(a_gelb, OUTPUT);
pinMode(a_gruen, OUTPUT);
pinMode(f_rot, OUTPUT);
pinMode(f_gruen, OUTPUT);
attachInterrupt(0, button, LOW);
//Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(s_licht);
//Serial.println(sensorValue);
// Blinker code zum Prüfen ob Programm läuft
digitalWrite(f_lamp_tast, HIGH); //Blinker an Taste fuer Fussgaenger
delay(500);
digitalWrite(f_lamp_tast, LOW);
delay(500);
if (sensorValue > 500){ //Dämmerungswert für Nachtschaltung
digitalWrite(a_rot, LOW);
digitalWrite(a_gelb, HIGH); //Autos Gelb für Blinker
digitalWrite(a_gruen, LOW);
digitalWrite(f_rot, LOW);
digitalWrite(f_gruen, LOW);
delay(500);
digitalWrite(a_gelb, LOW);
}
else {
digitalWrite(a_rot, LOW);
digitalWrite(a_gelb, LOW);
digitalWrite(a_gruen, HIGH); //Autos gruen
digitalWrite(f_rot, HIGH); //Fussgaenger rot
digitalWrite(f_gruen, LOW);
}
// if (digitalRead(f_tast) == LOW){ //Taste Fussgaenger abfragen
if (f_press == LOW){ //Statusvariable Taste Fussgaenger abfragen
delay(500);
digitalWrite(13, HIGH); //Taste Fussgaenger ist gedrueckt worden
digitalWrite(f_rot, HIGH); //Fussgaenger rot
digitalWrite(a_gruen, LOW);
digitalWrite(a_gelb, HIGH); //Autos gelb
delay(1000); // Autos Gelbphase
digitalWrite(a_gelb, LOW);
digitalWrite(a_rot, HIGH); //Autos rot
delay(1000); // Fussgaenger Wartezeit damit kein Auto mehr fährt
digitalWrite(13, LOW);
digitalWrite(f_rot, LOW);
digitalWrite(f_gruen, HIGH); //Fussgaenger gruen
delay (6000); //Fussgaenger gruenphase
digitalWrite(f_rot, HIGH); //Fussgaenger rot
digitalWrite(f_gruen, LOW);
delay(1000); //Autos Wartezeit damit kein Fussgaenger mehr laeuft
digitalWrite(a_gelb, HIGH); //Autos gelb
delay(1000); // Autos Gelbphase
f_press = HIGH;
}
}
void button(){
f_press = LOW;
}
Lesezeichen