//Dsp_State_ESP13#include <MESS_2_ESP_AP.h>
#include <LDR_Signals_RAG.h>
MESS_2_ESP_AP Train_State;
const char* ssid = "Dsp_State_ESP13";const char* password = "qwertyuiop";const char* ip_address = "192.168.4.27";
//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; Train_State.begin(ssid, password,ip_address); // Serial.begin(115200);} //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;}/*************OTHER PROJECT ***********************************/
const char Mess_waiting[] PROGMEM ={ "<a href=\"update.htm\">No trains present\n</a>"};const char Mess_coming[] PROGMEM ={ "<a href=\"update.htm\">Train coming\n</a>"};const char Mess_approach[] PROGMEM ={ "<a href=\"update.htm\">Train approaching\n</a>"};const char Mess_arrive[] PROGMEM ={ "<a href=\"update.htm\">Train arriving\n</a>"};const char Mess_station[] PROGMEM ={ "<a href=\"update.htm\">Train in station\n</a>"};
const char Mess_depart[] PROGMEM ={ "<a href=\"update.htm\">Train departing\n</a>"};const char Mess_leave[] PROGMEM ={ "<a href=\"update.htm\">Train leaving\n</a>"};const char Mess_going[] PROGMEM ={ "<a href=\"update.htm\">Train going\n</a>"};const char Mess_vacant[] PROGMEM ={ "<a href=\"update.htm\">Train has vacated section\n</a>"};
/*void response(const char * dd){ char cc = pgm_read_byte(dd); while (cc != '\0'){ // Serial.write(cc); dd++; cc = pgm_read_byte(dd); } }*/
const char MESS_2_ESP_Mess[] PROGMEM = { "Program: Dsp_State_ESP13." "<br>Click to <a href=\"update.htm\">Continue</a>"};void display_message(where_is_train state_of_train){// Serial.println("Train location unknown!"); switch (state_of_train){ case waiting: Train_State.response(Mess_waiting); break; case coming: Train_State.response(Mess_coming); break; case approaching: Train_State.response(Mess_approach); break; case arriving: Train_State.response(Mess_arrive); break; case station: Train_State.response(Mess_station); break; case departing: Train_State.response(Mess_depart); break; case leaving: Train_State.response(Mess_leave); break; case going: Train_State.response(Mess_going); break; case vacant: case vacant2: Train_State.response(Mess_vacant); break; default: Train_State.response(Mess_waiting); }}void loop() { static where_is_train last_state = vacant2; 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); char * theRequest = Train_State.request( ); if (theRequest){ if (* theRequest =='\0') Train_State.response(MESS_2_ESP_Mess); else if (!strcmp(theRequest,"update.htm")) display_message(the_train); } }