RE :Problème de Temporisation entre 2 action

RE :Problème de Temporisation entre 2 action

Message non lude Naissim » Ven 22 Mar 2013 11:30

Bonjour à tous , il y a une semaine j'ai posté ceci:
Bonjour , Je débute dans la programmation avec Arduino et je suis bloqué dans une partie de mon projet. J'utilise une Arduino uno , un capteur de distance sharp IR et un buzzer. J'aimerais savoir si c'est possible de créer une temporisation du capteur de distance IR . Voila mon exemple: mon chat attend devant la porte du jardin , je veut que le buzzer se déclenche seulement si le chat à été détecté par le capteur de distance IR durant un temps de 20 seconde.
Bemolu m'a donné les codes afin que la tempo fonctionne.Et mon code marcher trés bien .
Seulement maintenant j'ai rajouté 1 servomoteur à rotation continu,et c'est là que les problème de tempo recommence...
Je vous explique mon chat sort dehors le capteur Ir le détecte dans un laps de temps de moin de 4 seconde afin de faire tourner le servo
à 90 degré vers la droite. Quand le chat veut rentrer à la maison le capteur Ir le détecte au moins 20 seconde pour que le buzzer nous avertissent qu'il veut rentrer ainsi le servo tourne à 90 degré vers la gauche pour qu'il rentre . Le problème est que lorsque le chat attend 20 seconde, le programme exécute l'action qui consiste à le décteter moins de 4 Seconde, ainsi le servo tourne dans le mauvais sens .
Voici mon code:
// on utilise un capteur infrarouge
// Sharp

#include <Servo.h>
Servo servoOne; // Define our Servo

int IRPin = 0; // le capteur est connecté à la pin a0 et
// au 5 v et à la masse

int IRmesure; // la valeur lue de 0 à 1023

int pin_son = 11; // le buzzer est relié à la pin 11

int LA= 55; // la note jouée par le buzzer


int nblect=3; // nb de lectures faites, on va faire une moyenne
int moyenne=0;

int seuil = 250 ; // si la valeur analogique lue est supérieure à 250
// on déclenchera le buzzer
unsigned long TopCompteur;
int ChatIci;
int led = 13;
void setup(void) {servoOne.attach(10); // servo on digital pin 10
pinMode(led, OUTPUT);
Serial.begin(19200);
ChatIci = 0;
}

void loop(void) {
int i;
moyenne=0; // on va faire la moyenne de plusieurs mesures
for (i=0 ; i < nblect ; i++) {
moyenne = moyenne + analogRead(IRPin);
// le capteur ne peut pas mesurer plus vite
// il faut attendre entre deux mesures
delay(40);
}

IRmesure = moyenne / nblect;

Serial.print("Mesure = ");
Serial.println(IRmesure);

if (IRmesure > seuil) { // chat proche

// Dans le cas où on vient de le détecter, on initialise le compteur
if (ChatIci == 0) { TopCompteur = millis(); ChatIci = 1;};

} else { ChatIci = 0; sonnette_off; } // Le chat n'est plus là
;
if ((ChatIci==1)&(millis()-TopCompteur)<4000){ digitalWrite(led, HIGH);
delay(4000);
servoOne.write(100); // tourne le servo à 90 degré
delay(1000); // Wait 1 second
servoOne.write(90); // Le Servo s'arrete
delay(1000);} // Wait 1 second}
// Là , ça fait moins de 4 seconde qu'il est détecter
if ((ChatIci==1) & (millis()-TopCompteur) > 20000) { // Là, ça fait 20 secondes qu'il est là
sonnette_on() ;
delay(5000);
servoOne.write(85); //
delay(1000); //
servoOne.write(90); // Le servo s'arrete
delay(1000); // Wait 1 second
digitalWrite(led, LOW);
sonnette_off();
delay(2000);


} }// loop


// fonctions /////////////////////////////////////////////

void sonnette_on () {

tone (pin_son,LA);
}

void sonnette_off () {

noTone (pin_son);
}

ça serait super sympa d'avoir un coup de pouce afin de finaliser mon projet :P
Naissim
 
Messages: 5
Inscription: Ven 15 Mar 2013 10:06

Retourner vers Logiciel Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron