Mit dem Arduino eine Ampel bauen

Erklärung

Man baut auf dem Breadboard des Arduinos eine Ampelschaltung, sprich Rot-Gelb-Grün, diese wollen wir gezielt mit einem kleinen Programm ansteuern, dazu benutzen wir den Arduino als einen Stromverteiler und sagen diesem wann er wieviel Strom an welche LED leiten soll.

Materialien

  • 1x Arduino (in diesem Fall Arduino NANO)
  • 1x Breadboard
  • 3x LEDs (Rot, Gelb, Grün)
  • 4x Kabel
  • 3x Widerstände

Aufbau

Programmierung

In diesem Programmier Beispiel, werde ich zeigen, wie man dieses mit einer Variable, die wir jede Sekunde aktualieren und so einen Countdown „erschaffen“. Wenn dieser Countdown abgelaufen ist, wird die Ampel auf Rot gesetzt und dann starten wir den Countdown neu, bis dieser dann auch abgelaufen ist und so die Ampel Grün wird.

int ledRed = 6;
int ledYellow = 4;
int ledGreen = 2;

int seconds;			// Diese Variable ist unsere besagte Countdown Variable.

boolean green = false;		// Dies ist eine Variable, die uns entwerder einen Wahrheits wert liefert oder
				// einen Falsch wert leifert.
void setup() {			// Wir setzten wie LED Pins normal auf, wie bereits gezeigt, mit der setup(); 
  pinMode(ledRed, OUTPUT);	// Methode.
  pinMode(ledYellow, OUTPUT);
  pinMode(ledGreen, OUTPUT);  

  digitalWrite(ledRed, HIGH);
  digitalWrite(ledYellow, LOW);
  digitalWrite(ledGreen, LOW);

  seconds = 10;			// Hier legen wir fest, dass unser Countdown 10 Sekunden betragten soll.
}

void loop() {
  if(seconds == 0) {		// Als erste Fragen wir ab, ob die Sekunden 0 sind
    if(isGreen()) {		// Wenn die Sekunden 0 sind, wird gefragt, ob es Grün ist, dies ist eine
      newPhase(LOW, HIGH, LOW); // selbst bestimmte Methode, unten dazu mehr.
      delay(1000);		// mit delay(); können wir sagen, dass der darauffolgende Text verzögert
      newPhase(HIGH, LOW, LOW); // abgefertigt werden soll.
    } else {			// else heißt, dass wenn es nicht Grün ist, er das hier in {} aufrufen soll
      newPhase(HIGH, HIGH, LOW);
      delay(1000);
      newPhase(LOW, LOW, HIGH);
    }
    seconds = 10;		// Hier setzen wir den Countdown wieder auf 10
  }
  seconds--;			// x--; heißt, dass wir den Aktuellen Wert der Variable nehmen und ihn um -1
}				// reduzieren, z.B.: x = 10; x--; -> dann ist x = 9.

boolean isGreen() {		// Diese selbst ausgedachte Methode liefer uns, ob die Ampel Grün ist oder
  if(green) {			// nicht, dass fragen wir einfach ab, ob "green" die Wahrheit entspricht,
    return true;		// falls das so ist, sagen wir return true; und damit wissen wir, dass Grün
  } else {			// wahr ist.
    return false;
  }
}

void newPhase(int red, int yellow, int green) { // Dies ist ebenfalls eine selbst ausgedachte Methode, nur der
  digitalWrite(ledRed, red);			// unterschied ist, dass wir hier keine Antwort der Methode
  digitalWrite(ledYellow, yellow); 		// bekommen, sondern, diese erleichter uns nur die Arbeit,
  digitalWrite(ledGreen, green);		// weil wir den darin enthalten Auftrag nur einmal schreiben
}						// müssen, und dann nur die Methode aufschreiben müssen, mit
						// den dazu gehörigen Informationen.