This page overloads the constructor in the LDR_Sensor_Class allowing the filter delay time to be programmed (default is 1 second)
#include "LDR_Overload_Class.h"//LDR_Overload_Class sensor1(D1); //ESP8266 //LDR_Overload_Class sensor1(A0); //NANO LDR_Overload_Class sensor1(A0,5); //NANO void setup() { Serial.begin(115200); //baud rate serial monitor sensor1.begin( ); }
void loop() { Serial.print(sensor1.train_over_sensor()); delay(200);}
#include "LDR_Overload_Class.h"
void LDR_Overload_Class::begin ( ){ pinMode(_pin,INPUT_PULLUP); sensor_state = wait4train;}
LDR_Overload_Class::LDR_Overload_Class(int pin) { _pin = pin; };
LDR_Overload_Class::LDR_Overload_Class(int pin, int delay_time) { _pin = pin; delay4false = delay_time*1000;};
int LDR_Overload_Class::train_over_sensor() { int train_detected = digitalRead(_pin); //pin high for train if (sensor_state == wait4train) { if (train_detected){ sensor_state = wait4end; //next state wait for no train start_time = millis( ); } return (train_detected); //normally will be no-train } else if (sensor_state == wait4end) { if (train_detected) //detected train so keep restarting timing loop { start_time = millis( ); return(train_detected); //will be train detected } else //no train detected { if (millis( ) - start_time >= delay4false) { //exit now as no-train for awhile sensor_state = wait4train; //ready for next train return(train_detected); //will be no train } else // maybe a false reading - need to wait return(!train_detected); //will be saying there still is a train } } else //error should never get here { sensor_state = wait4train; //go back to start return(3); //not a valid state - used in debugging only }}
#ifndef LDR_Overload_Class_h #define LDR_Overload_Class_h
#include "Arduino.h" class LDR_Overload_Class { public: LDR_Overload_Class(int pin); LDR_Overload_Class(int pin, int delay_time); int train_over_sensor(); void begin( ); private: int _pin; long int start_time; //start time of delay loop enum state {wait4train, wait4end} sensor_state; long delay4false = 1000; // milli seconds }; #endif