Bonjour à tous,
Je suis en train de réaliser un projet d'allumage de leds dans mes escaliers avec un sens d'allumage (bas vers haut ou haut vers bas) et qui permet également de compter le nombre de personnes qui se trouve dans l'escalier (pour le pas éteindre si une personne serai encore présente)
ca fonctionne... sauf que
... si l'on reste devant le capteur immobile le compteur de personne augmente (J'ai des animaux et difficile de leur expliquer de ne pas faire ça :D)
Voici le code si quelqu'un à une solution ou remarque ou encore simplification, cela m'arrangerai.
ps: je n'ai pas mis toute la partie d'allumage de la led.
#include "Adafruit_VL53L0X.h"
// address we will assign for all 4 sensor
#define LOX1_ADDRESS 0x30
#define LOX2_ADDRESS 0x31
#define LOX3_ADDRESS 0x32
#define LOX4_ADDRESS 0x33
int sensor1,sensor2, sensor3,sensor4;
// set the pins to shutdown for all 4 sensors
#define SHT_LOX1 6
#define SHT_LOX2 7
#define SHT_LOX3 8
#define SHT_LOX4 9
// objects for the vl53l0x
Adafruit_VL53L0X lox1 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox2 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox3 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox4 = Adafruit_VL53L0X();
// this holds the measurement
VL53L0X_RangingMeasurementData_t measure1;
VL53L0X_RangingMeasurementData_t measure2;
VL53L0X_RangingMeasurementData_t measure3;
VL53L0X_RangingMeasurementData_t measure4;
int old_dist_1 = 0;
int old_dist_2 = 0;
int old_dist_3 = 0;
int old_dist_4 = 0;
int temp_bottom = 0;
int temp_top = 0;
int nbr_p = 0;
int id = 0;
int itsOn = 0;
int itsOnTimer = 30000;
int turnOffLeds = 0;
unsigned long time_passed_bottom;
unsigned long time_passed_top;
unsigned long time_passed_on;
void setID() {
// all reset
digitalWrite(SHT_LOX1, LOW);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
delay(10);
// all unreset
digitalWrite(SHT_LOX1, HIGH);
digitalWrite(SHT_LOX2, HIGH);
digitalWrite(SHT_LOX3, HIGH);
digitalWrite(SHT_LOX4, HIGH);
delay(10);
///************************* sensor 1 activation
// activating LOX1 and reseting LOX2
digitalWrite(SHT_LOX1, HIGH);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
// initing LOX1
if(!lox1.begin(LOX1_ADDRESS)) {
Serial.println(F("Failed to boot first VL53L0X"));
while(1);
}
delay(10);
///************************* sensor 2 activation
// activating LOX2
digitalWrite(SHT_LOX2, HIGH);
delay(10);
//initing LOX2
if(!lox2.begin(LOX2_ADDRESS)) {
Serial.println(F("Failed to boot second VL53L0X"));
while(1);
}
///************************* sensor3 activation
// activating LOX3
digitalWrite(SHT_LOX3, HIGH);
delay(10);
//initing LOX3
if(!lox3.begin(LOX3_ADDRESS)) {
Serial.println(F("Failed to boot second VL53L0X"));
while(1);
}
///************************* sensor4 activation
// activating LOX4
digitalWrite(SHT_LOX4, HIGH);
delay(10);
//initing LOX4
if(!lox4.begin(LOX4_ADDRESS)) {
Serial.println(F("Failed to boot second VL53L0X"));
while(1);
}
}
void read_quad_sensors() {
lox1.rangingTest(&measure1, false); // pass in 'true' to get debug data printout!
lox2.rangingTest(&measure2, false); // pass in 'true' to get debug data printout!
lox3.rangingTest(&measure3, false); // pass in 'true' to get debug data printout!
lox4.rangingTest(&measure4, false); // pass in 'true' to get debug data printout!
if(round(measure1.RangeMilliMeter/10) < old_dist_1){
id = 1;
check_sens();
}
if(round(measure2.RangeMilliMeter/10) < old_dist_2){
id = 2;
check_sens();
}
if(round(measure3.RangeMilliMeter/10) < old_dist_3){
id = 3;
check_sens();
}
if(round(measure4.RangeMilliMeter/10) < old_dist_4){
id = 4;
check_sens();
}
old_dist_1 = round(measure1.RangeMilliMeter/10);
old_dist_2 = round(measure2.RangeMilliMeter/10);
old_dist_3 = round(measure3.RangeMilliMeter/10);
old_dist_4 = round(measure4.RangeMilliMeter/10);
}
void setup() {
///Robojax.com code see video https://youtu.be/0glBk917HPg
Serial.begin(115200);
// wait until serial port opens for native USB devices
while (! Serial) { delay(1); }
pinMode(SHT_LOX1, OUTPUT);
pinMode(SHT_LOX2, OUTPUT);
pinMode(SHT_LOX3, OUTPUT);
pinMode(SHT_LOX4, OUTPUT);
Serial.println("Shutdown pins inited...");
digitalWrite(SHT_LOX1, LOW);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
Serial.println("All four in reset mode...(pins are low)");
Serial.println("Starting...");
setID();
}
void check_sens() {
if(temp_bottom == 0){
if(id == 1 ){
temp_bottom = id;
}else if(id == 2 ){
temp_bottom = id;
};
time_passed_bottom = millis();
}else if(temp_bottom == 1){
if(id == 2 ){
if(nbr_p == 0){
itsOn = 1;
time_passed_on = millis();
//bas_haut(strip.Color(255, 200, 40)); // Allumer la led de Bas vers le haut
}
nbr_p++;
};
}else if(temp_bottom == 2){
if(id == 1 ){
if(nbr_p == 1){
itsOn = 0;
//haut_bas(strip.Color(0, 0, 0)); // Eteindre de Haut vers le bas
}
nbr_p--;
if(nbr_p < 0){
nbr_p = 0;
}
};
}
// detecteur haut
if(temp_top == 0){
if(id == 3 ){
temp_top = id;
}else if(id == 4 ){
temp_top = id;
};
time_passed_top = millis();
}else if(temp_top == 4){
if(id == 3 ){
if(nbr_p == 0){
itsOn = 1;
time_passed_on = millis();
//haut_bas(strip.Color(255, 200, 40));// Allumer la led de Haut vers le bas
}
nbr_p++;
};
}else if(temp_top == 3){
if(id == 4 ){
if(nbr_p == 1){
itsOn = 0;
//bas_haut(strip.Color(0, 0, 0)); // Eteindre la led de Bas vers le haut
}
nbr_p--;
if(nbr_p < 0){
nbr_p = 0;
}
};
}
Serial.println(nbr_p);
}
void loop() {
read_quad_sensors();
if(millis()-time_passed_bottom > 1000) {
time_passed_bottom = millis();
temp_bottom = 0;
}
if(millis()-time_passed_top > 1000) {
time_passed_top = millis();
temp_top = 0;
}
//reset if timer off
if(itsOn == 1 && (millis()-time_passed_on > itsOnTimer)){
//timer_off(strip.Color(0, 0, 0)); Eteindre la led
itsOn = 0;
nbr_p = 0;
}
}
Merci de votre aide...
