Comment arreter la loop

Bonsoir

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 ?

bonjour,
fonction boolean

etat_bouton = false;
..
..
..
loop
if (digitalRead(bouton == HIGH) etat_bouton = true;
if (ettat_bouton)===> ne pas jouer melodie
else====> jouer melodie

mais un code a montrer serait bien

De base, on arrête pas la loop().

Par contre, comme suggère IB, on peut mettre sous condition ses actions

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 [

exit(0)

](http://www.cplusplus.com/reference/cstdlib/exit/) mais bon c'est plutôt nul comme idée après il faudra appuyer sur reset...

Le vrai main est un tout peu plus compliqué

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.

Tout à fait @68tjs

loop() n'est pas prévue pour être arrêtée.

Si ton code ne doit s'exécuter qu'une seule fois, l'astuce est de tout coder dans la fonction setup()