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:32] 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|}}
 +
 +===== Definitionssache =====
 +
 +Um den ganzen Code ein wenig übersichtlicher zu gestalten lernen wir vor der Übung noch eine wichitge Componente der Programmiersprache: //Defines//
 +
 +Mit diesen Defines können wir den Code deutlich lesbarer machen. Das funktioniert so:
 +
 +<code c>
 +#define KONSTANTENNAME Wert
 +</code>
 +
 +Jetzt wenden wir diese Definition auf unser erstes Beispiel mit der LED an:
 +
 +<code c>
 +#define LED_ROT 13
 +</code>
 +
 +Soweit so gut. Jetzt passiert vorerst nichts, wir verwenden also unsere Definition:
 +
 +<code c>
 +digitalWrite(LED_ROT, HIGH);
 +</code>
 +
 +Was nun passiert ist folgendes:
 +
 +Der Compiler (Das war das Teil, das unseren Code in Maschinensprache übersetzt) arbeitet den Code von oben nach unten ab. Ganz oben schreiben wir unser //#define// hin. Wenn der Compiler zu dieser Stelle kommt weiß er "Ah, LED_ROT bedeutet in Wirklichkeit 13".
 +
 +Nun arbeitet er den Code weiter ab und macht dabei etwas geniales: An jeder Stelle, an der //LED_ROT// steht, schreibt der Compiler //13// hin.
 +
 +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 ===== ===== Programmablauf =====
Zeile 42: Zeile 74:
   * Die Ampel startet rot   * Die Ampel startet rot
   * Nach 2 Sekunden rot wird gelb eingeschaltet   * Nach 2 Sekunden rot wird gelb eingeschaltet
-  * Nach 1 Sekunde erlischt rot und gelb und grün leuchtet+  * Nach 1 Sekunde erlischt rot und gelbgrün leuchtet
   * Nach 3 Sekunden schaltet die Ampel von grün auf gelb   * Nach 3 Sekunden schaltet die Ampel von grün auf gelb
   * Nach 1 Sekunde erlischt gelb und der Zyklus beginnt von vorne   * Nach 1 Sekunde erlischt gelb und der Zyklus beginnt von vorne
  
-===== Definitionssache =====+===== Kleine Hilfestellung =====
  
-Um den ganzen Code ein wenig übersichtlicher zu gestalten lernen wir vor der Übung noch eine wichitge Componente der Programmiersprache//Defines//+Da die Defines noch neu sind gibt es hier das Grundgerüst des Codes, der erweitert werden soll:
  
-Mit diesen Defines können wir den Code deutlich lesbarer machenDas funktioniert so:+<code c kapitel04_ampel-grund.ino> 
 +#define LED_ROT 13 
 +#define LED_GELB 12 
 +#define LED_GRUEN 11
  
-<code c> +void setup() 
-#define KONSTANTENNAME Wert+
 +  pinMode(LED_ROT, OUTPUT); 
 +
 + 
 +void loop()  
 +
 +  digitalWrite(LED_ROT, HIGH); 
 +}
 </code> </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]]