[Résolu] Un programme peut-il repasser dans la boucle SETUP ?

Bonjour,

Ma 1ère réponse à cette question est “non” mais peut-être ai-je tort ?

En effet, j’ai un programme dont la structure est basiquement la suivante:

Void.setup
bla bla
#include divers
afficher un message de mise sous tension sur le LCD
}

Void.loop
différents IF enchaînés avec Clear LCD suivi d’un message sur le LCD dans chaque boucle IF
}

Rien de compliqué.

Mon problème est que :
Le message de Mise sous tension s’affiche bien
Puis pour chaque IF chaque message de boucle IF s’affiche bien
Mais dans un cas de ces IF, le message de Setup s’affiche à nouveau !

Bien sûr je posterai le code demain, mais je voudrais déjà savoir s’il se peut qu’un programme repasse par la boucle Setup ?

Ou alors un reset de la carte ? mais pourquoi ce reset se ferait-il toujours au même endroit ?..

Merci

Ou alors un reset de la carte ? mais pourquoi ce reset se ferait-il toujours au même endroit ?...

Probablement oui, un reset. Pas compris la deuxième partie de la phrase.

Bonsoir

....et si le Reset se passe 'toujours au même endroit' c'est peut être parce qu'en cet endroit une action produit une chute de tension provoquant ce reset

grizzli06:
mais pourquoi ce reset se ferait-il toujours au même endroit ?...

Parce qu'il y a de fortes chances que le problème soit situé dans cette partie du code.

Bonjour,

J’avais un problème similaire il y a quelques mois.

Lorsque je démarrais un petit moteur électrique, la chute de tension qu’il provoquait était trop importante pour l’arduino et en conséquence la carte coupait et redémarrait donc immédiatement après la coupure...car la tension était donc immédiatement rétablie...et ainsi de suite.

Peut-être as-tu un problème similaire? As-tu vérifié que les composants de ton montage n'étaient pas trop puissant pour l’alimentation que tu utilises ?

Un schéma serait bien.

Bonne journée !

Il y a aussi de fortes chances qu’on ne puisse pas t’aider si tu ne publies pas le code qui te pose problème.

[quote]Lorsque je démarrais un petit moteur électrique, la chute de tension qu'il provoquait était trop importante pour l'arduino et en conséquence la carte coupait et redémarrait donc immédiatement après la coupure...car la tension était donc immédiatement rétablie...et ainsi de suite.[/quote]

C'est en effet ce genre de raisonnement qui me fait aussi penser à un Reset, mais l'alim de l'Arduino est suffisamment costaud: transfo 2.5VA, diodes tenant 500mA et régulateur de tension 7805.

[b]Mais il est vrai que là ou le problème se produit, c'est justement dans la seule boucle IF qui n'est pas comme les autres, et où la demande en courant est un peu plus grande...[/b]

Le programme se trouve ci-après, mais voilà quelques explications:

Ce programme simule l'appui sur 6 différents boutons-poussoirs: lorsqu'on reçoit de la télécommande Infrarouge le code correspondant au bouton X, on ferme le relais X pendant 300ms puis on le ré-ouvre.

Les 5 boutons qui fonctionnent normalement sont programmés ainsi, SAUF celui qui pose problème (appelé FF dans le programme ci-dessous): dans ce cas, on garde le relais fermé (on ne le ré-ouvre pas au bout de 300ms), et il ne sera rouvert qu'à la réception d'un autre code infrarouge.

Par conséquent, la consommation due à ce relais FF fermé ne dure pas uniquement 300ms mais dure jusqu'à ce qu'on reçoive un autre code infra-rouge de la télécommande.

Et c'est justement dans cette boucle que le problème, vraisemblablement un reset, apparaît.

J'ai d'ailleurs été obligé de programmer ainsi ce bouton "FF", alors qu'il n'y a théoriquement aucune raison de faire ainsi, parce que sans cela l'appareil récepteur s'arrêtait au bout de 3 à 4 secondes; en procédant ainsi, le relais reste en permanence fermé, et donc il continue à faire la fonction attendue par "FF" (je suis d'accord qu'il ne devrait pas s'arrêter même si cette boucle IF était programmée comme les autres).

Les symptômes me laissent penser qu'il y a un reset dans cette boucle IF, puisque l'afficheur réaffiche le message figurant dans la boucle "void.setup".

Seulement voilà, je ne vois pas pourquoi l'alim n'ariverait pas à suivre: les relais sont des HE3621A0510 dont la datasheet se trouve ici: [url=https://www.mouser.fr/datasheet/2/240/Littelfuse_Reed_Relays_HE3600_Datasheet.pdf-876890.pdf]https://www.mouser.fr/datasheet/2/240/Littelfuse_Reed_Relays_HE3600_Datasheet.pdf-876890.pdf[/url]

La bobine (coil) du relais ayant une résistance de 500R sous 5V, j'en déduis que I=10mA. 

Or sauf erreur de ma part, une sortie de l'Arduino peut fournir jusqu'à 40mA, donc elle ne devrait pas faire de reset à cause de ça ???

Vous avez une idée ?....

Voici le programme:

char active_input[8]="Input 1"; 

         

void loop() {


// Partie GESTION DE "FF"
if((results.value==0x7B4)||(results.value==0xFB4)){ // Valeurs "7B4" et "FB4" correspondant au Bouton ">>" de la Télécommande
Serial.println("Appui sur Bouton FF:");
Serial.println(results.value, HEX);

digitalWrite(relai_FF,HIGH); 

strcpy(active_input, ">>     FF     >>"); 

lcd.clear(); // clear display
lcd.setCursor(0,1); 
lcd.print(active_input); 


results.value==0x000;
irrecv.resume();
}




// Partie GESTION DE "REW"

if((results.value==0x7B2)||(results.value==0xFB2)){ 
Serial.println("Appui sur <<:");
Serial.println(results.value, HEX);
digitalWrite(relai_FF,LOW); 

digitalWrite(relai_REW,HIGH); 
delay(500);
digitalWrite(relai_REW,LOW); 

strcpy(active_input, "<<    REW    <<"); 

lcd.clear(); 
lcd.setCursor(1,1); 
lcd.print(active_input); /


results.value==0x000;
irrecv.resume();
}



// Partie GESTION DE "PAUSE"

if((results.value==0x7B0)||(results.value==0xFB0)){ // Valeurs "7B0" et "FB0" correspondant au Bouton "II" de la Télécommande
Serial.println("Appui sur II:");
Serial.println(results.value, HEX);
digitalWrite(relai_FF,LOW); //il faut arrêter le relais FF avant tout

digitalWrite(relai_PAUSE,HIGH); 
delay(500);
digitalWrite(relai_PAUSE,LOW); 

strcpy(active_input, "PAUSE"); 

lcd.clear(); 
lcd.setCursor(5,1); 
lcd.print(active_input); 


results.value==0x000;
irrecv.resume();
}



}[/i]

Je crois que ta variable active_input n'est pas correctement dimensionnée pour contenir la chaine que tu y copies.

Damned fdufnews: tu as raison ! je vais corriger ça de ce pas...

Mais crois-tu que ça puisse expliquer le reset ???

C'était bien ça : une variable texte définie avec une longueur trop courte, à laquelle j'affectais un texte de longueur plus grande que sa longueur définie.

Conséquence: reset du programme !

Merci à vous les amis ;