#include <LDR_Signals_RAG_Class.h>
//Client file LDR_Signals_RAG_Class.ino (Red Amber Green)//#include "LDR_Signals_RAG_Class.h"
LDR_Signals_RAG_Class signal0(A0,2,3,4);LDR_Signals_RAG_Class signal1(A1,5,6,7);LDR_Signals_RAG_Class signal2(A2,8,9,10);LDR_Signals_RAG _Class 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 state where_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,red if (s0) the_train = coming; break; case coming : // red, amber, red,red SIG0(1,0,0); //red if (!s0) { start_time = millis( ); the_train = approaching; } break; case approaching : //red,green,red,red SIG1(0,0,1); //green SIG2(0,1,0); //amber if (s1)the_train = arriving; if ((millis( )-start_time)> PROBLEM) the_train= waiting; //false reading break; case arriving : //red,red,amber.red SIG1(1,0,0); //red if (!s1)the_train = station; break; case station : //red,red,green,red SIG2(0,0,1); //green SIG3(0,1,0); //amber if (s2) the_train = departing; break; case departing : //red,red,red,amber SIG2(1,0,0); //red SIG3(0,1,0); //amber if (!s2) the_train = leaving; break; case leaving : //red,red,red,green SIG3(0,0,1); //green if (s3)the_train = going; break; case going : //all red SIG3(1,0,0); //red if (!s3) { the_train = vacant; start_time = millis();} break; case vacant : SIG0(0,1,0); //amber if ((millis( )- start_time) > RED_LIGHT_ON) { the_train = waiting; } break; } return the_train;} /* Version 1: All Signals GREEN in waiting state where_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,0,1); SIG2(0,0,1); SIG3(0,0,1); //all green if (s0) the_train = coming; break; case coming : SIG0(1,0,0); //red if (!s0) { start_time = millis( ); the_train = approaching; } break; case approaching : if (s1)the_train = arriving; if ((millis( )-start_time)> PROBLEM) the_train= waiting; //false reading break; case arriving : SIG1(1,0,0); if (!s1)the_train = station; break; case station : SIG0(0,1,0); //amber if (s2) the_train = departing; break; case departing : SIG2(1,0,0); //red if (!s2) the_train = leaving; break; case leaving : SIG0(0,0,1); //green SIG1(0,1,0); //amber if (s3)the_train = going; break; case going : SIG3(1,0,0); //red if (!s3) { the_train = vacant; start_time = millis();} break; case vacant : SIG2(0,1,0); //amber SIG1(0,0,1); //green if ((millis( )- start_time) > RED_LIGHT_ON) { the_train = vacant2; start_time = millis( ); } break; case vacant2 : SIG2(0,0,1); //green SIG3(0,1,0); //amber if ((millis( ) - start_time) > AMBER_LIGHT_ON) the_train = waiting; break; } //delay(100); return the_train;} *//*where_is_train train(int s0, int s1, int s2, int s3){ switch (the_train) { case wait : SIG0(0,0,1); SIG1(0,0,1); SIG2(0,0,1); SIG3(0,0,1); if (s0) the_train = at_s0; break; case at_s0 : SIG0(1,0,0); if (!s0) the_train = left_s0; break; case left_s0: if (s1) the_train = at_s1; break; case at_s1 : SIG1(1,0,0); if (!s1) the_train = left_s1; break; case left_s1: SIG0(0,1,0); if (s2) the_train = at_s2; break; case at_s2 : SIG2(1,0,0); if (!s2)the_train = left_s2; break; case left_s2: SIG0(0,0,1); SIG1(0,1,0); if (s3) the_train = at_s3; break; case at_s3 : SIG3(1,0,0); if (!s3) the_train = left_s3; break; case left_s3: SIG2(0,1,0); SIG1(0,0,1); delay (5000); SIG2(0,0,1); SIG3(0,1,0); delay(5000); the_train = wait; 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( ); /*if (s0) signal0.drive_signals(1,0,0); else signal0.drive_signals(0,0,1); if (s1) signal1.drive_signals(1,0,0); else signal1.drive_signals(0,0,1); if (s2) signal2.drive_signals(1,0,0); else signal2.drive_signals(0,0,1); if (s3) signal3.drive_signals(1,0,0); else signal3.drive_signals(0,0,1);*/ the_train = train(s0,s1,s2,s3); /*if (s0) SIG0(1,0,0); else SIG0(0,0,1); if (s1) SIG1(1,0,0); else SIG1(0,0,1); if (s2) SIG2(1,0,0); else SIG2(0,0,1); if (s3) SIG3(1,0,0); else SIG3(0,0,1);*/}