I'm trying to program a Lidar-based Arduino Leonardo and don't want to get false triggers. My goal is, that the trigger pins should be held up high for more than 3 seconds to be considered as a true trigger, otherwise, see them as a false alarm. I can only think of using the following code, but it seems to only log trigger data one within the if / else loop. Could anyone give me some advice on it, please?
// Traffic Light for 3 Lidar
//Traffic light code
int green=6;
int yellow=9;
int red=10;
int green2=1;
int yellow2=0;
int red2=5;
int Lidar_entry=23;
int Lidar_exit=22;
int Lidar_entry_trigger = 0;
int Lidar_exit_trigger = 0;
int Morning = 21;
int Morning_time = 0;
int switch1 = 8;
int switch2 = 4;
int switch1_time = 0;
int switch2_time = 0;
int state = 0;
void setup() {
Serial.begin(57600);
pinMode(green, OUTPUT);
pinMode(yellow , OUTPUT);
pinMode(red , OUTPUT);
pinMode(green2, OUTPUT);
pinMode(yellow2 , OUTPUT);
pinMode(red2 , OUTPUT);
pinMode(Lidar_entry , INPUT);
pinMode(Lidar_exit , INPUT);
pinMode(Morning, INPUT);
pinMode(switch1, INPUT);
pinMode(switch2, INPUT);
}
void loop() {
Lidar_exit_trigger = digitalRead(Lidar_exit);
Lidar_entry_trigger = digitalRead(Lidar_entry);
Morning_time = digitalRead(Morning);
switch1_time = digitalRead(switch1);
switch2_time = digitalRead(switch2);
Serial.print("Morning_time=");
Serial.println(Morning_time);
Serial.print("switch1_time=");
Serial.println(switch1_time);
Serial.print("switch2_time=");
Serial.println(switch2_time);
if (Lidar_exit_trigger){
delay(3000);
if (Lidar_exit_trigger){
Serial.println("Car here");
lidar_exit_trigger();
}
else{
Serial.println("Pedestrain");
}
}
else if(Lidar_entry_trigger){
delay(3000);
if (Lidar_entry_trigger){
Serial.println("Car here");
lidar_all_entry_trigger();
}
else{
Serial.println("Pedestrain");
}
}
else{
lidar_no_trigger();
}
}