Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:informatik:arduino:ampelschaltung [2017/03/21 14:08]
federl
faecher:informatik:arduino:ampelschaltung [2020/01/20 12:20] (aktuell)
m.lange
Zeile 2: Zeile 2:
 ===== Erklärung ===== ===== 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.+Man baut auf dem Breadboard ​mit dem Arduino ​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 diesemwann er Strom an welche LED leiten soll.
  
 ===== Materialien ===== ===== Materialien =====
  
-  * 1x Arduino ​(in diesem Fall Arduino NANO)+  * 1x Arduino
   * 1x Breadboard   * 1x Breadboard
   * 3x LEDs (Rot, Gelb, Grün)   * 3x LEDs (Rot, Gelb, Grün)
   * 4x Kabel   * 4x Kabel
-  * 3x Widerstände+  * 3x Widerstände ​150 Ω (gelb)
  
 ===== Aufbau ===== ===== Aufbau =====
 +{{:​faecher:​informatik:​arduino:​ampel-neu.png?​600|}}
  
-{{:​faecher:​informatik:​arduino:​steckplan_arduino_ampel.jpg|}} 
 ===== Programmierung ===== ===== 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 neubis dieser ​dann auch abgelaufen ist und so die Ampel Grün wird.+In diesem ​Programm wird eine Ampelschaltung immer wiederholterst ist die Ampel 10 Sekunden rot, dann eine Sekunde rot-gelb, dann 10 Sekunden grün und zuletzt 3 Sekunden rot. 
 +Danach wird die Folge erneut ausgeführt
  
-<​code>​ +<​code ​cpp
-int ledRed ​6+int ledRot ​2
-int ledYellow ​= 4; +int ledGelb ​= 4; 
-int ledGreen ​2;+int ledGruen ​6;
  
-int seconds; // Diese Variable ist unsere besagte Countdown Variable.+void setup() { 
 +  pinMode(ledRot,​ OUTPUT); //Pins der LEDs als Ausgang definieren 
 +  pinMode(ledGelb,​ OUTPUT); 
 +  pinMode(ledGruen,​ OUTPUT); 
 +}
  
-boolean green = false; // Dies ist eine Variabledie uns entwerder einen Wahrheits wert liefert oder +void loop() { 
- // einen Falsch wert leifert+  digitalWrite(ledRot, ​ HIGH); //Ampel Rot 
-void setup() { // Wir setzten wie LED Pins normal aufwie bereits gezeigtmit der setup();  +  digitalWrite(ledGelb LOW); 
-  ​pinMode(ledRedOUTPUT); // Methode+  ​digitalWrite(ledGruen,​ LOW); 
-  ​pinMode(ledYellowOUTPUT); +  delay(10000); ​               ​//10 Sekwarten 
-  ​pinMode(ledGreenOUTPUT);  ​+   
 +  digitalWrite(ledRot, ​ HIGH)//Ampel Rot-Gelb 
 +  digitalWrite(ledGelbHIGH); 
 +  digitalWrite(ledGruenLOW); 
 +  delay(1000);                 //1 Sek. warten 
 +  ​ 
 +  ​digitalWrite(ledRot  LOW); //Ampel Grün   
 +  digitalWrite(ledGelb, ​ LOW); 
 +  digitalWrite(ledGruen,​HIGH);​ 
 +  delay(10000); ​               //10 Sekwarten 
 +  ​ 
 +  digitalWrite(ledRot  LOW); //Ampel Gelb 
 +  ​digitalWrite(ledGelbHIGH); 
 +  digitalWrite(ledGruen,​ LOW); 
 +  delay(3000); ​                //3 Sek. warten 
 +
 +</​code>​ 
 +==== Programmierung mit eigener Funktion====
  
-  digitalWrite(ledRedHIGH); +Um den Programmcode zu verkürzenkann man eigene Funktionen erstellendie dann mehrere Befehle ausführen. Hier schreiben wir eine Funktiondie alle drei LED gleichzeitig ansteuert.
-  digitalWrite(ledYellowLOW); +
-  digitalWrite(ledGreenLOW);+
  
-  seconds ​10; // Hier legen wir festdass unser Countdown 10 Sekunden betragten soll.+<code cpp> 
 +int ledRot ​2; 
 +int ledGelb = 4; 
 +int ledGruen = 6; 
 + 
 +void setup() { 
 +  pinMode(ledRotOUTPUT); 
 +  pinMode(ledGelb,​ OUTPUT); 
 +  pinMode(ledGruen,​ OUTPUT);
 } }
  
 void loop() { void loop() {
-  ​if(seconds == 0) { // Als erste Fragen wir abob die Sekunden 0 sind +  ​Phase(HIGH, LOW, LOW); 
-    if(isGreen) { // Wenn die Sekunden 0 sind, wird gefragt, ob es Grün ist, dies ist eine +  delay(10000); 
-      newPhase(LOW, HIGH, LOW); // selbst bestimmte Methode, unten dazu mehr. +  Phase(HIGH, HIGH, LOW); 
-      delay(1000); // mit delay(); können wir sagen, dass der darauffolgende Text verzögert +  delay(1000);​ 
-      ​newPhase(HIGH,​ LOW, LOW); // abgefertigt werden soll. +  Phase(LOW, LOW, HIGH); 
-    } else { // else heißt, dass wenn es nicht Grün ist, er das hier in {} aufrufen soll +  ​delay(10000); 
-      newPhase(HIGH, HIGH, LOW); +  ​Phase(LOWHIGHLOW)
-      delay(1000);​ +  ​delay(3000);
-      ​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) { // nichtdass fragen wir einfach abob "​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 +void Phase(int Rot, int Gelb, int Gruen) { 
-  digitalWrite(ledRedred); // unterschied ist, dass wir hier keine Antwort der Methode +  digitalWrite(ledRotRot); 
-  digitalWrite(ledYellowyellow);  // bekommen, sondern, diese erleichter uns nur die Arbeit, +  digitalWrite(ledGelbGelb); 
-  digitalWrite(ledGreengreen); // weil wir den darin enthalten Auftrag nur einmal schreiben +  digitalWrite(ledGruenGruen); 
-} // müssen, und dann nur die Methode aufschreiben müssen, mit +}
- // den dazu gehörigen Informationen.+
 </​code>​ </​code>​
 +===== Erweiterung =====
 +Manche Ampeln wechseln nicht automatisch von Grün zu Rot. Vielmehr muss man das als Fußgänger per Tastendruck hervorrufen. Das nennt man eine Bedarfsampel.\\
 +Kannst du dieses Projekt mit einem Taster erweitern, sodass die Ampel nur dann für eine kurze Zeit Rot wird, wenn man den Taster gerückt hat?\\
 +Informiere dich noch einmal, wie das Projekt [[faecher:​informatik:​arduino:​led_ueber_taster|LED über Taster]] aufgebaut war.
 ==== Links ==== ==== Links ====
-[[faecher:​informatik:​arduino:​led_ueber_taster|{{:​faecher:​informatik:​arduino:​rechts.png?​100| }}]]+[[faecher:​informatik:​arduino:​ampel_ueber_taster|{{ :​faecher:​informatik:​arduino:​links.png?​100|}}]] 
 +[[faecher:​informatik:​arduino:​led_ueber_taster|{{:​faecher:​informatik:​arduino:​rechts.png?​100|}}]]