LOCODUINO

Discussions Générales => Discussions ouvertes => Discussion démarrée par: Tony04 le mars 05, 2023, 11:51:12 am

Titre: Une petite devinette pour un dimanche après-midi pluvieux
Posté par: Tony04 le mars 05, 2023, 11:51:12 am
Bonjour à tous,

cela fait 24h complètes que je galère sur un bug et viens tout juste de trouver comment le contourner. Mais l'objectif est de comprendre, pas de contourner, n'est-ce pas ?

Voila le sketch que j'ai réduit au minimum pour le dépannage. Il est prévu pour gérer un pont tournant maison avec moteur PAP.

Tel que, le sketch provoque un reset interne en continu du processeur qui est un WeMos D1 MINI. Je suppose que cela vient de sa Watch-dog.

Mais il suffit soit de remplacer le while (ligne 14) par un if (ligne 15), soit de rajouter un delay(1) (ligne 16) pour que tout rentre dans l'ordre.

Si quelqu'un peut m'apporter une explication, je suis preneur.

Cordialement
Antoine

Titre: Re : Une petite devinette pour un dimanche après-midi pluvieux
Posté par: msport le mars 05, 2023, 01:20:31 pm
Bonjour Antoine,

j'ai du soleil, mais on fait un effort quand même ...

Ce que je vois c'est que le while boucle localement et empêche le stepper.run();  de s'exécuter dans le loop.

Tu peux voir si la simple initialisation de AccelStepper stepper(1, D3, D4); provoque la même chose.
Titre: Re : Une petite devinette pour un dimanche après-midi pluvieux
Posté par: Tony04 le mars 05, 2023, 05:39:53 pm
Bonjour Michel,

l'objectif était de voir chez qui il pleut  :)   :)   :)

Même si je rajoute un stepper.run(); dans la boucle on obtient le même résultat, dans le sketch complet il y est. Bizarre non ?

De plus dans le sketch complet il y a pleins de tests dans cette boucle, je n'explique donc pas non plus que le delay(1) arrange les choses.

Et pourquoi un if à la place du while règle le problème, dur dur, à qui le tour de chercher ???

Titre: Re : Une petite devinette pour un dimanche après-midi pluvieux
Posté par: Tony04 le mars 05, 2023, 05:55:30 pm
Trouvé,

mais alors complètement par hasard en tombant sur un sketch très ancien.

En fait il suffit de rajouter l'instruction yield(); pour relancer périodiquement la WD du processeur.

Par contre pourquoi le if et le delay arrange les choses, mystère.

Merci à toi Michel et bon dimanche soir.