skript nur einmal abspielen

Guten Tag,
Ich möchte einen skript im loop teil nur einmal abspielen.
Wie mache ich das?(sodass auch alle abfragen funktionieren)

Mfg

strohhirn

pack den code mit in die setup() funktion, und lass loop() einfach leer.
die frage ist aber, warum sollte man das wollen?

@mkl0815

Na um einen bestimmten ablauf nur einmal abzuspielen.
Das Waschmaschienen Programm wird doch auch nur einmal abgespielt.

du musst also deine waschmaschine immer ausschalten, wenn du ein zweites mal waschen willst? das muss ich bei meiner nicht. die wartet nachdem sie fertig ist und ich kann ein neues waschprogramm auswählen.

Die Waschmaschiene hat einen Start-Knopf. :wink: :wink: :wink:
Grüße Uwe

für den fall, dass du es nicht in der setup funktion stehen haben willst oder vll. ein bestimmter teil 2mal aber nicht mehr stattfinden soll, so kannst du einen counter benutzen. wenn dieser einen bestimmten wert erreicht, dann wird die anweisung nicht mehr ausgeführt, der rest des sketches schon.

Hallo,
In der Setup eine variable definieren, z.B. start=0,
In der void loop
start++;
if start < 2 {

Mach was

}

Gruß

Vielen Dank, klappt so wie ich es wollte.

Guten Tag,
Verzeihung ich habe doch etwas übersehen, die if abfragen funtionieren nicht mehr wenn ich denn ganzen loop teil nur einmal abspiele.
Meine idee ist die abfrage solange abzuspielen bis die Voraussetzung erfüllt ist.

void programm1 (){
  
 static uint32_t previousMillis = 0;
 
    if (sensors.getTempC(Sensor1) >= 25.8) {
      digitalWrite(k1, HIGH);  
    } else {
      digitalWrite(k1, LOW);
      digitalWrite(k2, HIGH);
      digitalWrite(k3, HIGH);
      previousMillis = millis();
    }

    if (millis() - previousMillis > interval) {
      digitalWrite(k2, LOW);
      digitalWrite(k3, LOW);
      previousMillis = 0;
    }
 
    for(int fade = 0 ; fade <= 51; fade +=1) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fade);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);
    
  
    }
  }

In diesem sketch soll die erste if abfrage solange laufen bis k1 HIGH ist.
Aber wie mache ich das?
Könnt ihr mir bitte nochmal helfen?

Mfg

strohhirn

wenn ich dich richtig verstehe, dann so:

if (sensors.getTempC(Sensor1) >= 25.8 && k1 == LOW) {

gruß
Bernward

Vielen Dank Bernward, aber leider funktioniert das nicht, k1 schaltet nicht um auf HIGH wenn sensor1 25.8 °C überschreitet.

wie k1 wird überhaupt nicht HIGH???
Was ist denn mit k2 und k3?

Ich glaube du hast auch noch einen Denkfehler im Programm.
Die Klammer der if Abfrage geht ja nur bis zum ersten else, d.h. mit dieser Abfrage kannst du das Programm nie auf einen
Durchlauf begrenzen, dann muß die Klammer bis zum Ende des Codes gehen.

k1,k2,k3 sind relaise. High = aus und LOW = an bei diesen relaise.
Wenn das programm startet soll k1 angehen(also LOW),danach ,wenn sensor1 25.8°C ereicht/überschreitet, soll k1 ausgehen(also HIGH), bei temperatur abstieg soll k1 aber nicht wieder angehen.
Wenn k1 ausgeht, soll nach einer minute k2 und k3 angehen(LOW) und eine led soll mit 1V einmal aufleuchten.

Oder einfach, ohne unterklassen und programme, einfach im loop:
Versteht mich nicht falsch - ich liebe Unterfunktionen - aber für diese Lösung braucht man keine.

double stopTemp = 25.8;
double temperature; 
boolean stopped = false;

void loop()
{
  while (!stopped)
  {
    temperature = FunktionEinerKlasseDieDenSensorAusliestUndDoubleZurückgibt();
    if (temperature < stopTemp)
    {
      // tu was immer du tun willst, wärend die temperatur nicht 25.8° ist - immer und immer wieder
      // Momentan: immer wieder nichts tun, bis die Temperatur "temperature" erreicht wird.
    }
    else
    {
      // tu was du willst, wenn sie erreicht ist - einmal, danach ist Stop angesagt, bis "stopped" wieder "false" ist.
      stopped = true;
    }

    // Hier springt er hin, wenn "stopped" auf "true" springt und der reguläre loop weiterläuft.
    // Hier z.B. die Zeit zählen bis die lichter angehen sollen...
  }
}