Offline
Full Member
Karma: 1
Posts: 128
|
 |
« on: September 21, 2012, 08:31:22 am » |
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
|
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1297
|
 |
« Reply #1 on: September 21, 2012, 08:34:04 am » |
pack den code mit in die setup() funktion, und lass loop() einfach leer. die frage ist aber, warum sollte man das wollen?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 128
|
 |
« Reply #2 on: September 21, 2012, 08:38:48 am » |
@mkl0815
Na um einen bestimmten ablauf nur einmal abzuspielen. Das Waschmaschienen Programm wird doch auch nur einmal abgespielt.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1297
|
 |
« Reply #3 on: September 21, 2012, 09:22:00 am » |
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
Brattain Member
Karma: 161
Posts: 15707
+39 349 2158303
|
 |
« Reply #4 on: September 21, 2012, 09:24:45 am » |
Die Waschmaschiene hat einen Start-Knopf.  Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 2
Posts: 47
|
 |
« Reply #5 on: September 21, 2012, 10:28:19 am » |
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
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #6 on: September 21, 2012, 11:23:18 am » |
Hallo, In der Setup eine variable definieren, z.B. start=0, In der void loop start++; if start < 2 {
Mach was
}
Gruß
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 128
|
 |
« Reply #7 on: September 21, 2012, 12:35:10 pm » |
Vielen Dank, klappt so wie ich es wollte.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 128
|
 |
« Reply #8 on: October 01, 2012, 04:11:22 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #9 on: October 01, 2012, 05:00:36 am » |
wenn ich dich richtig verstehe, dann so:
if (sensors.getTempC(Sensor1) >= 25.8 && k1 == LOW) {
gruß Bernward
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 128
|
 |
« Reply #10 on: October 01, 2012, 05:34:13 am » |
Vielen Dank Bernward, aber leider funktioniert das nicht, k1 schaltet nicht um auf HIGH wenn sensor1 25.8 °C überschreitet.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #11 on: October 01, 2012, 05:56:52 am » |
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
Full Member
Karma: 1
Posts: 128
|
 |
« Reply #12 on: October 01, 2012, 09:49:33 am » |
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
|
|
|
|
|
Offline
God Member
Karma: 8
Posts: 621
42
|
 |
« Reply #13 on: October 01, 2012, 07:01:30 pm » |
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... } }
|
|
|
|
« Last Edit: October 01, 2012, 07:22:51 pm by Marcus W »
|
Logged
|
|
|
|
|
|