Voilà je souhaite commander à distance (ESP8266) un moteur pas à pas (driver A4988) en continu, en fonction d'une température seuille réglable et transmise via mon dashboard.
Le problème est que lorsque le moteur fonctionne, celui ne fait que tourner, s’arrêter, tourner, s’arrêter.. comme si il subissait une interruption?
J'ai donc essayer de stocker les valeur dans l'eeprom en pensant que c’était lié au rafraichissement des variables mais j'ai toujours le meme probleme.
voici le code. Merci pour votre aide car je sèche un peu...
Attention, les ESP8266 ne contiennent pas de véritable EEPROM, la fonction EEPROM ici utilisée émule de l'EEPROM dans la mémoire FLASH . Cette dernière ne supporte que 100 000 écritures et un nombre infini de lectures.
De manière assez générale les microcontrolleurs 32 bits récents , pas seulement les ESP, ne contiennent pas d'EEPROM
On a eu récement sur le site le cas d'une personne qui écrivait en boucle en Flash et a détruit son ESP en moins de 24h
En effet , mais il me me parait pas inutile d'attirer au passage l'attention sur un aspect non néglieable dont pourraient pâtir des lecteurs recopiant ton bout de code.
autre parenthèse : Arduino Cloud semble intéresser peu de monde ici , des solutions antérieures et concurrentes étant préférées.
On ne voit qu'une partie de ton code.
Mais en gros
tu fais ArduinoCloud.update( )?? qui dure un certain temps (lequel??)
tu regardes si 30 secondes se sont écoulées (auquel cas tu mesures la température)
tu regardes si la température est inférieure à un seuil
si oui, tu dis de chauffer et tu fais faire un tour au moteur
si non, tu stoppes le moteur
Si on regarde ta loop(),
la mesure de la température ne se produit pas souvent et elle ne dure pas longtemps.
le test de la température par rapport au seuil ne dure pas longtemps
Donc la boucle devrait tourner assez vite et régulièrement.
Je vois 2 causes possibles à ton problème de "tourner, s’arrêter, tourner, s’arrêter" qui pourraient être:
un temps important passé dans ArduinoCloud.update( )
une bascule permanente de etatChauffe parce que tu es près du point de basculement de ton seuil.
Solutions proposées:
pour la cause 1, chiffrer le temps passé dans ArduinoCloud.update( )
pour la cause 2, introduire une hystérésis dans ta détermination du seuil pour que le basculement de etatChauffe soit franc.
1 remarques aussi tu mesures la température toutes les 30s mais tu appelles ArduinoCloud.update() en permanence est-ce bien nécessaire.
Oui j'ai mis 30 secondes pour eviter de mesurer tout le temps la température et avoir une certaine stabilité dans les mesures mais j'aurais pu faire une moyenne, ca aurait ete plus propre.
Le moteur tourne effectivement lorsque je chauffe, mais continuellement, pas seulement un tour. Et s'arrete lorsque je ne chauffe plus = température égale ou supérieure à la température réglée et transmise depuis ArduinoCloud.update() = Variable setTemp
Je pense effectivement que c'est ArduinoCloud.update() qui génère ces interruptions de la commande moteur "SteppMotorOn".
J'ai bien évidement écarter la problématique de température réglée trop proche de la température mesurée en réglant une température suffisamment éloignée..
tu génères un signal carré à 250Hz.
Donc tu peux aussi bien faire un tone(STEP, 250) qui va faire un signal carré à 250Hz aussi longtemps que tu ne feras pas noTone(STEP). Et donc le signal ne s'interrompra pas même pendant que tu feras ton ArduinoCloud.update();