Moin Leute, ich habe nun nach einer gefühlten Ewigkeit die Nase voll und bitte euch um Hilfe.
Ich hab einen Sketch geschrieben, habe aber das Problem, dass der Skatch bei While nicht in eine Schleife geht.
Das ist der Skatch:
int messwert;
int messwert2;
int Relais=7;
int messwert3;
void setup()
{
Serial.begin(9600);
pinMode (7, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(7, HIGH);
}
void loop()
{
messwert=analogRead(A0);
Serial.print("Feuchtigkeits-Messwert:");
Serial.println(messwert);
delay(500);
if (messwert >500)
{
digitalWrite(Relais, LOW);
digitalWrite(13, HIGH);
delay(6000);
digitalWrite(13, LOW);
digitalWrite(Relais, HIGH);
}
delay(20000);
messwert2=analogRead(A0);
if (messwert2 >500)
{
Serial.print("Ich halte");
while(1);
}
else
{
Serial.print("Ich halte nicht");
}
delay(20000);
messwert3=analogRead(A0);
do
{
delay(50); // wait for sensors to stabilize
messwert3=analogRead(A0);
}
while (messwert3 >500);
}
WSL07:
Moin Leute, ich habe nun nach einer gefühlten Ewigkeit die Nase voll und bitte euch um Hilfe.
Das könnten wir auch laufend schreiben, da sich keine darum schert.
Setze deinen Sketch in Code-Tags.
Verwende dazu die Schaltfläche </> oben links im Editorfenster. Das kannst du auch nachträglich machen. Dazu den Sketch markieren und die Schaltfläche klicken.
WSL07:
Wie meinst du das, welche Werte in Messwert2 stehen? DAs ist doch in der Whileschleife eine andere Variable
Das ist keine Antwort, mit der combie, du, oder der Rest der Welt etwas anfangen kann, fürchte ich.
Mal abgesehen davon, dass du zwei while in deinem sketch hast (deren Sinn ich in beiden Fällen nicht erkenne), was für Ausgaben auf Serial kommen denn an?
Wie oft kommt die Ausgabe "Feuchtigkeits-Messwert:xxx";
Stimmt denn die LED-Anzeige mit der Test-Ausgabe überein?
Hast du die begründete Hoffnung, dass 20 Sekunden, nachdem das Relais für 6 sek an war, der Messwert auf unter 500 gesunken ist?
Wenn jemals die Meldung "Ich halte" kam, sollte der Arduino einen Reset brauchen. Richtig?...
Und, wo wir schon beim Fragen sind:
Warum verwendest du verschiedene messwert Variable? Die du dann doch nicht mehr verwendest?
michael_x:
Mal abgesehen davon, dass du zwei while in deinem sketch hast (deren Sinn ich in beiden Fällen nicht erkenne), was für Ausgaben auf Serial kommen denn an?
Wie oft kommt die Ausgabe "Feuchtigkeits-Messwert:xxx";
Stimmt denn die LED-Anzeige mit der Test-Ausgabe überein?
Hast du die begründete Hoffnung, dass 20 Sekunden, nachdem das Relais für 6 sek an war, der Messwert auf unter 500 gesunken ist?
Wenn jemals die Meldung "Ich halte" kam, sollte der Arduino einen Reset brauchen. Richtig?...
Und, wo wir schon beim Fragen sind:
Warum verwendest du verschiedene messwert Variable? Die du dann doch nicht mehr verwendest?
Ich probiere mal alles zu beantworten.
Der erste while soll dafür sorgen, dass der Komplette Sketch anhält und nicht mehr weiter läuft.
Beim Zweiten soll der Sensor solange messen, bis der Wert wieder über 500 ist.
Hintergrund dazu ist, dass an dem Relais eine Pumpe hängt, welche Wasser abpumpt. Sie soll dann solange warten, bis das Wasser wieder am Feuchtigkeitssensor angekommen ist. Dann soll sich der Vorgang wiederholen. Die zweite if-Bedingung ist dafür, dass wenn die Pumpe verstopft ist, das System nicht ewig Strom zieht.
Ankommen auf dem Serial tut die Feuchtigkeitsmeldung und "ich halte nicht an". Danach jedoch wiederholt sich der Vorgang ohne das der Sensor einen Wert über 500 hat. Die Led funktioniert wie im Sketch programmiert.
Ich habe die 6 Sek. testweise eingestellt, um nicht jedes mal so lange warten zu müssen, danke für den Hinweis:D
Richtig, jedes mal wenn "ich halte" kommt soll man den Arduino resetten müssen.
Ankommen auf dem Serial tut die Feuchtigkeitsmeldung und "ich halte nicht an". Danach jedoch wiederholt sich der Vorgang ohne das der Sensor einen Wert über 500 hat
Das hast du doch so programmiert, was ist daran falsch?
Solange der Sensor unter 500 ist, kommt alle 40 sek. "ich halte nicht an".
Controller werden üblicherweise so programmiert, dass sie ewig laufen und immer das gleiche machen. Und das ist gut so
Noch besser wäre es, wenn sie gar keine delay(20000) dafür brauchen und keine while Schleifen.
michael_x:
Das hast du doch so programmiert, was ist daran falsch?
Solange der Sensor unter 500 ist, kommt alle 40 sek. "ich halte nicht an".
Controller werden üblicherweise so programmiert, dass sie ewig laufen und immer das gleiche machen. Und das ist gut so
Noch besser wäre es, wenn sie gar keine delay(20000) dafür brauchen und keine while Schleifen.
Das Problem aber ist, dass er nicht nur sagt "ich halte nicht an" sondern er den Loop einfach fortsetzt.
WSL07:
OK, dann muss ich mir was ganz anderes ausdenken. Trotzdem danke für eure Hilfe
Die Funktionen deines Sketches erschließen sich mir nicht.
Evtl. kannst du ja noch die von dir gewünschten Funktionen kurz erklären.
Dann können wir da auch noch ein paar Tipps geben.
Eine Pumpensteuerung würde ich nie über eine Zeit fahren.
Immer über Sensoren oben (einschalten) und unten (ausschalten), o. ä.
So steuere ich z.B. meine Drainagepumpe, und das schon über Jahre.
Kommt natürlich sehr drauf an, was du mit deiner Pumpe machen willst.