Je fabrique un détecteur de fumée. Lorsqu'il détecte de la fumée, iz doit alerter avec un buzzer. Est-il possible que je puisse le faire bourdonner pour toujours jusqu'à une interruption externe telle qu'une broche de redémarrage? Ou pourrais-je simplement supprimer la synchronisation de la fonction tone (). Voici le code que j'utilise.

int sensorValue;

int digitalValue;
int green = 8;
int red = 7;

void setup(){

  Serial.begin(9600);

  pinMode( 0, INPUT);
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);


}

void start(){
    digitalWrite(green, HIGH);
}

void loop() {

sensorValue = analogRead(0);       
digitalValue = digitalRead(0); 

Serial.println(sensorValue,DEC);  
Serial.println(digitalValue,DEC);

delay(2000);                    
  if(analogRead(0) < 100){
    tone(9,200,1000);
    digitalWrite(red,HIGH);
  }
 }
1
M.E. Team 23 mai 2018 à 09:37

3 réponses

Meilleure réponse

Jouer un son "pour toujours" est simple:

if(analogRead(A0) < 100 ) {
  tone(9,2000); // once triggered, will play the sound forever
}

Pour l'éteindre, vous semblez aimer le bouton RESET. Il n'est donc pas nécessaire d'appeler

noTone(9);

BTW: qu'en est-il de la lecture de la référence?

1
datafiddler 23 mai 2018 à 10:44

Si vous êtes vraiment déterminé à utiliser les interruptions vous n'avez pas spécifié la carte avec laquelle vous travaillez mais pour uno les 2 3 broches peuvent être attachées en tant qu'interruptions et simplement déclencher une fonction qui désactive la tonalité Regarde ça: attachinterrupt

0
m gold 19 juin 2018 à 18:46

Il existe de nombreuses façons:

Changez votre logique qui active le buzzer.

while (analogRead(0) < 100){
  tone(9,200,1000);
}

Utilisez simplement une boucle infinie:

while (1) {
  tone(9,200,1000);
}

Réinitialisez l'Arduino pour sortir de la boucle infinie.

Une variante serait de remplacer (1) par le code qui vérifie une broche pour sortir de la boucle ou lit le capteur.

0
Gerhard 23 mai 2018 à 09:10