Hallo liebe Technikbegeisterte!
Willkommen zurück zu unserer spannenden Serie „ESP Revolution“. Im dritten Teil unserer Reise in die Welt der Mikrocontroller gehen wir einen Schritt weiter. Nachdem wir in Teil 1 die Grundlagen mit LEDs kennengelernt und in Teil 2 die Interaktion mit Buttons eingeführt haben, widmen wir uns heute einem häufigen Problem und seiner eleganten Lösung: Wie verbessern wir die Reaktionsfähigkeit unserer ESP32-Projekte?
Das Problem mit delay()
Erinnerst du dich an unser letztes Projekt, bei dem wir LEDs mit Buttons steuerten? Hier haben wir eine wichtige Lektion gelernt: Die Verwendung von delay() in unserem Code kann die Reaktionsfähigkeit unseres ESP32 erheblich beeinträchtigen. Während delay() läuft, ist unser Mikrocontroller quasi „gefesselt“ und kann keine anderen Aktionen, wie das Lesen von Button-Zuständen, durchführen. Das ist so, als würdest du beim Autofahren die Augen schließen – nicht ideal, oder?
Die Lösung: millis()
Die gute Nachricht ist, dass es eine effektive Lösung gibt: die Verwendung der millis()-Funktion. millis() gibt die Anzahl der Millisekunden zurück, die seit dem Start des Mikrocontrollers vergangen sind. Statt unseren ESP32 in einen Tiefschlaf zu versetzen, ermöglicht uns millis(), die Zeit im Auge zu behalten und gleichzeitig auf Eingaben zu reagieren.
Unser verbessertes Projekt: Abwechselnd blinkende LEDs mit Button-Steuerung
Lass uns das Prinzip an unserem verbesserten Projekt demonstrieren. Hier ist der Code, den wir verwenden werden:
// Definiere die Pins
const int ledPin1 = 5;
const int ledPin2 = 18;
const int buttonPin = 23;
// Zustandsvariablen
bool ledState = false;
bool running = false;
// Zeitverfolgung
unsigned long previousMillis = 0;
const long interval = 500; // Blinkintervall in Millisekunden
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
unsigned long currentMillis = millis();
// Button-Logik
if (digitalRead(buttonPin) == LOW) {
delay(50); // Entprellung
running = !running;
while(digitalRead(buttonPin) == LOW); // Warte auf Button-Loslassen
}
// Blink-Logik
if (running) {
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(ledPin1, ledState);
digitalWrite(ledPin2, !ledState);
}
} else {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}
}
In diesem Code nutzen wir millis(), um die LEDs abwechselnd blinken zu lassen, während wir gleichzeitig auf den Button reagieren können. So bleibt unser ESP32 stets reaktionsbereit.
Die Verwendung von millis() ist ein Game-Changer in der Welt der Mikrocontroller. Sie ermöglicht es uns, reaktionsfähige und multifunktionale Projekte zu entwickeln, ohne Kompromisse bei der Performance eingehen zu müssen.
In unserem nächsten Teil werden wir noch einen Schritt weitergehen und die Welt der Sensoren erkunden. Bleib dran, es wird spannend!
Bis zum nächsten Mal und viel Spaß beim Experimentieren!
Pingback: ESP32 Revolution: Dein Einstieg in die Welt der Mikrocontroller Magie - Teil 2 - KISCANDO