Auteur Sujet: Une petite devinette pour un dimanche après-midi pluvieux  (Lu 579 fois)

Tony04

  • Hero Member
  • *****
  • Messages: 539
    • Voir le profil
Une petite devinette pour un dimanche après-midi pluvieux
« 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


msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2053
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une petite devinette pour un dimanche après-midi pluvieux
« Réponse #1 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.
Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 539
    • Voir le profil
Re : Une petite devinette pour un dimanche après-midi pluvieux
« Réponse #2 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 ???


Tony04

  • Hero Member
  • *****
  • Messages: 539
    • Voir le profil
Re : Une petite devinette pour un dimanche après-midi pluvieux
« Réponse #3 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.