Bonjour je suis un débutant en arduino, j'ai un projet qui est de faire une sirène de pompier.
Mon problème est que je voudrait me servir d'un bouton poussoir comme un bouton on/off : j'arrive bien as déclencher la sirène mais je n'arrive pas a l’éteindre j'ai tous essayé mais je n'y arrive toujours pas
ta variable switchstate est rafraichie au début de loop().
Quand tu entres dans la boucle do ... while tu ne la rafraichit plus.
Donc le test while (switchstate ==1) se fait toujours avec la même valeur de switchstate
IL faut refaire une lecture de switchstate dans ta boucle do... while
Bonjour j'ai totalement changé le code mais j'ai toujours un problème lorsque j appuie sur le bouton poussoir la sirène se lance bien mais lorsque j appuie pour l arrêté je suis obligé d appuyé plusieurs fois sur le bouton poussoir pour que sa fonctionne ( je crois que le problème vient des delay mais je vois pas comment régler le problème sans casser la sirène )
int state = 0;
int old = 0;
int btnQ = 0;
int initiale = 0;
#define LA 440
#define SI 494
void setup()
{
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, INPUT);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
noTone(6);
}
void loop()
{
btnQ = digitalRead(2);
if(btnQ == 1){
delay(50);
btnQ = digitalRead(2);
if(btnQ == 0){
state = old + 1;
}
}
else{
delay(100);
}
switch (state) {
case 1:
digitalWrite(4, HIGH);
tone(6, LA, 7000);
delay(500);
digitalWrite(4, LOW);
noTone(6);
delay(10);
digitalWrite(5, HIGH);
tone(6,SI, 7000);
delay(500);
digitalWrite(5, LOW);
delay(10);
old = state;
break;
default:
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
noTone(6);
old = 0;
break;
}
}
Par contre comme tu utilises des delay(), pour arrêter la sirène il faudra rester appuyer au maximum une seconde le temps que les delay() se terminent.
Il faudrait revoir l'architecture de ton programme pour ne pas utiliser de delay().