//// Startampel ////
// PINS werden zugewiesen //
// int LED1=2; kann zu
// #define LED1 2 werden. Usw.
// Ein #define verbraucht keinen Speicher.
// Falls es mal eng wird, nutze defines für sich
// nicht ändernde Werte.
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int taster = 7;
bool tasterstatus = 0;
//lege namen für statuszahlen fest, weil nur zahlen irgendwann unübersichtlich sind
#define standby 0
#define running 1
#define Light1 2
#define Light2 3
#define Light3 4
#define Light4 5
#define Light5 6
byte ampelstatus = 0;
//zwei timervariablen. timerB ist nur für die gelbe led da
unsigned long timer, timerB;
void setup()
{
pinMode(LED1, OUTPUT); // Ein- und Ausgänge werden definiert //
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(taster, INPUT);
pinMode(10, OUTPUT); //gelbe demo led
}
void loop()
{
tasterstatus = digitalRead(taster); // tasterstatus wird ausgelesen //
//gelb blinker
if (ampelstatus != standby && millis() > timerB ) {
digitalWrite(10, !digitalRead(10)); timerB = millis() + 300;
}
//Ampel
switch (ampelstatus) {
case standby:
if (tasterstatus == HIGH) {
ampelstatus = running;
timer = millis() + 3000;
}
break;
case running:
if (millis() > timer) {
digitalWrite(LED1, HIGH); // LED1 geht an //
timer = millis() + 2000; // 3 Sekunden Wartezeit //
ampelstatus = Light1;
}
break;
case Light1:
if (millis() > timer) {
digitalWrite(LED2, HIGH); // LED1 geht an //
timer = millis() + 2000; // 2 Sekunden Wartezeit //
ampelstatus = Light2;
}
break;
case Light2:
if (millis() > timer) {
digitalWrite(LED3, HIGH); // LED1 geht an //
timer = millis() + 2000; // 2 Sekunden Wartezeit //
ampelstatus = Light3;
}
break;
case Light3:
if (millis() > timer) {
digitalWrite(LED4, HIGH); // LED1 geht an //
timer = millis() + 2000; // 2 Sekunden Wartezeit //
ampelstatus = Light4;
}
break;
case Light4:
if (millis() > timer) {
digitalWrite(LED5, HIGH); // LED1 geht an //
timer = millis() + random(2000, 5000);
ampelstatus = Light5;
}
break;
/*
case Light5:
if (millis() > timer) {
digitalWrite(LED1, LOW); // Die LED´s gehen sofort aus //
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
ampelstatus = standby;
}
break;
*/
case Light5:
if (millis() > timer) {
for(int i=255;i>0; i--){
analogWrite(LED1, i); // Die LED´s gehen dimmend aus //
analogWrite(LED2, i); // im simulator nicht so schön, wie in echt
analogWrite(LED3, i);
analogWrite(LED4, i);
analogWrite(LED5, i);
delay(1); //dimmen etwas bremsen, falls zu schnell für schönen effekt
}
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW); //die 5x LOW sollten nur für simulator nötig sein
digitalWrite(LED3, LOW); //schaltet sonst leds nicht alle richtig aus.
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
ampelstatus = standby;
}
break;
} //switch ende
} // loop ende