faire un pause pour un programme sur arduino uno

bonsoir tous le monde

je veux contrôler un petit bras robotisé avec deux servomoteurs, y aura un capteur pour les pièces,

alors si le capteur capte une pièce le bras doit bougé pour la prendre

je veux lui introduire un bouton d’arrêt d'urgence ça veut dire que si les servomoteurs sont en marche et

j'appui sur le bouton d’arrêt d'urgence les servomoteurs devront s'arretés et si je relâche le bouton les

servomoteurs devront continués leurs course.

voici le programme:

#include <Servo.h>
const int broche_servo1=11; //declaration constante de broche 
const int broche_servo2=10; //declaration constante de broche
const int piece=8;
const int arretdurgence=12;

Servo mon_servo1;  // crée un objet servo pour contrôler le servomoteur
Servo mon_servo2;  // crée un objet servo pour contrôler le servomoteur


void setup() {

mon_servo1.attach(broche_servo1);//   attache l'objet servo à la broche de commande du servomoteur
mon_servo2.attach(broche_servo2);//   attache l'objet servo à la broche de commande du servomoteur

pinMode(broche_servo1, OUTPUT); //met la broche en sortie
pinMode(broche_servo2, OUTPUT); //met la broche en sortie

pinMode(piece, INPUT);              //met la broche en entréé
pinMode(arretdurgence, INPUT);  //met la broche en entréé

}

void loop()

{


mon_servo1.write(90);  //initialisation du servomoteur1 a 90

 mon_servo2.write(90); //initialisation du servomoteur2 a 90



 if(digitalRead(piece)==LOW) 
{
  
    if(digitalRead(arretdurgence)==LOW) 
{  
delay(10000);
 
} 

  mon_servo1.write(135);

  mon_servo2.write(135);
  
  
  delay(1000);
  

  mon_servo1.write(45);

  mon_servo2.write(45);
  
  
  delay(1000);




}

}

je crois que cette condition est fausse if(digitalRead(arretdurgence)==LOW) { delay(10000);}

merci.

bonjour,
utilise les interruptions dans ce cas

Un arrêt d'urgence comme son nom l'indique est un organe de sécurité.
Il ne doit en aucun cas reposer sur une quelconque problèmatique logicielle.
Si c'est vraiment un arrêt d'urgence que tu veux faire place un interupteur sur l'alimentation des servos.
Sinon, appelle ça un bouton de pause si c'est juste pour interrompre un processus et le reprendre. Et effectivement une interruption fera parfaitement l'affaire puisque normalement les interruptions sont prioritaires sur le déroulement du logiciel (tant qu'une erreur de programmation ne les masque pas)

je crois que cette condition est fausse if(digitalRead(arretdurgence)==LOW) { delay(10000);}

à moins que ce soit digitalRead(arretdurgence) qui ne fasse pas son boulot. Il faudrait un petit Serial.println(digitalRead(arretdurgence)) dans la loop pour voir si le bouton marche.

merci pour vos réponses mais je ne sais pas comment faire ces interruptions

un coup de main sera le bienvenu

merci

une petite recherche de ta part serait bien :wink:
http://www.lambot.info/interruptions-multiples-sur-arduino/