Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
uc-welt:gscheiduino:04-ampelsteuerung [2016/01/04 16:39] Hannes Jochriemuc-welt:gscheiduino:04-ampelsteuerung [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-[[uc-welt:gscheiduino:03-blinklicht|← Kapitel 3: Blinklicht]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[uc-welt:gscheiduino:05-|Kapitel 5:  →]]+[[uc-welt:gscheiduino:03-blinklicht|← Kapitel 3: Blinklicht]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[uc-welt:gscheiduino:05-eingaenge|Kapitel 5: Eingänge →]]
  
-====== Kapitel 4: Ampelsteuerung ======+====== Kapitel 4: Übungsaufgabe Ampelsteuerung ======
  
 ===== Schaltung ===== ===== Schaltung =====
Zeile 35: Zeile 35:
  
 {{:uc-welt:gscheiduino:004-schaltung.png?direct&200|}} {{:uc-welt:gscheiduino:004-schaltung.png?direct&200|}}
- 
-===== Programmablauf ===== 
- 
-Das Ziel dieser Aufgabe ist es, eine Ampelsteuerung zu simulieren. Das Timing dieser Steuerung soll wie folgt aussehen: 
- 
-  * Die Ampel startet rot 
-  * Nach 2 Sekunden rot wird gelb eingeschaltet 
-  * Nach 1 Sekunde erlischt rot und gelb und grün leuchtet 
-  * Nach 3 Sekunden schaltet die Ampel von grün auf gelb 
-  * Nach 1 Sekunde erlischt gelb und der Zyklus beginnt von vorne 
  
 ===== Definitionssache ===== ===== Definitionssache =====
Zeile 76: Zeile 66:
 Um solche #defines schnell zu erkennen, werden sie in der Regel mit Großbuchstaben geschrieben. Wir erkennen jetzt also, dass zum Beispiel //HIGH// auch eine Konstante ist, die von Arduino bereits definiert wurde. Um solche #defines schnell zu erkennen, werden sie in der Regel mit Großbuchstaben geschrieben. Wir erkennen jetzt also, dass zum Beispiel //HIGH// auch eine Konstante ist, die von Arduino bereits definiert wurde.
  
 +Warum definieren wir das aber? Ganz einfach: Wenn wir die rote LED mehrfach in unserem Code verwenden müssen, können wir jedesmal LED_ROT schreiben. Sollte sich irgendwann der Pin ändern (Und jeder der jetzt denkt: "Warum sollte sich ein Pin ändern?" sei gewarnt: Das passiert sehr häufig, meistens aus Bequemlichkeit) kann diese Anpassung am Anfang des Codes in der Definition gemacht werden. Einmal und nicht X-mal im gesamten Quellcode.
 +
 +===== Programmablauf =====
 +
 +Das Ziel dieser Aufgabe ist es, eine Ampelsteuerung zu simulieren. Das Timing dieser Steuerung soll wie folgt aussehen:
 +
 +  * Die Ampel startet rot
 +  * Nach 2 Sekunden rot wird gelb eingeschaltet
 +  * Nach 1 Sekunde erlischt rot und gelb, grün leuchtet
 +  * Nach 3 Sekunden schaltet die Ampel von grün auf gelb
 +  * Nach 1 Sekunde erlischt gelb und der Zyklus beginnt von vorne
 +
 +===== Kleine Hilfestellung =====
 +
 +Da die Defines noch neu sind gibt es hier das Grundgerüst des Codes, der erweitert werden soll:
 +
 +<code c kapitel04_ampel-grund.ino>
 +#define LED_ROT 13
 +#define LED_GELB 12
 +#define LED_GRUEN 11
 +
 +void setup()
 +{
 +  pinMode(LED_ROT, OUTPUT);
 +}
 +
 +void loop() 
 +{
 +  digitalWrite(LED_ROT, HIGH);
 +}
 +</code>
 +
 +Die Aufgabe besteht nun darin, den Code an den entsprechenden Stellen so zu erweitern, dass die Ampelsteuerung wie oben beschrieben, funktioniert.
 +
 +Als Vergleich zur selbst erstellten Lösung gibt es [[uc-welt:gscheiduino:04-ampelsteuerung-loesung|hier die Musterlösung]], die aber natürlich nicht benötigt wird!
  
 +Jetzt wo wir wissen, wie Ausgänge funktionieren, kommen wir logischerweise zur anderen Richtung:
 +[[uc-welt:gscheiduino:05-eingaenge|Kapitel 5: Eingänge]]