Go Down

Topic: skript nur einmal abspielen (Read 1 time) previous topic - next topic

strohhirn

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

Mfg

strohhirn
Gruß

strohhirn

mkl0815

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

strohhirn

@mkl0815

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

strohhirn

mkl0815

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.

uwefed

Die Waschmaschiene hat einen Start-Knopf.   ;) ;) ;)
Grüße Uwe

Vansen

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.

maverick1509

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

Mach was

}

Gruß

strohhirn

Vielen Dank, klappt so wie ich es wollte.
Gruß

strohhirn

strohhirn

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.
Code: [Select]
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
Gruß

strohhirn

maverick1509

wenn ich dich richtig verstehe, dann so:

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

gruß
Bernward

strohhirn

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

strohhirn

maverick1509

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.

strohhirn

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.
Gruß

strohhirn

Marcus W

#13
Oct 02, 2012, 02:01 am Last Edit: Oct 02, 2012, 02:22 am by Marcus W Reason: 1
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.
Code: [Select]

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...
  }
}

Go Up