Übungsaufgaben
Zehn Übungen zu Mikrocontrollern, Arduino-Sketchen, Blinkfrequenzen und Tastern — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du nicht weiterkommst, helfen die gestuften Tipps.
Ordne jedem Bestandteil bzw. jeder Funktion des Arduino Uno die passende Aufgabe zu.
Nenne zu jeder Aussage, ob sie stimmt.
INPUT_PULLUP immer so. Wer das vergisst, bekommt eine LED, die genau dann leuchtet, wenn man nicht drückt.INPUT_PULLUP liegt der Pin ohne Tastendruck auf HIGH.Eine LED an Pin 9 soll immer wieder 0,3 s leuchten und 0,7 s dunkel sein. Gib für jede Lücke den passenden Eintrag an.
void setup() { pinMode(9, ); } void () { digitalWrite(9, ); delay(); digitalWrite(9, LOW); delay(); }
delay erwartet Millisekunden: 0,3 s = 300 ms. Typischer Fehler: delay(0.3) — das wäre praktisch keine Pause. Und main schreibt man beim Arduino nicht selbst; die Arduino-Umgebung ruft setup und loop auf.void loop() { digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(300); }
Berechne Schritt für Schritt, wie schnell die LED blinkt (die Befehle außer delay dauern nur Mikrosekunden).
- Periodendauer \(T = t_{an} + t_{aus}\) ms
- Frequenz \(f = 1/T\) Hz
- Anzahl der Blinks in 10 s
- Gesamte Leuchtdauer in diesen 10 s s
int zaehler = 0; void setup() { pinMode(2, INPUT_PULLUP); // Taster gegen GND pinMode(13, OUTPUT); } void loop() { if (digitalRead(2) == LOW) { zaehler++; delay(300); // Entprellen } if (zaehler % 3 == 0) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } }
Analysiere fünf loop-Durchläufe. Die Spalte „Taster“ gibt an, ob er während des Durchlaufs gedrückt ist. Trage HIGH/LOW, den Zählerstand am Ende und an/aus ein.
| Durchlauf | Taster | digitalRead(2) | zaehler | LED |
|---|---|---|---|---|
| 1 | los | |||
| 2 | gedrückt | |||
| 3 | gedrückt | |||
| 4 | los | |||
| 5 | gedrückt |
zaehler 0, und 0 % 3 ist 0 — die LED leuchtet also schon vor dem ersten Druck. Typischer Fehler: gedrückt mit HIGH gleichsetzen. Bei INPUT_PULLUP gilt: gedrückt = LOW. Beim dritten Druck ist zaehler 3, und die LED geht wieder an.digitalRead bestimmen (gedrückt = LOW), dann entscheiden, ob gezählt wird, dann zaehler % 3 prüfen.Die for-Schleife aus 2.1.3 funktioniert im Sketch genauso wie in C.
void loop() { for (int i = 0; i < 3; i++) { digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(100); } delay(1400); }
Werte den Sketch aus und markiere alle zutreffenden Aussagen.
i < 3 als „bis einschließlich 3“ lesen — i nimmt nur 0, 1, 2 an. Und weil loop neu startet, beginnt auch die for-Schleife jedes Mal neu.void loop() { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); }
Bestimme, wie oft man die LED in 10 s ausgehen sieht.
digitalWrite(13, LOW); fehlt eine Pause: loop beginnt sofort neu und schaltet die LED nach wenigen Mikrosekunden wieder an. Das Auge sieht ein Dauerleuchten — also 0. Typischer Fehler: 20 (wie bei T = 500 ms) — dabei zählt nur das, was man wirklich sieht.loop passiert.Solange der Taster an Pin 4 (gegen GND) gedrückt ist, soll die LED an Pin 12 leuchten, sonst nicht. Überprüfe den Sketch — drei Zeilen sind fehlerhaft.
pinMode: Eingang oder Ausgang? Und was liefert ein gedrückter Taster mit Pull-up?Ausgangssketch: LED an Pin 13, delay(400) an, delay(600) aus — also 1 Hz. Schätze für jede Änderung ab, wie sich die Blinkfrequenz ändert — ohne genau zu rechnen.
Nach dem Einschalten soll die LED an Pin 10 genau fünfmal blinken (je 100 ms an, 400 ms aus) und danach dunkel bleiben. Entwirf den Sketch, indem du die Zeilen ordnest.
setup. Stünde die Schleife in loop, würde die LED endlos weiterblinken. loop muss trotzdem vorhanden sein, auch wenn es leer ist. Häufig verrutscht: pinMode nach der Schleife — dann blinkt am Anfang nichts.setup oder in loop gehört.