//IR_Sensor_Class.ino#include "IR_Sensor_Class.h"IR_Sensor_Class sensor1(D1); void setup() { Serial.begin(115200); //baud rate serial monitor sensor1.begin( ); }
void loop() { Serial.print(sensor1.train_over_sensor()); delay(200); }
//IR_Sensor_Class.ino#include "IR_Sensor_Class.h" IR_Sensor_Class::IR_Sensor_Class(int pin) { _pin = pin; };void IR_Sensor_Class::begin ( ){ pinMode(_pin,INPUT); sensor_state = wait4train;} int IR_Sensor_Class::train_detected(int pin) { return (!digitalRead(pin)); //pin low for train} int IR_Sensor_Class::train_over_sensor() { switch (sensor_state) { case wait4train: if (train_detected(_pin)){ sensor_state = wait4end; start_time = millis( ); } break; case wait4end : if (train_detected (_pin)) start_time = millis( ); //train detected so keep restarting else if (millis( ) - start_time >= delay4false) //exit now as no-train for awhile sensor_state = wait4train; //ready for next train break; } return (sensor_state); }
//IR_Sensor_Class.h#ifndef IR_Sensor_Class_h #define IR_Sensor_Class_h
#include "Arduino.h" class IR_Sensor_Class { public: IR_Sensor_Class(int pin); 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 int train_detected(int pin); }; #endif