Arduino hängt fest

Hallo Leute,
hatte auch schon jemand das Problem das sich der Arduino ca. einmal die Woche fest fährt und nichts mehr macht? Oder eher, kennt einer eine Lösung dafür?

Verwendet wird ein Arduino UNO, ein 4er Relaismodul, ein 4-Zeiliges LCD-Display, ein DHT22-Sensor, eine Echtzeituhr DS3231, ein Schalter und einen zu dem Schalter gehörigen Widerstand.
Versorgt wird der UNO über die USB-Schnittstelle mit einem Handyladegerät, also 5V.

Sketch und Verdrahtung, folgen als Datei.

Vielen Dank schon mal in Vorraus.

Zeitschaltuhr_Temperaturschaltung_fuer_Terrarium_V9.txt (15.8 KB)

Klar, die Lösung ist doch offensichtlich!

  1. Bringe die Schaltung in Ordnung
  2. Behebe den Fehler in Zeile 42

Shane93:
Hallo Leute,
hatte auch schon jemand das Problem das sich der Arduino ca. einmal die Woche fest fährt und nichts mehr macht?

Nein!

Oder eher, kennt einer eine Lösung dafür?

Ebenfalls nein, ohne weitere Informationen (welcher Arduino, dein Sketch, was hast du gemacht und angeschlossen, wie wird der Ardunio versorgt, gibt es serielle Ausgabe mit denen du das Verhalten überprüfen kannst?) nicht! Alternativ findet sich vielleicht noch einer mit einer Kritallkugel... :wink:

Entweder die Lösung von combie oder für ausreichend Kühlung sorgen, z.B. in einem Kühlschrank.

HotSystems:
Entweder die Lösung von combie....

1 ist sicher!

In 2 versteckt sich das Problem zu gern!

Gruß Fips

Derfips:
1 ist sicher!

In 2 versteckt sich das Problem zu gern!

Gruß Fips

Du nimmst einem auch jeden Spass. :wink:

Hallo,

ja , hatte ich auch schon :slight_smile:

es lag immer daran das ich irgendwo Fehler drin hatte, die zu einem Überlauf oder sonst was geführt haben.

viele String Objekte verwendet
millis() irgendwie mit int Variablen verarbeitet.
Arrays falsch dimensioniert und über das Ende hinaus geschieben
Speicher an sich zu knapp , Programm zu lang

usw.

Heinz

HotSystems:
Du nimmst einem auch jeden Spass. :wink:

Ich gelobe Besserung!

Derfips:
Ich gelobe Besserung!

Das nehme ich wohlwollend an.

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?