Arduino hängt fest

Rentner: es lag immer daran das ich irgendwo Fehler drin hatte,....

Kann man das nicht irgendwie vermeiden?

Oder hat combie mit Punkt 2 recht?

Edit: Genug Ende

Derfips: Kann man das nicht irgendwie vermeiden?

Natürlich, du musst es nur anders machen, oder besser richtig!

Es gibt mehrere Möglichkeite die zu solchen Symptomen führen. Welche in Deinem Fall es wirklich sind, können wir nicht sagen. Uns fehlen die nötigen Informationen. Grüße Uwe

Shane93: Leute ihr verunsichert mich ganz schön.

Ja, wir können aus jedem Problem das Maximum raus holen.

Leute ihr verunsichert mich ganz schön. :smiley:
Ich werde versuchen heute nachmittag meinen Sketch nachzutragen. Er ist aber ganz schön groß, wenn wirklich jemand Lust hat sich da einzulesen, wäre das sehr nett, wenn nicht, kein Problem. Die anderen Infos, kommen dann natürlich auch.

So die Ausgangssituation ist aktualisiert, habe es doch schon jetzt geschafft. Wie gesagt, wer sich einlesen möchte, gerne, wenn nicht, kann ich es verstehen.

Danke schon einmal.

offensichtliches sehe ich nicht. Evtl. hängts an deiner I2C Kommunikation? Kannst vieleicht mehr Serial.Debug Ausgaben einbauen, damit du siehst wo sich dein Monster aufhängt? Evtl. zu den Serial.Debug.Ausgaben auch die zwei letzten Zeichen am LCD Reservieren nutzen, und dort immer anzeigen, wo der Code sein soll (denn den PC willst vermutlich nicht eine Woche laufen lassen)

Also eine kleine Funktion die dir einfach in 1,14 eine Nummer aufs LCD schicken, und im Code verteilst du dann diese LCD.Debug ausgabe mit eigenen Nummern. Das stört hoffentlich nicht so sehr, du siehst aber, wo der Code das letzte mal war bevor er einfriert.

Die Idee find ich echt gut, das werde ich mal ausprobieren. Danke schon mal dafür. Mal eine andere Frage, sehe ich das richtig das mein Timer für die Feuchtigkeitskontrolle nur einmal gestartet wird und wenn die Feuchtigkeit in dem Moment nach dem Ablauf des Timers nicht klein genug ist, nie wieder gestartet wird? Ich bin mir da ganz schön unsicher.

Ich habe erhebliche Schwierigkeiten dein Programm zu verstehen.

Warum? Es ist nicht aufgeteilt, in einzeln testbare Automaten. Die Verstrickungen verteilen sich auf hunderte Zeilen. Für mich ist das leider ein riesen Durcheinander, ohne klar ausformulierte Abhängigkeiten.

Mit dem Schaltplan habe ich auch 2 Sorgen: Meines Erachtens nach kann das nicht laufen, da die Stromversorgung fehlt. Warum du den DHT22 über einen Portpin versorgst, ist mir auch nicht klar.

--

Ich muss also leider an der Stelle aufgeben und kann dir nur dazu raten den WDT zu aktivieren.

Ich weiss das mein Programm nicht so einfach ist, ich wusste es nur nicht besser.

Die Stromversorgung habe ich auch nicht eingezeichnet, die kommt über die USB Schnittstelle, das funktioniert einwandfrei.

Und der DHT wird über einen Pin versorgt, da ich mit dem ersten Sensor immer ausfälle hatte und ihn somit neustarten konnte, jetzt ist es nur noch als Sicherheit drin, bevor das wieder passiert.

Alles gut, kein Problem und mit dem WDT werde ich mich wohl wirklich mal beschäftigen müssen, habe ich noch nie gemacht.

Hat jetzt nichts mit dem Problem zu tun, es ist nur eine Anmerkung.

int getIntFromString (char *stringWithInt, byte num)
// input: pointer to a char array
// returns an integer number from the string (positive numbers only!)
// num=1, returns 1st number from the string
// num=2, returns 2nd number from the string, and so on
{
  char *tail; 
  while (num>0)
  {
    num--;
    // skip non-digits
    while ((!isdigit (*stringWithInt))&&(*stringWithInt!=0)) stringWithInt++;
    tail=stringWithInt;
    // find digits
    while ((isdigit(*tail))&&(*tail!=0)) tail++;
    if (num>0) stringWithInt=tail; // new search string is the string after that number
  }  
  return(strtol(stringWithInt, &tail, 10));
}

Ich glaube du hast strol nicht richtig verstanden. Du setzt tail hinter die Zahl, damit es dann von strol überschrieben wird, warum?

der DHT22 braucht lt. Datenblatt zwar nur 1.5mA - aber ich würde VCC trotzdem nicht an einen Port-Pin hängen. Wenn du einen Reset brauchst, häng ein Transe/FET/Relais dazwischen.

Was du mit den Timer machst, musst du selber analysieren. Ich habe diese lib nicht im Einsatz.

Wenn du nicht weist was die Lib im Hintergrund macht, dann versuche die Lib Abläufe zu verstehen oder bleibe durchgängig bei den hangeschriebenen millis(). Du hast den riesen Vorteil dass der Schreiber der Lib hier mitliest, vieleicht hast du also doch eine Chance Erkenntnisse zu gewinnen, wenn du ihn konkrete Fragen stellst.

WDT gegen einfrieren ist kein Ausweg. Such deinen Fehler.

Die Stromversorgung habe ich auch nicht eingezeichnet, die kommt über die USB Schnittstelle, das funktioniert einwandfrei.

Das glaube ich dir nicht.

USB ist nur verpflichtet 100mA zu liefern. Selbst die Polifuse auf dem UNO kann nur 500mA

Und 500mA scheint mir doch auch schon arg wenig für den ganzen Tüddel.

Ich weiss das mein Programm nicht so einfach ist, ich wusste es nur nicht besser.

Das macht nix.. Ich kann es so leider nur nicht reparieren/prüfen.

Und der DHT wird über einen Pin versorgt, da ich mit dem ersten Sensor immer ausfälle hatte und ihn somit neustarten konnte, jetzt ist es nur noch als Sicherheit drin, bevor das wieder passiert.

Könnte ein Zeichen dafür sein, dass du ernste Probleme mit der Stromversorgung hast.

und mit dem WDT werde ich mich wohl wirklich mal beschäftigen müssen, habe ich noch nie gemacht.

Ja. Da offensichtlich das Leben von Tieren davon abhängt, solltest du das tun.

Aber das darf dich nicht daran hindern alles andere in Ordnung zu bringen. Der WTD ist nur der letzte Rettungsring um Schaden abzuwenden.

Whandall ich muss dir ehrlich gestehen, das ist der einzige Part in meinem Programm, den ich absolut nicht verstehen und auch nicht was er macht, da steck ich nicht Tief genug drin, deswegen habe ich den nicht verändert, das und der ganze Teil für die RTC hatte ich nur kopiert, weil ich es ja für die Uhrzeit brauchte.

noiasca ich weiss doch was die lib macht, ich glaub aber einen Ablauffehler gefunden zu haben, bin mir aber nicht sicher.

combie es ist aber wirklich so, alles läuft über die Schnittstelle und bisher läuft das auch wunderbar so, es ist nie was aus gegangen oder so. Also lieber nicht über einen Pin schalten? Aber Stromprobleme sind mir echt noch nicht aufgefallen.

Shane93: Whandall ich muss dir ehrlich gestehen, das ist der einzige Part in meinem Programm, den ich absolut nicht verstehen und auch nicht was er macht, da steck ich nicht Tief genug drin, deswegen habe ich den nicht verändert, das und der ganze Teil für die RTC hatte ich nur kopiert, weil ich es ja für die Uhrzeit brauchte.

Du solltest C++ Tutorials durcharbeiten bis du diesen Teil verstehst, die Dokumentation zu strtol wäre auch sinnvoll zu lesen und zu verstehen.

Der Ersteller hat anscheinend nicht verstanden was er tut, was an der Qualität des kopierten Teils zweifeln lässt.

combie: Der WTD ist nur der letzte Rettungsring um Schaden abzuwenden.

Und oftmals die einzige verbliebene praktikable Lösung, vor allem, wenn Störungen selten und aleatorisch von „aussen“ auf das System einwirken.

Kommt diese String Funktion nicht von jurs? Das mit tail in strtol() ist eigentlich egal. Mit dem Parameter kann man strtol() etwas ähnlich wie strtok_r() verwenden. Hier braucht man das gar nicht, da die Funktion verlassen wird. Da sollte man besser NULL übergeben. Aber es schadet auch nichts

Siehe Doku:

Reference to an object of type char*, whose value is set by the function to the next character in str after the numerical value. This parameter can also be a null pointer, in which case it is not used.

Aber Stromprobleme sind mir echt noch nicht aufgefallen.

Diese können einem auch nicht auffallen, wenn man nicht ganz genau hinschaut. Z.B. mit einem Oszi. Auch könnte man den BrownOut des UNO (testweise) auf 4,3V hoch setzen.

Alternativ, kann der UNO seine eigene Betriebsspannung messen. So könntest du dann minimal und maximal Werte ermitteln um zu prüfen ob das aus dem Ruder läuft. Meine Glaskugel sagt: Du wirst dich damit selber verblüffen.

Beispielrechnung: (alle Werte nur geschätzt) 4 Relais a 100mA macht 400mA 1 LCD mit Beleuchtung 80mA 2 ATMega auf dem UNO a 30mA macht 60mA 1 RTC 10mA Feuchtesensor 6mA, im Einschaltmoment 50mA

Wenns übel kommt, sind das zusammen über 600mA und die Sicherung kann nur 500mA

Serenifly, ja das müsste von jurs sein, wo du das jetzt sagst. Also muss ich da nicht unbedingt was ausbessern?

combie wie man das machen muss das er seine Spannung misst, weiss ich leider nicht und ist auch schwierig noch umzubauen, da alles schon verlötet ist und fest verbaut. Also es sind ja auch nur 4 Relais beschalten, eins ist quasi Reserve und die Beleuchtung des Displays ist ja so gut wie immer aus, nur bei betätigen des Tasters ist sie an und der Sensor wird ja auch an für sich nie neugestartet. Eigentlich dürfte ich dadurch nicht an die Grenze von 500mA kommen.

combie wie man das machen muss das er seine Spannung misst, weiss ich leider nicht und ist auch schwierig noch umzubauen, da alles schon verlötet ist und fest verbaut.

Das sollte auch ohne Umbau oder externe Bauteile gehen.
Nicht so genau, aber für diese Test Zwecke ausreichend.