← Zurück zum Kapitel

Musterlösung Ampelsteuerung

kapitel04_ampel-muster.ino
#define LED_ROT 13
#define LED_GELB 12
#define LED_GRUEN 11
 
void setup()
{
  pinMode(LED_ROT, OUTPUT);
  pinMode(LED_GELB, OUTPUT);
  pinMode(LED_GRUEN, OUTPUT);
}
 
void loop() 
{
  digitalWrite(LED_ROT,   HIGH);
  digitalWrite(LED_GELB,  LOW);
  digitalWrite(LED_GRUEN, LOW);
  delay(2000);
  digitalWrite(LED_ROT,   HIGH);
  digitalWrite(LED_GELB,  HIGH);
  digitalWrite(LED_GRUEN, LOW);
  delay(1000);
  digitalWrite(LED_ROT,   LOW);
  digitalWrite(LED_GELB,  LOW);
  digitalWrite(LED_GRUEN, HIGH);
  delay(3000);
  digitalWrite(LED_ROT,   LOW);
  digitalWrite(LED_GELB,  HIGH);
  digitalWrite(LED_GRUEN, LOW);
  delay(1000);
}

Als kleines Beispiel zur Pinänderung:

Sollten wir nun die grüne LED anstatt an Pin11 plötzlich an Pin10 anstecken, können wir diese Änderung sehr einfach ganz am Anfang am define vornehmen:

kapitel04_ampel-muster-pin.ino
#define LED_ROT 13
#define LED_GELB 12
#define LED_GRUEN 10
 
void setup()
{
  pinMode(LED_ROT, OUTPUT);
  pinMode(LED_GELB, OUTPUT);
  pinMode(LED_GRUEN, OUTPUT);
}
 
void loop() 
{
  digitalWrite(LED_ROT,   HIGH);
  digitalWrite(LED_GELB,  LOW);
  digitalWrite(LED_GRUEN, LOW);
  delay(2000);
  digitalWrite(LED_ROT,   HIGH);
  digitalWrite(LED_GELB,  HIGH);
  digitalWrite(LED_GRUEN, LOW);
  delay(1000);
  digitalWrite(LED_ROT,   LOW);
  digitalWrite(LED_GELB,  LOW);
  digitalWrite(LED_GRUEN, HIGH);
  delay(3000);
  digitalWrite(LED_ROT,   LOW);
  digitalWrite(LED_GELB,  HIGH);
  digitalWrite(LED_GRUEN, LOW);
  delay(1000);
}

Optimierte Variante

Den Code von ganz oben kann man natürlich noch optimieren und die überflüssigen Anweisungen entfernen:

kapitel04_ampel-muster.ino
#define LED_ROT 13
#define LED_GELB 12
#define LED_GRUEN 11
 
void setup()
{
  pinMode(LED_ROT, OUTPUT);
  pinMode(LED_GELB, OUTPUT);
  pinMode(LED_GRUEN, OUTPUT);
}
 
void loop() 
{
  digitalWrite(LED_ROT,   HIGH);
  delay(2000);
  digitalWrite(LED_GELB,  HIGH);
  delay(1000);
  digitalWrite(LED_ROT,   LOW);
  digitalWrite(LED_GELB,  LOW);
  digitalWrite(LED_GRUEN, HIGH);
  delay(3000);
  digitalWrite(LED_GELB,  HIGH);
  digitalWrite(LED_GRUEN, LOW);
  delay(1000);
}