Go Down

Topic: compte a rebourg ne fonctionne pas avant d'enclencher une alarme (Read 124 times) previous topic - next topic

didiersee

Bonjour mon compte a rebours ne fonctionne pas avant d'enclencher une alarme.
C'est une simple alarme avec 4 capteurs PIR et un contact avec une tempo de 15 sec avec delay() avant l'enclenchement et 15 sec de retard avec millis avant d'enclencher relais et sirène.

Le code qui pose problème se trouve à la ligne 248
le fichier code est attaché.
Merci pour votre aide.

lesept

Tu testes le temps écoulé à la ligne 262, mais tu lances le chrono dans le setup, donc au lancement du programme. Or je pense que ce que tu veux faire c'est chronométrer 15 secondes à partir du moment où un capteur détecte un mouvement. J'imagine que les 15 secondes servent à laisser le temps de taper le pass sur le clavier. Donc, tu dois mettre la ligne 116 (tempoDepart = millis();) autre part.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

didiersee

Merci oui c'est un timer pour laisser le temps de taper le code avant que l'alarme ne se déclenche.
Effectivement tout le problème est la bien sûr, j'ai essayé de lancer le chrono dans le void temporisation() mais là le programme bloque et l'alarme ne se déclenche pas?
Où puis-je le placer à votre avis?
Merci pour votre aide.

lesept

C'est un peu plus compliqué que ce que tu penses. Tu dois en effet initialiser le chrono dans le void temporisation, mais tu dois mettre une boucle while qui attend qu'on entre le code pendant ces 15 secondes.
Un truc du genre (en pseudocode) :

Code: [Select]
void temporisation () {
initialiser le chrono
afficher "Entrez le code SVP"
tant que le temps écoulé est inférieur à 15 secondes {
  lire le clavier
  si le code est bon return
  }
}
lancer l'alarme


A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

didiersee

Oui merci je suis bien d'accord avec vous mais avant de suivre votre procédure de code il faudrait au moins voir le message "la tempo de 15 sec est passee" voici mon code pour le void temporisation() et malheureusement ce n'est pas le cas, le programme bloque je n'ai ni le message ni l'alarme, mon code est ci-dessous. Merci pour votre aide :o

Code: [Select]
void temporisation(){ //tempo si détecteur capte un voleur
//tone(buzzer, 1000, 1000); // buzzer configure en bip à une fréquence de 1kHZ pendant 0,5sec toutes les sec
 //ici on active la tempo avec millis et la tempo démarre à zero
        tempoActive = 1;
        tempoDepart = millis();
 // Si la temporisation est active,
    if ( tempoActive ) {
   
         
        // Et si il s'est écoulé 3 secondes,
        if ( ( millis() - tempoDepart ) >= 15000 ) {
             
            // Alors on affiche un petit message
           [color=red] Serial.println("la tempo de 15 sec est passee");[/color]
           
           
            alarmTriggered();
             
            // Et on désactive la temporisation pour ne pas afficher ce message une seconde fois
            tempoActive = 0;
           //noTone(13);
           
        }
    }

lesept

Tel que c'est codé, tu ne peux pas voir le message. Tu initialises tempodepart et immédiatement après tu compares avec 15 secondes, donc la condition ne sera jamais remplie.

Avec ça tu verras le message :

Code: [Select]
void temporisation(){ //tempo si détecteur capte un voleur
//tone(buzzer, 1000, 1000); // buzzer configure en bip à une fréquence de 1kHZ pendant 0,5sec toutes les sec
 //ici on active la tempo avec millis et la tempo démarre à zero
        tempoActive = 1;
        tempoDepart = millis();
 // Si la temporisation est active,
    if ( tempoActive ) {
   
         
        // Et si il s'est écoulé 3 secondes,
        while( millis() - tempoDepart >= 15000 ) {

           // lecture clavier
           // si pass OK : return;
         }
             
            // si pas de pass au bout de 15 secondes, alors on affiche un petit message

           Serial.println("la tempo de 15 sec est passee");       
           alarmTriggered();
             
            // Et on désactive la temporisation pour ne pas afficher ce message une seconde fois
            tempoActive = 0;
           //noTone(13);
           
   
    }
}
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

didiersee

Bien vu merci pour votre aide à force de regarder mes erreurs passées je suis passé à côté de celle là.
Encore merci problème résolu grâce à vous.

Go Up