Go Down

Topic: Activation/désactivation d'une alarme en appuyant sur un bouton (Read 1 time) previous topic - next topic

kamill

Ca ne m'étonne pas que ça ne fonctionne pas!!! Tu as remis le delay(10000) ou il ne faut pas.
Essaies le programme que je t'ai mis au post #13

leg2027

Oui mais du coup le buzzer ne marche que quand quelqu'un est devant l'ultrason. Si la personne reste et qu'on appuie sur le bouton ça marche mais le problème c'est que je veux que le buzzer s'allume 10 sec même si une personne passe devant le capteur d'ultrason 1 sec. C'est pour ça que je veux utiliser la fonction millis mais je ne sais pas l'utiliser.

kamill

Et a quoi sert le bouton? A raccourcir le temps de fonctionnement du buzzer?
Qu'est ce qui se passe lorsque quelqu'un reste devant le capteur? ça sonne pendant 10s ou jusqu'à la personne sorte (plus 10s)
Si c'est le cas, tu peux faire comme ça:
Code: [Select]
#define trigPin 2
#define echoPin 3
// Define variables:
long duration;
int distance;

int bouton = 0;
void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(13,OUTPUT);
  pinMode(4,INPUT_PULLUP);
}
void loop() {
  static unsigned long debutActionBuzzer=0;
 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  duration = pulseIn(echoPin, HIGH);
  // Calculate the distance:
  distance= duration*0.034/2;
  Serial.print("Distance = ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(50);
  if (distance < 20) {       //je mettrai à 400 cm mais là j'ai simplifié
    debutActionBuzzer=millis();
    digitalWrite(13, HIGH);//ceci doit mettre en marche un buzzer
  }

  bouton = digitalRead(4);
  Serial.print("Bouton: "); Serial.println(bouton);
  if (bouton == LOW) {
    digitalWrite(13, LOW);
    debutActionBuzzer=0;
    delay(10000); //j'aurais aimé que ceci suspende l'alarme pendant dix secondes
  }

  if (debutActionBuzzer!=0 && millis()-debutActionBuzzer>=10000)
  {
    digitalWrite(13, LOW);
    debutActionBuzzer=0;
  }
}

leg2027

Merci pour le code. Je pars en vacances demain, merci.
Pourrait t'on le faire avec la tonalité alarme.
:

Code: [Select]
for (uint8_t i=0; i<300; i++) { //le 300 c'est 300 fois le "tiui"
    for(int x=0;x<180;x++){

    sinVal=(sin(x*(3.1412/180)));                     //tout ça c'est le bruit de la sirène
    toneVal=2000+(int(sinVal*1000));
    tone(13,toneVal);
    delay(2);
  }


il ne faut pas oublier de déclarer:

Code: [Select]

float sinVal;
int toneVal;
 

Go Up