MINT üben

Mikrocontroller programmieren

Ein blinkendes Fahrradrücklicht mit Taster und eine Bewässerung für den Schulgarten, die nicht zu viel gießen darf.

Dein Fortschritt:
0 / 0 Aufgaben
1

Ein Rücklicht fürs Fahrrad

AFB I–II

Tim baut für sein Fahrrad ein Rücklicht mit einem Arduino Uno. Normalerweise soll die rote LED blitzen; solange der Taster am Lenker gedrückt ist, soll sie dauerhaft leuchten. Die Schaltung und der Sketch sehen so aus:

Arduino · ruecklicht.ino
const int LED = 9;
const int TASTER = 2;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(TASTER, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(TASTER) == LOW) {   // Dauerlicht
    digitalWrite(LED, HIGH);
  } else {                            // Blinklicht
    digitalWrite(LED, HIGH);
    delay(100);
    digitalWrite(LED, LOW);
    delay(400);
  }
}
Schaltskizze des Rücklichts
ArduinoUnoPin 9Pin 2GND220 ΩLEDTaster
Der Taster verbindet Pin 2 beim Drücken mit GND; einen eigenen Widerstand braucht er wegen INPUT_PULLUP nicht.
  1. Nennen Sie die Pins, die der Sketch als Ausgang bzw. als Eingang benutzt, wie oft setup() und loop() jeweils ausgeführt werden und den Speicher, in dem das übersetzte Programm auf dem Board liegt.
  2. Berechnen Sie für das Blinklicht die Periodendauer \(T\), die Frequenz \(f\) und die Anzahl der Blitze in einer Minute.
  3. Erläutern Sie, warum der Sketch einen gedrückten Taster an LOW erkennt und warum die LED nach dem Drücken manchmal erst mit Verzögerung dauerhaft leuchtet.

Hinweise

Hinweis zu Aufgabe a)
Schauen Sie auf die pinMode-Aufrufe. Welcher Speicher des Mikrocontrollers behält das Programm auch ohne Strom?
Hinweis zu Aufgabe b)
Eine Periode besteht aus der Leuchtzeit und der Pause. Rechnen Sie Millisekunden in Sekunden um, bevor Sie \(f = \frac{1}{T}\) bilden. Die Laufzeit der übrigen Befehle ist gegenüber den Wartezeiten vernachlässigbar.
Hinweis zu Aufgabe c)
Was misst Pin 2, wenn der Taster offen ist und der interne Pull-up-Widerstand ihn mit 5 V verbindet — und was, wenn der Taster ihn mit GND verbindet? Wann wird digitalRead in loop() überhaupt aufgerufen?