Sketch wird gelegentlich nicht korrekt ausgeführt - Warum?

Und zwar betreibe ich über einen UNO und VMA03 (Velleman) einen Scheibenwischermotor. Im Prinzip tut das Teil auch korrekt, das was es soll = was im Code steht. Aus nicht nachvollziehbaren Ursachen wird das letzte delay(360000); gelegentlich übersprungen und dann aber auch wieder ausgeführt, ohne dass ich eingegriffen hätte.
Wo kann ich nach dem Fehler suchen, den UNO hab ich schon getauscht, hat nix gebracht.

int richtung; //0 - LOW = nach oben, 1 - HIGH = nach unten
// Motor
int pwm_b = 9;  //PWM 
int dir_b = 8;  //direction 
unsigned long mZeit; //  Zeit Motor
int c;
unsigned long wZeit; // Zeit Warten

void setup()
{
  Serial.begin (9600);
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_b, OUTPUT);
  richtung = 0;
}

void loop() {
  if (richtung == 0)
  { 
    richtung = 1;
    digitalWrite(dir_b, LOW);
    mZeit=4000;
    //wZeit=360000;
    c=3;
  }
  else
  {
    richtung = 0;
    digitalWrite(dir_b, HIGH);
    mZeit=2200;
    //wZeit=360000;
    c=3;
  }
  for (int i = 0; i <= c; i++)
  {
    delay(500);
    analogWrite(pwm_b, 255);
    delay(mZeit);
    analogWrite(pwm_b, 0);
   
  }
 //delay(wZeit); 
  delay(360000);
}

Danke !

mfg

Schon mit delay(360000UL); probiert?

Deine "gelegentlich" Aussage passt zwar nicht ganz, aber sonst gilt was in https://www.arduino.cc/en/Reference/IntegerConstants steht...

Mal abgesehen davon dass so ein delay fürchterlich langweilig ist ;) denn man hat keine Chance zu sehen, wie lange es noch dauert ...

Danke für den Versuch. Ich hatte den Wert auch schon in einer UL Variable verpackt (weil es eben variabel war) -> mit dem selben sporadischen Mißverhalten. Und leider nützt es mir nix aus den 6 min was anderes zu machen, weil ich nicht spiele:https://www.youtube.com/watch?v=1-dsMRec2wc

Es ist nun mal so, dass der Code eine Zeitlang korrekt abgearbeitet wird und auf einmal fährt das Teil nach rechts und ohne die x min Pause wieder nach links - dort wird immer gewartet (es ist also noch nie passiert, wenn der dir_b mit HIGH in die FOR rein ist), durchaus einige Male in Folge und wenn ich dann vor Ort bin (ich kann das Teil aus meinem Küchenfenster sehen) ist plötzlich alles wie es soll.

Ich könnte ja noch den VMA03 tauschen ...

Ich hatte auch schon an einen Kabelbruch gedacht und hab fast (bis auf die Kabel die aus dem Motor kommen) alles kontrolliert/getauscht.

Und ja, wenn ich den "Automat" aus- und wieder einschalte funktioniert es ne Weile...

OK, das "gelegentlich" war ernst gemeint, damit ist das UL vom Tisch.

Könnte es sein, dass er ab und zu mal über Reset kommt ? Nach Reset kommt immer erstmal Richtung LOW dran.

Für ein Reset kann es mehr Gründe geben, als der Sketch Bytes hat, und die kommen gern gelegentlich und haben nichts mit dem Sketch zu tun...

Je weniger Teile so eine Maschine hat, desto robuster; daher zögere ich, Firlefanz wie Endschalter vorzuschlagen, ansonsten:

Beim Start feststellen, wo der Deckel ist. wenn zu: warten, dann in die andere Stellung fahren. sonst: in eine der Endlagen fahren.

Da merkst du von Reset-Problemen deutlich weniger.

Das mit wo-der-Deckel-wie-weit-ist habe ich schon hinter mir (Ultraschall), das hat auch zeitweise, auch gut funktioniert - aber eben nicht auf Dauer. Deshalb die Abrüstung. Aber dass sich das Teil selbst reseten kann - evtl. Insekten, die wo drüber laufen? Mit dem Ultraschallsensor (SR04) kann ich ja nochmal spielen - die Herausforderung ist dann erstmal, wo und wie ich das verbaue...

Was kann ich denn bei frostigen Temperaturen so für Überraschungen erwarten bzw. reicht ne Styropor-Box?

Ist denn Deine Stromversorgung ausreichend stabil oder sind da Störungen drauf? Die können den kleinen Rechenknecht auch zum Neustart überreden.

Ich persönlich würde ne feine Styroporpackung als ausreichend erachten.

Auf deinem Elektrozaun, der den Pferden einen langen Weg vorgibt, ist nichts drauf?

Störungen können über die Stromversorgung, oder elektrostatisch/magnetisch durch die Luft kommen. Auch der Motor erzeugt Störungen.

Der Stichzaun ist ohne Strom.

Das mit der Stromversorgung läuft über einen Laderegler an dem eine Solarzelle + Akku dranhängt. Die Vermutung/den Eindruck, dass da irgendwas ‘durch die Luft fliegt’ - vor allem wenn der Aussenzaun + auch die Bänder am Deckel an sind - hatte ich auch schon, kam mir aber bissl weit hergeholt vor und ändern könnte ich es auch nicht.

War aber heut noch kreativ: seitlich an den ‘Deckel’ ein Brettl (ca. 2810cm) geschraubt. Elektronik +SR04 neu verpackt, in der passenden Höhe an den Balken gepappt. Neustart sah gut aus, mal schaun, wie der Heu-Stand li/re morgen früh ist

int richtung; //0 - LOW = nach oben, 1 - HIGH = nach unten
// Motor
int pwm_b = 9;  //PWM 
int dir_b = 8;  //direction 
int trigger=11;
int echo=10;
long dauer=0;
unsigned long mZeit; //  Zeit Motor
int c;
unsigned long wZeit; // Zeit Warten
void setup()
{
  Serial.begin (9600);
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_b, OUTPUT);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH);
  if (dauer <=220){
  richtung = 0;}
  else {
  richtung = 1;}
}

void loop() {
  if (richtung == 0)
  { 
    richtung = 1;
    digitalWrite(dir_b, LOW);
    mZeit=4000;
    //wZeit=360000;
    c=3;
  }
  else
  {
    richtung = 0;
    digitalWrite(dir_b, HIGH);
    mZeit=2200;
    //wZeit=360000;
    c=3;
  }
  for (int i = 0; i <= c; i++)
  {
    delay(500);
    analogWrite(pwm_b, 255);
    delay(mZeit);
    analogWrite(pwm_b, 0);
   
  }
 //delay(wZeit); 
  delay(360000);
}

Danke nochmal für Eure Denkanstöße - mich verfolgt das schon Monate

hi,

Du könntest alle paar minuten die millis an einem kleinen display anzeigen. da würdest Du sehen, ob er resetted hat.

gruß stefan

Es scheint in meinem Sinn soweit zu funktionieren. Habe heute früh noch das delay(360000) an den Anfang von Loop gesetzt. Es scheint ja so zu sein, dass wohl der UNO zum Ende der For-Schleife vermutlich stromlos ist. Könnte dieses Problem in diese Richtung gehen?
Der UNO wird über USB versorgt und der Motor über den VMA03 mit 12 Volt 2A - beides vom Laderegler.

Display - ist mir ehrlich gesagt zuviel Arbeit für diese Info und eigentlich will ich wissen warum resetted wird, dass resetted wird ist eigentlich klar…

Ende von loop() ist das gleiche wie Anfang von loop() (wie der Name schon sagt) ;)

Aus "diese Richtung"

  1. Einen Elko (2200 µF) an die Spannungsversorgung direkt am Ardu einbauen.

"Arduino über USB und beides vom Laderegler" versorgen heisst, du ignorierst den Regler im Arduino und versorgst direkt den 5V Vcc. Neben einem möglichst großen Elko ist auch ein schnellerer Keramikkondensator direkt am Arduino sinnvoll.

Das mit dem Anfang/Ende vom Loop stimmt schon, nur fährt der Deckel jetzt nicht gleich nach dem Reset wieder zurück. Ich habe heut vormittag nochmal gespielt mit Zaun unter Strom und E-Band am Deckel mit(->Reset) /ohne (-> kein Reset) Strom. Werde also mal versuchen, ob es hilft, den direkten Kontakt des E-Bandes mit der Siebdruckplatte zu unterbinden...