Bonjour à tous,
En ce temps de confinement, j'espère trouver une âme charitable pour résoudre mon problème.
Jeune encore dans la programmation, cela fait plusieurs jours que je bloque sur mon code...
Mon projet final est un détecteur de présence. Je compte dans un second temps récupérer les données via un émetteur récepteur 433.
Les données que je veux récupérer sont le nombre de détections ainsi que les durées de présences.
Le code ci-dessous de cette première étape est casi fonctionnel...
La gestion de la temporisation , led et compteur fonctionne parfaitement.
Quant à la durée que je recherche...
A ce stade et lors de chaque déclenchement du compteur, celui-ci calcul la durée du capteur actif + la totalité du temps inactif précédent le dernier état actif.
Il ne reste donc plus qu'à arriver à déduire ce temps d'inactivité pour connaitre cette fameuse durée !!!
Ne Pourrait-on pas dés que le processus est à l'état LOW arriver à déclencher un autre compteur pour connaitre la durée d'inactivité et ainsi et la déduire de mon résultat de l'heure actuelle ?
Ça parait si simple !!!
j'ai beau me creuser la tête mais là, ça commence à fumer sérieusement...!
Ci-joint, le programme.
Merci de m'aiguiller et de me corriger !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 int capteur = 8; // Input for HC-S501 bool etatCapteur = 1; // Place to store Valeur du capteur int dernierEtatCapteur = 0; int compteur = 0 ; unsigned long dureeAllumage = 0; unsigned long deb = 0; int tempoActive = 0; // État d'activation de la tempo unsigned long tempoDepart = 0; // Temps à l'activation de la tempo void setup() { pinMode(4, OUTPUT); // 4 (Gestion de la LED sur carte) Serial.begin(9600); deb = millis(); } void loop() { etatCapteur = digitalRead(capteur); digitalWrite(pinMode, etatCapteur); if (( etatCapteur == HIGH) && (dernierEtatCapteur == LOW)) { tempoActive = 1; // Alors on active la temporisation tempoDepart = millis(); digitalWrite(4, HIGH); // 4 (Gestion de la LED sur carte) } if ( tempoActive ) { // Si la temporisation est active, if ( ( millis() - tempoDepart ) >= 3000 ) { // Temps écoulé sans détection autorisé tempoActive = 0; // Et on désactive la temporisation pour ne pas afficher ce message une seconde fois digitalWrite(4, LOW); // 4 (Gestion de la LED sur carte) dureeAllumage = (millis() - deb); deb = millis(); { compteur++; Serial.println(compteur); Serial.print(dureeAllumage / 1000); Serial.println (" secondes"); } dernierEtatCapteur = etatCapteur; } } }
Partager