//Test or application code#include "LDR_Analog_Class.h"//LDR_Analog_Class sensor1(D1); //ESP8266 //LDR_Analog_Class sensor1(A0); //NANO 1 second defaultLDR_Analog_Class sensor1(A0,5); //NANO 5 secondsvoid setup() { pinMode(13,OUTPUT); Serial.begin(115200); //baud rate serial monitor sensor1.begin( ); }
void loop() { Serial.print(sensor1.train_over_sensor()); //digitalWrite(13,digitalRead(A0)); digitalWrite(13,sensor1.train_over_sensor()); delay(200);}-------------------------------------------//LDR_Analog_Class Implementation file#include "LDR_Analog_Class.h" void LDR_Analog_Class::begin ( ){ if ((_pin==A0)||(_pin==A1)||(_pin==A2)||(_pin==A3)||(_pin==A4)||(_pin==A5)) {No_train = analogRead(_pin); //Serial.println(No_train); Train_present = No_train+DELTA; its_analog = true; } sensor_state = wait4train;}
LDR_Analog_Class::LDR_Analog_Class(int pin) { _pin = pin; };
LDR_Analog_Class::LDR_Analog_Class(int pin, int delay_time) { _pin = pin; delay4false = delay_time*1000;};
int LDR_Analog_Class::train_over_sensor() { int train_detected = digitalRead(_pin); //pin high for train if (its_analog) { if (analogRead(_pin) > Train_present) train_detected = 1; else train_detected = 0; } 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 }}----------------------------------------------------//LDR_Analog_Class Header file#ifndef LDR_Analog_Class_h #define LDR_Analog_Class_h
#include "Arduino.h" #define DELTA 75class LDR_Analog_Class { public: LDR_Analog_Class(int pin); LDR_Analog_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 bool its_analog = false; int No_train; int Train_present; }; #endif