Benutzer-Werkzeuge

Webseiten-Werkzeuge


hello_mbot_blockierung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hello_mbot_blockierung [2025/02/18 06:44] torsten.roehlhello_mbot_blockierung [2025/02/19 19:47] (aktuell) – [Nicht-blockierende Umsetzung] torsten.roehl
Zeile 115: Zeile 115:
  */  */
 void blinken(int interval) { void blinken(int interval) {
 +
   unsigned long currentMillis = millis();   unsigned long currentMillis = millis();
  
-  if (currentMillis - previousMillis >= interval || firstRun{ +  // step: ..in progress 
-    firstRun = false; +  if (!firstRun && (currentMillis - previousMillis interval)) 
-    previousMillis = currentMillis; +    return;
-    ledState = !ledState;+
  
-    if (ledState) { +  // step: .. toggle now! 
-      led.setColor(0, 255, 0, 0); // RGB-LED auf Rot setzen (LED 1) +  firstRun = false; 
-      led.setColor(1, 255, 0, 0); // RGB-LED auf Rot setzen (LED 2) +  previousMillis = currentMillis; 
-    } else { +  ledState = !ledState; 
-      led.setColor(0, 0, 0, 0);   // RGB-LED ausschalten (LED 1) + 
-      led.setColor(1, 0, 0, 0);   // RGB-LED ausschalten (LED 2) +  if (ledState) { 
-    } +    led.setColor(0, 255, 0, 0); // RGB-LED auf Rot 
-    led.show();+    led.setColor(1, 255, 0, 0); // RGB-LED auf Rot 
 +  } else { 
 +    led.setColor(0, 0, 0, 0);   // RGB-LED aus 
 +    led.setColor(1, 0, 0, 0);   // RGB-LED aus
   }   }
 +  led.show();
 } }
 </Code> </Code>
 == Erklärungen zum Quellcode == == Erklärungen zum Quellcode ==
-Die Methode ''blinken(int interval)'' steuert das nicht-blockierende Blinken der LED. //Zeile 40// speichert die aktuelle Zeit mit ''millis()'' 
- 
-//Zeile 42// prüft, ob das Intervall abgelaufen oder der erste Aufruf (''firstRun'') ist. Falls ja, setzt //Zeile 43–44// ''firstRun'' auf ''false'' und aktualisiert ''previousMillis'', um den Timer zurückzusetzen.  
- 
-//Zeile 45// wechselt den LED-Zustand, wodurch das Blinken entsteht. 
  
-//Zeile 47–54// setzt die LED auf Rot oder schaltet sie aus, abhängig von ''ledState'', und aktualisiert die Anzeige mit ''led.show()'', damit die Änderung sichtbar wird. 
  
 Die Variable ''firstRun'' sorgt dafür, dass das Blinken beim ersten Aufruf sofort startet, statt erst nach dem ersten Intervall zu warten. Die Variable ''firstRun'' sorgt dafür, dass das Blinken beim ersten Aufruf sofort startet, statt erst nach dem ersten Intervall zu warten.
Zeile 147: Zeile 144:
 <note> <note>
 In dieser Version wird das Blinken der LEDs nicht blockierend mit ''millis()'' umgesetzt. Dadurch kann der Roboter während des Blinkens weiterhin den Abstandssensor abfragen und schneller auf Hindernisse reagieren. Im Test führte dies dazu, dass der Roboter zuverlässiger rechtzeitig stoppt und nicht mehr gegen die Wand fährt.</note> In dieser Version wird das Blinken der LEDs nicht blockierend mit ''millis()'' umgesetzt. Dadurch kann der Roboter während des Blinkens weiterhin den Abstandssensor abfragen und schneller auf Hindernisse reagieren. Im Test führte dies dazu, dass der Roboter zuverlässiger rechtzeitig stoppt und nicht mehr gegen die Wand fährt.</note>
-===== Zusammenfassung =====+====== Zusammenfassung ======
  
 Nicht-blockierende Methoden ermöglichen eine effizientere Steuerung des mBots, da Abläufe parallel ausgeführt werden können. Gleichzeitig sind blockierende Methoden einfacher umzusetzen und sind häufig ausreichend. Nicht-blockierende Methoden ermöglichen eine effizientere Steuerung des mBots, da Abläufe parallel ausgeführt werden können. Gleichzeitig sind blockierende Methoden einfacher umzusetzen und sind häufig ausreichend.
hello_mbot_blockierung.1739861045.txt.gz · Zuletzt geändert: 2025/02/18 06:44 von torsten.roehl