//Header file LDR_Serial_Sensor_Class.h#ifndef LDR_SERIAL_SENSOR_CLASS_H#define LDR_SERIAL_SENSOR_CLASS_H#include <Arduino.h>
class LDR_Serial_Sensor_Class { public : LDR_Serial_Sensor_Class(int ser, int load, int clk); void begin( ); int train_over_sensor(int sen); private: int _ser; int _load; int _clk; int _status[8]; enum train_state{no_train=0,a_train=1} sensor_state[8]; int train_detected[8]; long int start_time[8]; long int delay4false = 1000; //use >>4 for testing };#endif-------------------------------//The implementation file LDR_Serial_Sensor_Class.cpp#include "LDR_Serial_Sensor_Class.h"LDR_Serial_Sensor_Class::LDR_Serial_Sensor_Class(int ser, int load, int clk) { _ser= ser; _load=load; _clk=clk; } void LDR_Serial_Sensor_Class::begin( ){ pinMode(_load,OUTPUT); pinMode(_clk,OUTPUT); pinMode(_ser,INPUT); //pinMode(_ser,OUTPUT); digitalWrite(_load,HIGH); for (int i = 0; i<=7; i++) sensor_state[i] = no_train; }int LDR_Serial_Sensor_Class::train_over_sensor(int sen){ digitalWrite(_load,HIGH); //freeze data go to shift mode for (int i = 7; i>= 0; i--){ _status[i] = digitalRead(_ser); //read serial output digitalWrite(_clk,HIGH); //clock next to output digitalWrite(_clk,LOW); } // digitalWrite(_load,LOW); //D flip flops follow sensors train_detected[sen] = _status[sen]; //pin high for train switch (sensor_state[sen]) { case no_train : if (train_detected[sen]){ sensor_state[sen] = a_train; //next state wait for no train start_time[sen] = millis( ); } break; case a_train : if (train_detected[sen]) //detected train so keep restarting timing loop { start_time[sen] = millis( ); } else //no train detected { if (millis( ) - start_time[sen] >= delay4false) { //exit now as no-train for awhile sensor_state[sen] = no_train; //ready for next train } break; } } digitalWrite(_load,LOW); //D flip flops follow sensors return (sensor_state[sen]); }----------------------------------//Test code LDR_Serial_Sensor_Class.ino#include "LDR_Serial_Sensor_Class.h"LDR_Serial_Sensor_Class sensors(D0,D5,D6);void setup() { Serial.begin(115200); sensors.begin( );}
void loop() { for (int i=0; i<8; i++) Serial.print(sensors.train_over_sensor(i)); Serial.println(); // Serial.print(sensors.train_over_sensor(3)); delay(1000);}----------------------------------