The LDR_Sensor_Class gives a 1 second filter. To program filter time see LDR_Overload_Class
#include "LDR_Sensor_Class.h"//LDR_Sensor_Class sensor1(D1); //ESP8266 LDR_Sensor_Class sensor1(A0); //NANO void setup() {Serial.begin(115200); //baud rate serial monitorsensor1.begin( ); }
void loop() {Serial.print(sensor1.train_over_sensor());delay(200);}
#include "LDR_Sensor_Class.h"
LDR_Sensor_Class::LDR_Sensor_Class(int pin) {_pin = pin; };void LDR_Sensor_Class::begin ( ){pinMode(_pin,INPUT_PULLUP);sensor_state = wait4train;}
int LDR_Sensor_Class::train_over_sensor() { int train_detected = digitalRead(_pin); //pin high for trainif (sensor_state == wait4train) {if (train_detected){ sensor_state = wait4end; //next state wait for no trainstart_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 awhilesensor_state = wait4train; //ready for next trainreturn(train_detected); //will be no train}else // maybe a false reading - need to waitreturn(!train_detected); //will be saying there still is a train }}else //error should never get here{sensor_state = wait4train; //go back to startreturn(3); //not a valid state - used in debugging onl}
#ifndef LDR_Sensor_Class_h #define LDR_Sensor_Class_h
#include "Arduino.h" class LDR_Sensor_Class { public: LDR_Sensor_Class(int pin); int train_over_sensor();void begin( );private: int _pin;long int start_time; //start time of delay loopenum state {wait4train, wait4end} sensor_state;long delay4false = 1000; // milli seconds}; #endif