Ampelschaltung ohne Delay
Mit diesem Programm kann man eine Ampelschaltung mit dem Befehl millis() steuern, um den Befehl delay() nicht zu verwenden
Bauteile:
- Arduino Uno
- 3 verschiedene LEDs (1 x ROT, 1 x GELB, 1 x GRÜN)
- 4 Kabel
- 1 Breadboard
Schaltskizze:
Code:
int ROT = 10 ;
int GELB = 11 ;
int GRUEN = 12 ;
unsigned long time;
int phase = 1; //derzeitige Phase wird festgelegt
unsigned long interval1 = 3500; //verschiedene Intervalle für die einzelnen Ampelphasen
unsigned long interval2 = 500;
unsigned long interval3 = 2500;
unsigned long interval4 = 1500;
unsigned long previousMillis = 0;
unsigned long previousMillis = 0;
void setup () {
Serial.begin(9600);
pinMode (ROT , OUTPUT) ;
pinMode (GELB , OUTPUT) ;
pinMode (GRUEN , OUTPUT) ;
}
void loop () {
if ((phase == 1) and (millis() - previousMillis > interval1)) {
previousMillis = millis();
phase = 2 ;
}
if ((phase == 2) and (millis() - previousMillis > interval2)) {
previousMillis = millis();
phase = 3 ;
}
if ((phase == 3) and (millis() - previousMillis > interval3)) {
previousMillis = millis();
phase = 4 ;
}
if ((phase == 4) and (millis() - previousMillis > interval4)) {
previousMillis = millis();
phase = 1 ;
}
if (phase == 1) {
digitalWrite(ROT,HIGH);
digitalWrite(GELB,LOW);
digitalWrite(GRUEN,LOW);
}
if (phase == 2) {
digitalWrite(ROT,HIGH);
digitalWrite(GELB,HIGH);
digitalWrite(GRUEN,LOW);
}
if (phase == 3) {
digitalWrite(ROT,LOW);
digitalWrite(GELB,LOW);
digitalWrite(GRUEN,HIGH);
}
if (phase == 4) {
digitalWrite(ROT,LOW);
digitalWrite(GELB,HIGH);
digitalWrite(GRUEN,LOW);
}
}
Von Moritz Burger
Erstellt: Moritz Burger (23.07.2014)
Letzte Änderung: Andreas Hecker (01.12.2015)