Stop un programme en r'appuyant sur un bouton

voici mon nouveau code:

#include <OneButton.h>
#include <talkietz.h>


long portPotentiometre    = A0;
float valeurPotentiometre;

long pinReset2             = 12; //reset automatique
long pinReset              = 2;  
long portButtonDepart      = 8;
long portLED_vert          = 7;
long portLED_orange2       = 6; 
long portLED_orange1       = 5;
long portLED_rouge         = 4;
long portRelais_aimant     = 11;
char DIO_Buzzer            = 3;  //enceinte
OneButton button(portButtonDepart, true); // true pour le mettre en INPUT_PULLUP

// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
enum {REPOS, ETAT_Marche, ETAT_Arret} etatCourant;


const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Talkie voice;
//ok
const uint8_t spW089587 [] PROGMEM ={0xA3,0x74,0xBA,0xD7,0x95,0xF3,0xAD,0xD2,0xE9,0x2F,0xE2,0x5C,0x77,0x32,0xCF,0xAF,0x99,0x33,0xDD,0x48,0x5D,0x1A,0x86,0xEC,0xD6,0xAE,0xF4,0x9D,0xC1,0x27,0x94,0xB2,0x4A,0xEA,0x30,0x8E,0xB2,0x03,0xC3,0xDB,0xCD,0x2D,0x4C,0x1D,0x9F,0x62,0x72,0x56,0xEB,0xAA,0x73,0xA6,0xA5,0x99,0x75,0x6A,0xD6,0x99,0x86,0x61,0xD1,0xEE,0x5B,0x67,0xE9,0x0A,0x2D,0x7B,0x6A,0x9F,0xB5,0x09,0x96,0x9C,0xA9,0x5C,0xA8,0x4C,0x39,0x77,0x2A,0xB0,0xA3,0x12,0x95,0xBC,0x0D,0x41,0x0F};
//attention
const uint8_t spW010458 [] PROGMEM ={0xA7,0x2C,0xAE,0xBA,0xD4,0x27,0x9F,0x32,0xD7,0x4A,0xB3,0x8E,0x7C,0x8A,0x66,0xA2,0x82,0x2B,0xD1,0xC9,0xBB,0x95,0x34,0x8F,0xD8,0x27,0x6B,0x5A,0x5C,0xDD,0x66,0x9B,0x2A,0x63,0xB1,0x48,0x4B,0x0C,0x0E,0x18,0xDC,0xF4,0x44,0x93,0x9B,0xB9,0x86,0x95,0x13,0x27,0xDE,0x2D,0xA2,0x9D,0x4F,0x9C,0xE8,0x34,0x0B,0x77,0x3E,0x71,0x26,0x5E,0x95,0xD0,0x66,0x25,0x91,0x66,0xA6,0x69,0xE2,0x95,0x0E,0xA8,0xC9,0x22,0x69,0x4E,0xFE,0x9D,0x96,0x92,0xC8,0x59,0xC1,0x6F,0x99,0x13,0x1A,0x79,0x35,0xFF,0x4C,0x4C,0x49,0x92,0xD5,0xFC,0xB7,0x3D,0xE5,0x66,0x56,0xF4,0xC7,0x4D,0x67,0x9A,0x5D,0xD1,0x5F,0x77,0x55,0x61,0x26,0x01,0x77,0x8C,0x25,0x60,0xCF,0xD6,0xD3,0x8E,0x24,0x42,0x1E,0x4D,0xCE,0x58,0x2C,0x4B,0x4C,0xB6,0x3A,0x73,0x32,0x6A,0x96,0xB6,0x78,0xAD,0xD1,0x59,0xB2,0xC6,0x9C,0xB1,0x07,0x6E,0x13,0x22,0x49,0xDB,0x11,0x48,0x4D,0x18,0xDB,0x29,0x57,0x20,0x35,0xE6,0x62,0xBB,0xDC,0x81,0x45,0x7B,0x68,0xE4,0x07};
//prêt
const uint8_t spW101286 [] PROGMEM ={0xAB,0xA8,0xAE,0x3D,0x43,0x2C,0x9D,0xA2,0xAA,0x0B,0x15,0x0B,0x7D,0x8A,0xA6,0x3F,0xD9,0xCC,0xCA,0x29,0x4B,0x1C,0x13,0x09,0x3B,0xA7,0x6B,0x3A,0xDD,0x39,0x6B,0x9F,0xA9,0xB8,0x74,0xE9,0x0C,0x73,0x96,0x12,0x42,0x73,0x22,0xCE,0xD9,0x8A,0x8E,0x88,0x1A,0xB3,0xE7,0x68,0x5A,0x22,0xAA,0x23,0x9D,0xAB,0x6B,0xE7,0xEC,0x32,0xA3,0x00,0xCC,0x2C,0xE1,0x01};
//pilote
const uint8_t spW095753 [] PROGMEM ={0x06,0xB0,0xDA,0x9D,0xD0,0xCE,0xB8,0x55,0x4F,0x93,0x93,0xAC,0x5A,0xA1,0x42,0x72,0x4E,0xB2,0x5B,0x32,0xB0,0x3A,0x39,0xD9,0xC0,0x22,0x56,0x33,0xFB,0xE4,0x1D,0x91,0x67,0x4F,0xA5,0x53,0x0C,0x2E,0xAC,0x55,0x8D,0x4F,0xDF,0x11,0xC5,0x74,0xD6,0x3C,0x53,0xC3,0x1C,0x9E,0x59,0xE7,0xCC,0x45,0x6A,0x78,0xE6,0xCC,0xB3,0x16,0x6D,0xA9,0x96,0xB3,0xCE,0x96,0x55,0x94,0x6A,0xCC,0x3A,0x7B,0x65,0xDA,0xED,0x5C,0xEB,0x94,0x95,0x7A,0x99,0x67,0xA5,0x51,0x36,0x16,0x46,0x12,0x93,0x58,0xE9,0x91,0x8B,0x78,0xD6,0x86,0x07};
//regardez
const uint8_t spW108538 [] PROGMEM ={0x67,0xC8,0x22,0x5A,0xA5,0xD2,0x9C,0x29,0x8B,0x2E,0x65,0x6F,0x77,0xC6,0xA4,0xA6,0x98,0xB3,0xED,0x69,0x93,0xE8,0x32,0xF6,0x34,0xA7,0xCE,0xB2,0xCA,0xD8,0xD2,0x9E,0xB2,0x0A,0xAF,0x50,0xF5,0x76,0xF2,0xCA,0xAC,0xDD,0x3C,0xEB,0xC9,0x32,0xF5,0xB0,0xE8,0x34,0x27,0xAF,0x46,0xC9,0x3A,0x5C,0xB5,0x3C,0x4A,0xB6,0x3E,0xB3,0xBC,0xAA,0xA1,0x45,0x28,0xB2,0xCA,0x69,0xBB,0x12,0xE1,0xEA,0x4A,0xA7,0x6B,0x41,0x85,0xA3,0x6A,0x9F,0xAE,0x05,0x57,0xB5,0x88,0x75,0xBA,0xE6,0xC2,0x55,0x23,0xF2,0xE9,0x87,0x0A,0x77,0x95,0xD8,0x67,0x6C,0xA2,0x5D,0xC4,0x6B,0x9D,0xB1,0x88,0x72,0x55,0xAF,0x7D,0x86,0x2A,0xC3,0x43,0xA4,0xCE,0x19,0x8A,0x2C,0x57,0xF2,0xD9,0x00,0xE0,0x00,0x22,0xCB,0xCE,0x5A,0x89,0xB8,0x4F,0x4D,0x3A,0x7B,0x92,0xEA,0xB9,0x53,0xE9,0x9C,0x9D,0x91,0xFB,0xD4,0xAC,0x73,0x35,0xCA,0x9E,0xDB,0x13,0xD7,0xDA,0xB8,0x88,0xDF,0x4C,0x1C,0x7F,0x65,0x22,0xB1,0x5B,0x11,0x1E};
//les
const uint8_t spW076505 [] PROGMEM ={0x6D,0xCC,0x09,0xB8,0x32,0x93,0x8E,0x31,0x17,0xB0,0xD6,0x5A,0x7A,0x86,0x9C,0x91,0xCB,0xB3,0xDD,0x98,0x22,0x71,0xB3,0x9E,0x5A,0x6B,0xC9,0xD4,0xCD,0x27,0x2A,0x9D,0xAD,0x2B,0x11,0xAD,0x9C,0x75,0xB6,0xA1,0x55,0xA4,0x7B,0xD6,0xD9,0x87,0x57,0xC6,0x99,0x5A,0x67,0x1F,0x4E,0x89,0x73,0x66,0xAD,0xA3,0x73,0x66,0xEB,0xAD,0x08,0xF0};
//feu
const uint8_t spW056108 [] PROGMEM ={0x83,0x9B,0x61,0xDA,0xC5,0xEA,0x02,0x04,0xA0,0xDB,0xF0,0x00,0xF4,0xD0,0x06,0x70,0x9A,0x24,0xCD,0x3D,0xA3,0xD1,0x5A,0xAC,0x0B,0xF3,0xAE,0x58,0x67,0x75,0xBA,0xC2,0x3B,0x1B,0x9E,0x2D,0xF0,0xC8,0x28,0x6F,0x05,0xF0};


// ------------------------------------------------------
// Cette fonction installe l'état initial
// ------------------------------------------------------
void mettreAuRepos()
{
   (digitalWrite(portLED_rouge,LOW));
   (digitalWrite(portLED_orange1,LOW));
   (digitalWrite(portLED_orange2,LOW));
   (digitalWrite(portLED_vert,LOW));
   (digitalWrite(portRelais_aimant, HIGH));
   (digitalWrite(DIO_Buzzer, LOW));
   etatCourant = REPOS;
}


// La fonction de call back, appellée automatiquement quand on clique

void simpleclick()
{
  switch (etatCourant) {
     case REPOS: // on était au repos et on a un appui, on lance le programme
  (digitalWrite(DIO_Buzzer, HIGH));
  (digitalWrite(portRelais_aimant, HIGH));
  delay(3000);
  //Coller ci-dessous les appels à la procedure Say pour prononcer les mots
   voice.say(spW089587);
   delay(500);
   voice.say(spW010458);
   delay(30);
   voice.say(spW101286);
   delay(30);
   voice.say(spW095753);
   delay(1800);
   voice.say(spW108538);
   voice.say(spW076505);
   voice.say(spW056108);

  
   delay(valeurPotentiometre);
   
   (digitalWrite(portLED_rouge, HIGH));
    tone(DIO_Buzzer, 632, 120);
    delay(120); 
   (digitalWrite(portLED_orange1, HIGH));
    tone(DIO_Buzzer, 632, 120);
    delay(120);
   (digitalWrite(portLED_orange2, HIGH));
    tone(DIO_Buzzer, 632, 120);
    delay(60);
   (digitalWrite(portRelais_aimant, LOW));
    delay(60);
   (digitalWrite(portLED_vert, HIGH));
    tone(DIO_Buzzer, 632, 2250);
    delay(2250);
   (digitalWrite(portLED_rouge,LOW));
   (digitalWrite(portLED_orange1,LOW));
   (digitalWrite(portLED_orange2,LOW));
   (digitalWrite(portLED_vert,LOW));
   (digitalWrite(DIO_Buzzer, LOW));
   (digitalWrite(2, LOW));
   pinMode(pinReset2, OUTPUT);
     etatCourant = ETAT_Marche; // on note le nouvel état de notre système
      break;
      
     case ETAT_Arret: // tout était allumé, on a un appui, on arrete le programme
      mettreAuRepos(); // on retourne à l'état initial
      break;
  }
}  


// On initialise notre système dans le setup
      
void setup() {

  pinMode(portButtonDepart,INPUT);// met la broche le bouton en entrée
  pinMode(portLED_vert,OUTPUT);// met la broche la led en sortie
  pinMode(portLED_orange1,OUTPUT);// met la broche la led en sortie
  pinMode(portLED_orange2,OUTPUT);// met la broche la led en sortie
  pinMode(portLED_rouge,OUTPUT);// met la broche la led en sortie
  pinMode(portRelais_aimant, OUTPUT);// met le relai la led en sortie
  pinMode(pinReset, OUTPUT);
  Serial.begin(9600);
  
  ADCSRA &= ~PS_128;
  ADCSRA |= PS_16;
  //Réglage des paramêtres de restitution vocale
  voice.SetSpeed(810); //entre 0 et 1023 . augmenter la valeur pour augmenter la vitesse. Valeur normal=800
  voice.SetPitch(700); //entre 0 et 1023 : Pitch normal=700. Augmenter pour rendre la voix plus aigue
  voice.SetBending(50);//entre 0 et 1023 : 0=pas de distortion ;   512=ion maximale ;  1023=pas de distortion
  voice.BendingOn();
   //voice.BendingOff(); //Pas de distortion du son
    
  //conditions Initiales
  mettreAuRepos();

  // On attache la fonction simpleClick() comme callBack
  button.attachClick(simpleclick);
}


void loop() {
 
  // On vérifie l'état des boutons, ce qui déclenche l'appel de la fonction callBack si nécessaire
  button.tick();
  
  // ici on peut faire autre chose du moment que ça ne prend pas trop longtemps
  digitalWrite(2, LOW);
  
  valeurPotentiometre = analogRead(portPotentiometre);
  valeurPotentiometre = valeurPotentiometre*2700/1023;
  Serial.println(valeurPotentiometre);
  delay(1);

}

donc tout marche... mais quand je veux r'appuyer sur le bouton pour stop le programme il ce passe rien je pense que cela vient de case ETAT_Arret: qui doit être mal défini ou mal positionner ou peut être pas du tout sa voila.