Pages: [1]   Go Down
Author Topic: skript nur einmal abspielen  (Read 874 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mfg

strohhirn
Logged

Gruß

strohhirn

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@mkl0815

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

Gruß

strohhirn

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 235
Posts: 20230
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 2
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mach was

}

Gruß
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank, klappt so wie ich es wollte.
Logged

Gruß

strohhirn

Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Gruß

strohhirn

Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wenn ich dich richtig verstehe, dann so:

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

gruß
Bernward
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Gruß

strohhirn

Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 2
Posts: 261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Gruß

strohhirn

Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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...
  }
}
« Last Edit: October 01, 2012, 07:22:51 pm by Marcus W » Logged


Pages: [1]   Go Up
Jump to: