Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
uc-welt:gscheiduino:04-ampelsteuerung [2016/01/04 16:32] – Hannes Jochriem | uc-welt:gscheiduino:04-ampelsteuerung [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | [[uc-welt: | + | [[uc-welt: |
- | ====== Kapitel 4: Ampelsteuerung ====== | + | ====== Kapitel 4: Übungsaufgabe |
===== Schaltung ===== | ===== Schaltung ===== | ||
Zeile 35: | Zeile 35: | ||
{{: | {{: | ||
+ | |||
+ | ===== Definitionssache ===== | ||
+ | |||
+ | Um den ganzen Code ein wenig übersichtlicher zu gestalten lernen wir vor der Übung noch eine wichitge Componente der Programmiersprache: | ||
+ | |||
+ | Mit diesen Defines können wir den Code deutlich lesbarer machen. Das funktioniert so: | ||
+ | |||
+ | <code c> | ||
+ | #define KONSTANTENNAME Wert | ||
+ | </ | ||
+ | |||
+ | Jetzt wenden wir diese Definition auf unser erstes Beispiel mit der LED an: | ||
+ | |||
+ | <code c> | ||
+ | #define LED_ROT 13 | ||
+ | </ | ||
+ | |||
+ | Soweit so gut. Jetzt passiert vorerst nichts, wir verwenden also unsere Definition: | ||
+ | |||
+ | <code c> | ||
+ | digitalWrite(LED_ROT, | ||
+ | </ | ||
+ | |||
+ | 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?" | ||
===== 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 gelb, grü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 | + | Da die Defines |
- | Mit diesen Defines können wir den Code deutlich lesbarer machen. Das 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, | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | digitalWrite(LED_ROT, | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | Die Aufgabe besteht nun darin, den Code an den entsprechenden Stellen so zu erweitern, dass die Ampelsteuerung wie oben beschrieben, | ||
+ | |||
+ | Als Vergleich zur selbst erstellten Lösung gibt es [[uc-welt: | ||
+ | |||
+ | Jetzt wo wir wissen, wie Ausgänge funktionieren, | ||
+ | [[uc-welt: |