Go Down

Topic: Bip Bip en temps masqué (Read 479 times) previous topic - next topic

Rigolo

Bonjour,
Je souhaite faire sonner une alarme (un petit buzzer) pendant la durée de tout le programme afin d'avertir l'utilisateur lorsque un danger se présente (1 seconde éteint, 0,5 bip) . Comment le faire sans bloquer le déroulement de l'ensemble du programme 1,5 sec?

actuellement j'en suis là:


unsigned long MesureTemps = millis();
unsigned long EcartTemps = 0;
byte Bip = 13;

void setup() {
 pinMode (Bip,OUTPUT);
}
void loop() {
 EcartTemps = millis() - MesureTemps;
 if(EcartTemps > 1000){
   bip();
   MesureTemps = millis();
}
}
void bip () {
 digitalWrite (Bip,HIGH);
 delay (500);
 digitalWrite (Bip,LOW);
}


B83s

pour ne pas bloquer le programme ... il faut oublier les delay(), tu l'as déjà fait pour la mise en marche, tu peux aussi le faire pour l'arret du "bip"

par exemple tu peux faire dans le loop

if (millis() > nextOn) {
   nextOn = millis() + 1500; //allumage toutes les 1500 ms
   digitalWrite (Bip,HIGH);
   nextOff = nextOn + 500; //prochain off : 500 ms après l'allumage
}
if (millis() > nextOff) digitalWrite (Bip,LOW);

si tu as des "choses" consommatrices en temps dans ton programme .. le bip risque de n'être pas très régulier


 

Rigolo

Merci, ca fonctionne. Ca parait simple une fois réalisé.
...
unsigned long TempsBip = millis ();
unsigned long NextOn = TempsBip + 1500;
unsigned long NextOff = NextOn + 500;
...
TempsBip = millis();
  if (TempsBip > NextOn) {
    digitalWrite (Bip,HIGH);
    NextOn = TempsBip + 1500;
  }
  if (TempsBip > NextOff){
    digitalWrite (Bip,LOW);
    NextOff = NextOn + 500;
  }

Go Up