// First sensor
int led1Pin = 13; // choose the pin for the LED
int pirSensor1 = 5; // choose the input pin (for PIR sensor)
int pirState1 = LOW; // we start, assuming no motion detected
int val1 = 0; // variable for reading the pin status
// Second Sensor
int led2Pin = 12; // choose the pin for the LED
int pirSensor2 = 9; // choose the input pin (for PIR sensor)
int pirState2 = LOW; // we start, assuming no motion detected
int val2 = 0; // variable for reading the pin status
int led3Pin = 8; // choose the pin for the LED
int loopStatus = 0;
unsigned long pir_time1 = 0;
unsigned long pir_time2 = 0;
unsigned long timeCalculation = 0;
unsigned long everyLoopTime = 0;
int pirSensorActiv = 0;
unsigned long timeBetweenSensors = 0;
int sensorState = 0;
// settings
unsigned long settings_sensorSkipTime = 3000;
unsigned long settings_mainLedDelay = 3000;
unsigned long settings_minimumDelay = 50;
volatile int start =0;
volatile int revs = 0;
void setup() {
pinMode(led1Pin, OUTPUT); // declare LED as output
pinMode(led2Pin, OUTPUT); // declare LED as output
pinMode(led3Pin, OUTPUT); // declare LED as output
pinMode(pirSensor1, INPUT); // declare sensor as input
pinMode(pirSensor2, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
everyLoopTime = millis();
// Checking first sensors state
timeCalculation = everyLoopTime - pir_time1;
// if time difference is greater than skip time, than turn on LED and count time
if(timeCalculation > settings_sensorSkipTime){
sensorState = digitalRead(pirSensor1);
if(sensorState == HIGH){
digitalWrite(led1Pin, HIGH);
pir_time1 = millis();
pirSensorActiv = pirSensorActiv + 1;
}else{
digitalWrite(led1Pin, LOW);
pirSensorActiv = 0;
}
}else{
sensorState = digitalRead(pirSensor1);
if(sensorState == HIGH){
digitalWrite(led1Pin, HIGH);
pirSensorActiv = pirSensorActiv + 1;
}else{
digitalWrite(led1Pin, LOW);
pirSensorActiv = 0;
}
}
// Checking first sensors state
timeCalculation = 0;
timeCalculation = everyLoopTime - pir_time2;
// if time difference is greater than skip time, then turn on LED and count time
if(timeCalculation > settings_sensorSkipTime){
sensorState = 0;
sensorState = digitalRead(pirSensor2);
if(sensorState == HIGH){
digitalWrite(led2Pin, HIGH);
pir_time2 = millis();
pirSensorActiv = pirSensorActiv + 1;
}else{
digitalWrite(led2Pin, LOW);
pirSensorActiv = 0;
}
} else {
sensorState = digitalRead(pirSensor2);
if(sensorState == HIGH){
digitalWrite(led2Pin, HIGH);
pirSensorActiv = pirSensorActiv + 1;
}else{
digitalWrite(led2Pin, LOW);
pirSensorActiv = 0;
}
}
// Main LED
// Both sensors has worked
if(pirSensorActiv > 1){
if(pir_time1 > pir_time2){
// if PIR1 sensor was first
timeBetweenSensors = pir_time1 - pir_time2;
} else {
// if PIR2 sensor was first
timeBetweenSensors = pir_time2 - pir_time1;
}
if(timeBetweenSensors > settings_minimumDelay && timeBetweenSensors != 3000){
Serial.println(timeBetweenSensors);
digitalWrite(led3Pin, HIGH);
delay(settings_mainLedDelay);
}
} else {
digitalWrite(led3Pin, LOW);
}
}
I am getting some random outputs in serialprintin, but sometimes, they look like a real ones. Someone have ideas what I am doing wrong?