In diesem kurzen Tutorial lernst du, wie man eine LED mit einem Mikrocontroller blinken lässt – das klassische "Hello World" der Mikrocontroller-Welt.
Hier wird die LED mit einem Vorwiderstand an einen digitalen Ausgangspin des Mikrocontrollers angeschlossen – in unserem Beispiel Pin 13.
Anschluss:
Anode (langes Bein der LED) → Widerstand → Pin 13
Kathode (kurzes Bein) → GND (Masse)
Alternativ kannst du die interne LED auf Pin 13 verwenden, wenn dein Board eine hat – dann brauchst du gar keine externe LED.
Unterstützte Mikrocontroller z.B.: Arduino Boards, Raspberry Pi Pico, ESP8266 oder ESP32
void setup() {
pinMode(13, OUTPUT); // Setzt Pin 13 als Ausgang
}
void loop() { // Hauptschleife
digitalWrite(13, HIGH); // LED an
delay(1000); // 1 Sekunde warten
digitalWrite(13, LOW); // LED aus
delay(1000); // 1 Sekunde warten
}
setup() wird einmal beim Start ausgeführt – hier sagen wir, dass Pin 13 ein Ausgang ist.
loop() läuft dauerhaft in einer Schleife – die LED wird an- und ausgeschaltet, jeweils mit 1 Sekunde Pause dazwischen.
Wenn du die Blinkfrequenz ändern willst, passe einfach die delay()-Werte an (z. B. delay(500) für ein halbes Blinken pro Sekunde).
Die Funktion delay(ms) pausiert das gesamte Programm für die angegebene Zeit in Millisekunden.
Das heißt: Während dieser Zeit passiert nichts anderes.
Beispiel: delay(1000) = 1 Sekunde Stillstand im Programm
Das ist am Anfang okay – aber in komplexeren Projekten (z. B. mit Tastern, Sensoren oder mehreren LEDs) wird das schnell zum Problem, weil der Mikrocontroller in dieser Zeit nicht reagieren kann.
Wenn du mehrere Dinge gleichzeitig steuern willst (z. B. eine LED blinken und gleichzeitig einen Taster abfragen), solltest du lieber auf nicht-blockierendes Blinken umsteigen – z. B. so:
unsigned long letzteZeit = 0;
const int ledPin = 13;
const int intervall = 1000; // 1 Sekunde
bool ledStatus = false;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long aktuelleZeit = millis();
if (aktuelleZeit - letzteZeit >= intervall) {
// Zeit ist um: LED-Zustand wechseln
ledStatus = !ledStatus;
digitalWrite(ledPin, ledStatus);
// Zeitstempel aktualisieren
letzteZeit = aktuelleZeit;
}
// Hier kannst du andere Dinge tun (Taster abfragen, Sensor lesen ...)
}
Eine weitere Alternative wären Hardware-Timer. Das ist aber eine ganz eigenes Thema und würde diesen Beitrag sprengen. Daher wird es hierzu einen eigenen Beitrag geben. Der wird dann an dieser Stelle verlinkt.
Methode | Vorteil | Nachteil |
---|---|---|
delay() | Einfach, ideal für den Einstieg | Blockiert das ganze Programm |
millis() | Nicht-blockierend, flexibel | Etwas komplexer |
Timer/Interrupts | Extrem präzise, im Hintergrund aktiv | Fortgeschrittenes Thema |