Interrupteur pour faire une pause

Bonjour,

J'aimerais dans un programme arduino pouvoir faire une pause dans l'execution de ma loop().

J'ai des boutons type ON/OFF : Bouton poussoir chrome avec anneau LED blanc - 16mm - Boutique Semageek

J'aimerais savoir si quelqu'un avait deja fais ce type de programme.

Merci

Bonjour,

kooxy:
J'aimerais savoir si quelqu'un avait deja fais ce type de programme.

oui

Question subsidiaire: comment faire?
Ca dépend de ce que tu veux faire. Par exemple:

void loop() {
  // on ne fait pas le traitement si poussoir est appuyé
  if (digitalRead(poussoir)!=LOW)
  {
    // traitement
    // ...
    // ...
  }
}

Oui ou tu peut aussi gérer ça par des interruption car si tu le fais avec un if, pendant que tu fais un traitement, si tu appuie, il finira de traiter et lorsqu'il rebouclera il détectera l'appuie, alors qu'avec une interruption qui détecte l'appuie, quand tu va appuyer il va le détecter et exécuter interruption avant de reprendre le programme, et dans ce cas la, tu met dans ton interruption, un "programme" qui fais une pause en fonction de ce que tu veux (un temps d'arrêt donné avec un delay, une détection d’appuis pour que dès que tu arrête ça reprenne, etc)

alex34000:
Oui ou tu peut aussi gérer ça par des interruption car si tu le fais avec un if, pendant que tu fais un traitement, si tu appuie, il finira de traiter et lorsqu'il rebouclera il détectera l'appuie, alors qu'avec une interruption qui détecte l'appuie, quand tu va appuyer il va le détecter et exécuter interruption avant de reprendre le programme, et dans ce cas la, tu met dans ton interruption, un "programme" qui fais une pause en fonction de ce que tu veux (un temps d'arrêt donné avec un delay, une détection d’appuis pour que dès que tu arrête ça reprenne, etc)

Tu parles de cette fonction ?? attachInterrupt(numéro, ISR, mode);

Ton Idée est pas mal Kamill.

J'avais fais ce genre de chose perso :

// bouton pause 
  BPstate = digitalRead(BP);
  while(BPstate == HIGH)
  {
    BPstate = digitalRead(BP);
  }

et je copie colle ce bout de programme apres chaque étape de ma boucle mais ça ne marche pluus :frowning:

Pourquoi ça ne marche plus? Si tu nous donnais plus d'infos sur ce que tu fais.

Voici mon code :

// Programme avec bouton pause et bouton start/stop
  
  
  int BP = 12;
  int BP2 = 11;
  int BPstate;
  int BP2state;
    #include <SPI.h>
   void setup() {

    Serial.begin(9600);// démarage de la liaison série
    while (!Serial); 
    pinMode(BP, INPUT);
    pinMode(BP2, INPUT);
    

}
void loop() {

// bouton Start/Stop
    BP2state = digitalRead(BP2);
    if(BP2state == HIGH)
    {
    

  

Serial.println("a");
  delay(100);


// bouton pause 
  BPstate = digitalRead(BP);
  while(BPstate == HIGH)
  {
    BPstate = digitalRead(BP);
  }


  


Serial.println("b");
  delay(100);
  BPstate = digitalRead(BP);
  while(BPstate == HIGH)
  {
    BPstate = digitalRead(BP);
  }
  


Serial.println("c");
  delay(100);
// bouton pause
  BPstate = digitalRead(BP);
  while(BPstate == HIGH)
  {
    BPstate = digitalRead(BP);
  }
 


 Serial.println("d");
  delay(100);
// bouton pause
  BPstate = digitalRead(BP);
  while(BPstate == HIGH)
  {
    BPstate = digitalRead(BP);
  }
  
  }

}

Si tu veux t'arrêter par exemple entre la phase "a" et la phase "b", c'est difficile car il faut que tu ais le reflex de relacher le bouton puis d'appuyer à nouveau en moins de 100mS.
Autrement ça doit fonctionner, ça s'arrête après le phase courante.

Ah je comprends mieux !

Moi ce qu'il me faudrais c'est avec un interrupteur et non un bouton.

Je n'ai toujours pas compris ce que tu veux faire exactement. Tu veux t'arrêter quand tu appuies sur le bouton et reprendre quand tu appuies à nouveau ?

Oui exactement. C'est un boutton qui garde sa position. un appuie il reste en bas un second appuie, il remonte

et au niveau du branchement je peux choisir si il est en normalement ouvert ou normalement fermé.

je remet le lien : Bouton poussoir chrome avec anneau LED bleu - 16mm - Boutique Semageek

les 3 broches qui ne sont pas brachées sur la photo sont : un commun / une broche NO / une broche NC

kooxy:
Oui exactement. C'est un boutton qui garde sa position. un appuie il reste en bas un second appuie, il remonte

Il est dit exactement l'inverse dans la description

Ce bouton est un bouton poussoir momentané, lorsque vous appuyez dessus le contact est effectué entre "normalement ouvert" et le commun. Lorsque vous relâchez, les contacts s'ouvre à nouveau.

Oups, Je me suis tromper de bouton. Ils ont la même photo. celui que j'ai est celui la : Bouton ON-OFF chrome avec anneau LED blanc - 16mm - Boutique Semageek

Ce bouton est un bouton poussoir maintenu, lorsque vous appuyez dessus le contact est effectué entre "normalement ouvert" et le commun. Lorsque vous rappuierez desus, les contacts s'ouvriront à nouveau.

Donc ton programme devrait fonctionner. Mais il faut peut être traiter les rebonds. Pour ça le plus simple est de mettre un delay de 10mS dans la boucle d'attente d'ouverture.

ça bug dans tous les sens mais sa ne viens pas du programmes c'est mes broches qui sont "libres", il faudrait que je mettent des résistances de pull-UP.

Mais le programme marche Merci.