J'ai un programme qui consiste a faire jouer une mélodie qui est sélectionné dans un menu a travers un Buzzer. Je cherche a stopper la mélodie qui se trouve dans une loop, grace a un bouton poussoir, j'ai essayé d'utiliser if + return, qui marche néanmoins le menu bug par la suite, j'ai essayé les interruption mais ça ne fait que bloqué momentanément la mélodie, elle reprend d'elle meme. Des idées ?
Le véritable code transmis au compilateur concernant la boucle infinie est celui ci :
while(1) // condition toujours vérifiée
{
loop();
}
Ce code ce n'est pas toi qui l'écrit c'est l'IDE qui l'ajoute automatiquement au tien avant de transférer le tout au compilateur.
Ce code n'est le fruit du hasard : un microcontrôleur doit toujours tourner sinon arrivé en fin de zone mémoire il s'arrete.
Pour le relancer les deux solutions sont :
appuyer sur reset
couper et remettre l'alimentation
Ce n'est pas vraiment terrible comme solutions !
La solution est donnée par Infobarquee en utilisant et en testant une variable intermédiaire dont la valeur dépend de l'état du bouton.
Le vrai main est un tout peu plus compliqué donc ce n'est pas la véritable code transmis au compilateur mais c'est l'idée
En gros il fait
int main(void)
{
init(); initVariant(); // et quelques autres initialisations
setup(); // appelle une fois le setup()
for (;;) { // puis boucle sur la loop()
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
On peut toujours arrêter la loop() et tout le programme en appelant [
Oui bien sur mais j'ai essayer de me limiter au strict nécessaire concernant la question sur la boucle infinie.
L'important est de noter que la structure du fichier final est parfaitement conforme aux règles du C/C++ et donc que les tuto du C/C++ sont parfaitement utiles.