Millis anstelle Delay innerhalb des IF-Statements

Hallo zusammen,

ich komme bei meinem Code leider nicht weiter. Ich möchte im untenstehenden Code die delay durch millis ersetzen, sodass der weitere Code nicht blockiert wird. Mir ist klar, wie ich mit millis zwei LEDs zum blinken bringen kann. Im vorliegenden Fall, innerhalb des IF-Statements, allerdings nicht.

    if (sample_count < NUMSAMPLES) {

    sum += ((analogRead(THERMISTORPIN) * VOLTAGEREF)/1024);
        delay(100);

        sample_count++;
    }
   
    else {

    voltage = ((float)sum / (float)NUMSAMPLES);

    // send voltage for display on Serial Monitor

    Serial.print(voltage);
    Serial.println (" V");
    
    sample_count = 0;
    sum = 0;

Ich hoffe, jemand von euch kann mir hier helfen.

Danke und Gruß
Roman

Dann lass das Delay doch einfach weg!

Geht nicht?
OK, dann ist dein Programm auf Blockierungen angewiesen, weil du das Konzept mit den Nebenläufigkeiten noch nicht voll verstanden hast.

Also noch mal zu zurück zu: blink without delay
Auch die "Nachtwächter Erklärung" lesen

Du mußt im loop() mittels millis() kontrollieren ob die Zeit reif ist für einen Einlesevorgang und diesen dann machen.
Grüße Uwe

Ich möchte im untenstehenden Code die delay durch millis ersetzen

Nein. Du willst in der Nähe von delay(INTERVAL); stattdessen

 if(millis()-previousmillis >= INTERVAL) {
    previousmillis=millis();  
     // ... Aktion, die nur einmal alle INTERVAL ms ausgeführt werden soll 
  }

oder so etwas ähnliches
einbauen und den Sketch komplett umbauen, dass er ohne Blockaden und zur Vereinfachung auch ohne weitere Schleifen innerhalb von loop() läuft.

if - Abfragen kannst du gerne ineinander schachteln, wenn das deiner gewünschten Logik entspricht.

Danke für euer schnelles Feedback :slight_smile: hilft mir schonmal weiter.