#include <LDR_Signals_RAG.h>
//Client file LDR_Signals_RAG.ino (Red Amber Green)//#include "LDR_Signals_RAG.h"
LDR_Signals_RAG signal0(A0,2,3,4);LDR_Signals_RAG signal1(A1,5,6,7);LDR_Signals_RAG signal2(A2,8,9,10);LDR_Signals_RAG signal3(A3,11,12,13);
enum where_is_train {waiting,coming,approaching,arriving,station,departing,leaving,going,vacant,vacant2} the_train;#define SIG0 signal0.drive_signals#define SIG1 signal1.drive_signals#define SIG2 signal2.drive_signals#define SIG3 signal3.drive_signals
#define RED_LIGHT_ON 5000L#define AMBER_LIGHT_ON 5000L #define PROBLEM 20000L#define POLARITY 1void setup() {signal0.begin(POLARITY);signal1.begin(POLARITY);signal2.begin(POLARITY);signal3.begin(POLARITY);the_train = waiting;}//Version 2: Signals are GREEN, AMBER, RED, RED in waiting statewhere_is_train train(int s0, int s1, int s2, int s3){static long start_time;switch (the_train) {case waiting : SIG0(0,0,1); SIG1(0,1,0); SIG2(1,0,0); SIG3(1,0,0); //green,amber,red,redif (s0) the_train = coming; break;case coming : // red, amber, red,redSIG0(1,0,0); //redif (!s0) { start_time = millis( ); the_train = approaching; } break;case approaching : //red,green,red,redSIG1(0,0,1); //greenSIG2(0,1,0); //amberif (s1)the_train = arriving; if ((millis( )-start_time)> PROBLEM) the_train= waiting; //false readingbreak; case arriving : //red,red,amber.redSIG1(1,0,0); //redif (!s1)the_train = station; break;case station : //red,red,green,redSIG2(0,0,1); //greenSIG3(0,1,0); //amberif (s2) the_train = departing; break; case departing : //red,red,red,amberSIG2(1,0,0); //redSIG3(0,1,0); //amberif (!s2) the_train = leaving; break;case leaving : //red,red,red,greenSIG3(0,0,1); //greenif (s3)the_train = going; break; case going : //all redSIG3(1,0,0); //redif (!s3) { the_train = vacant;start_time = millis();}break;case vacant : SIG0(0,1,0); //amberif ((millis( )- start_time) > RED_LIGHT_ON) { the_train = waiting;}break;}return the_train;} void loop() {int s0 = signal0.train_over_sensor( );int s1 = signal1.train_over_sensor( );int s2 = signal2.train_over_sensor( );int s3 = signal3.train_over_sensor( );the_train = train(s0,s1,s2,s3);}