Search this site
Embedded Files
Skip to main content
Skip to navigation
JohnKneenProjects
Home
Untitled page
3D_Printing
Fusion360_Starting
Servo_Motor_Mount
Control_Board_Panel
Arduino
Programming
ROM_Data
Cpp
LCD_ROM_Class
LCD_Init_Class
LCD_Print_Class
DCC_Probe_code
OLED
Watch_Dog_Timers
Touch_Pad_Test
LCD_1602_Class
Touch_Pad_Class
LCD_1602_Class
Arduino_Topics
Arduino_IDE
Arduino_SW
Powering_Arduino
DCC_Power_Arduino
Uno_Power_Source
Nano_Power
EasyEDA_PCB
PCB_Board_2
PCB_Board_3
New_Component
Sensors_Signals
LDR_Sensors
LDR_Test
LDR_Sensor_Class
LDR_Overload_Class
LDR_Analog_Class
LDR_Serial_Sensor_Class
IR_Sensors
IR_Testing
IR_Sensor_Class
Train_Signals
Signals2_Class
Signals3_Class
LDR_Signals3_class
LDR_Signals3_Array
Signal3_Serial_Class
Model_Trains
Coal_Basin_Project
Coal_Basin1
Coal_Basin_Signals
Coal_Basin_Buttons
Coal_Basin_LEDs
Coal_Basin_Control
Coal_Basin_Servo_Issues
Coal_Basin_Servo
Coal_Basin_2
Coal_Basin_LED2
Coal_Basin_Buttons_2
Coal_Basin_Control2
Coal_Basin_Servo2
DCC
DCC_Track_Protocol
DCC_Probe
DCC_Debug
DCC_Loco_Fn
DCC_Points_Control
Function_Control_Points
Servo_Tester
XFunction_Control_Points
Servos for Points
Signals4Trains
Dsp_Train_State
Single_Track_Class
Track_Trains
LDR_Signals_RAG_Class
Track_Trains_ESP
Track_Trains_ESP_Class
IR_Single_Track_Class
LDR_Ser_Sig3_Ser_Class
Signals_for_Delta_Layout
Delta_Layout
WiFi
Dsp_State_ESP13
WiFi_Train_State
WiFi_Train_SSE
Track_Train_ESP_WiFi
LDR_ESP_WiFi_SSE
Multi_WiFi_to_WiFi_AP
NCE_Bus
NCE_Bus_Probe
NCE_Bus_LCD
DCC_NCE_Bus
WiFi
WiFi_Basics
WiFi_123
WiFi_Mess
WiFi_SSE
Programs
Coal_Basin_Control_code
Coal_Basin_Buttons_code
Coal_Basin_LEDs_code
Coal_Basin_Servo_code
Coal_Basin_Signals_code
DCC_Debug_code
DCC_Loco_Fn_code
DCC_NCE_Bus_code
DCC_Points_Control_code
DCC_Probe_code
Delta_Layout_code
DSP_Sensor_State_code
Dsp_State_ESP13_code
Dsp_Train_State_code
IR_Sensor_Class_code
IR_Single_Track_Class_code
IR_Test_code
LCD_Init_Class_code
LCD_Print_Class_code
LCD_ROM_Class_code
LCD_1602_Class_code
LDR_Analog_Class_code
LDR_ESP_WiFi_SSE_code
LDR_Overload_Class_code
LDR_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Signals3_Array_code
LDR_Ser_Sig3_Ser_Class_code
LDR_Signals3_Class_code
LDR_Test_code
LDR_Signals_RAG_Class_code
Multi_WiFi_to_WiFi_AP_code
OLED_code
Servos_for_Points_code
Servo_tester_code
Signals2_Class_code
Signals3_Serial_Class_code
Signals3_Class_code
Single_Track_Class_code
Touch_Pad_Class_code
Touch_Pad_Test_code
Track_Train_ESP_Class_code
Track_Train_ESP_code
Track_Train_ESP_WiFi_code
Track_Trains_code
Track_Trains_code
WiFi_123_code
WiFi_Mess_code
WiFi_SSE_code
WiFi_Train_SSE_code
WiFi_Train_State_code
Zip_Code
Function_Control_Points_code
XFunction_Control_Points_code
NCE_Bus_Probe_code
JohnKneenProjects
Home
Untitled page
3D_Printing
Fusion360_Starting
Servo_Motor_Mount
Control_Board_Panel
Arduino
Programming
ROM_Data
Cpp
LCD_ROM_Class
LCD_Init_Class
LCD_Print_Class
DCC_Probe_code
OLED
Watch_Dog_Timers
Touch_Pad_Test
LCD_1602_Class
Touch_Pad_Class
LCD_1602_Class
Arduino_Topics
Arduino_IDE
Arduino_SW
Powering_Arduino
DCC_Power_Arduino
Uno_Power_Source
Nano_Power
EasyEDA_PCB
PCB_Board_2
PCB_Board_3
New_Component
Sensors_Signals
LDR_Sensors
LDR_Test
LDR_Sensor_Class
LDR_Overload_Class
LDR_Analog_Class
LDR_Serial_Sensor_Class
IR_Sensors
IR_Testing
IR_Sensor_Class
Train_Signals
Signals2_Class
Signals3_Class
LDR_Signals3_class
LDR_Signals3_Array
Signal3_Serial_Class
Model_Trains
Coal_Basin_Project
Coal_Basin1
Coal_Basin_Signals
Coal_Basin_Buttons
Coal_Basin_LEDs
Coal_Basin_Control
Coal_Basin_Servo_Issues
Coal_Basin_Servo
Coal_Basin_2
Coal_Basin_LED2
Coal_Basin_Buttons_2
Coal_Basin_Control2
Coal_Basin_Servo2
DCC
DCC_Track_Protocol
DCC_Probe
DCC_Debug
DCC_Loco_Fn
DCC_Points_Control
Function_Control_Points
Servo_Tester
XFunction_Control_Points
Servos for Points
Signals4Trains
Dsp_Train_State
Single_Track_Class
Track_Trains
LDR_Signals_RAG_Class
Track_Trains_ESP
Track_Trains_ESP_Class
IR_Single_Track_Class
LDR_Ser_Sig3_Ser_Class
Signals_for_Delta_Layout
Delta_Layout
WiFi
Dsp_State_ESP13
WiFi_Train_State
WiFi_Train_SSE
Track_Train_ESP_WiFi
LDR_ESP_WiFi_SSE
Multi_WiFi_to_WiFi_AP
NCE_Bus
NCE_Bus_Probe
NCE_Bus_LCD
DCC_NCE_Bus
WiFi
WiFi_Basics
WiFi_123
WiFi_Mess
WiFi_SSE
Programs
Coal_Basin_Control_code
Coal_Basin_Buttons_code
Coal_Basin_LEDs_code
Coal_Basin_Servo_code
Coal_Basin_Signals_code
DCC_Debug_code
DCC_Loco_Fn_code
DCC_NCE_Bus_code
DCC_Points_Control_code
DCC_Probe_code
Delta_Layout_code
DSP_Sensor_State_code
Dsp_State_ESP13_code
Dsp_Train_State_code
IR_Sensor_Class_code
IR_Single_Track_Class_code
IR_Test_code
LCD_Init_Class_code
LCD_Print_Class_code
LCD_ROM_Class_code
LCD_1602_Class_code
LDR_Analog_Class_code
LDR_ESP_WiFi_SSE_code
LDR_Overload_Class_code
LDR_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Signals3_Array_code
LDR_Ser_Sig3_Ser_Class_code
LDR_Signals3_Class_code
LDR_Test_code
LDR_Signals_RAG_Class_code
Multi_WiFi_to_WiFi_AP_code
OLED_code
Servos_for_Points_code
Servo_tester_code
Signals2_Class_code
Signals3_Serial_Class_code
Signals3_Class_code
Single_Track_Class_code
Touch_Pad_Class_code
Touch_Pad_Test_code
Track_Train_ESP_Class_code
Track_Train_ESP_code
Track_Train_ESP_WiFi_code
Track_Trains_code
Track_Trains_code
WiFi_123_code
WiFi_Mess_code
WiFi_SSE_code
WiFi_Train_SSE_code
WiFi_Train_State_code
Zip_Code
Function_Control_Points_code
XFunction_Control_Points_code
NCE_Bus_Probe_code
More
Home
Untitled page
3D_Printing
Fusion360_Starting
Servo_Motor_Mount
Control_Board_Panel
Arduino
Programming
ROM_Data
Cpp
LCD_ROM_Class
LCD_Init_Class
LCD_Print_Class
DCC_Probe_code
OLED
Watch_Dog_Timers
Touch_Pad_Test
LCD_1602_Class
Touch_Pad_Class
LCD_1602_Class
Arduino_Topics
Arduino_IDE
Arduino_SW
Powering_Arduino
DCC_Power_Arduino
Uno_Power_Source
Nano_Power
EasyEDA_PCB
PCB_Board_2
PCB_Board_3
New_Component
Sensors_Signals
LDR_Sensors
LDR_Test
LDR_Sensor_Class
LDR_Overload_Class
LDR_Analog_Class
LDR_Serial_Sensor_Class
IR_Sensors
IR_Testing
IR_Sensor_Class
Train_Signals
Signals2_Class
Signals3_Class
LDR_Signals3_class
LDR_Signals3_Array
Signal3_Serial_Class
Model_Trains
Coal_Basin_Project
Coal_Basin1
Coal_Basin_Signals
Coal_Basin_Buttons
Coal_Basin_LEDs
Coal_Basin_Control
Coal_Basin_Servo_Issues
Coal_Basin_Servo
Coal_Basin_2
Coal_Basin_LED2
Coal_Basin_Buttons_2
Coal_Basin_Control2
Coal_Basin_Servo2
DCC
DCC_Track_Protocol
DCC_Probe
DCC_Debug
DCC_Loco_Fn
DCC_Points_Control
Function_Control_Points
Servo_Tester
XFunction_Control_Points
Servos for Points
Signals4Trains
Dsp_Train_State
Single_Track_Class
Track_Trains
LDR_Signals_RAG_Class
Track_Trains_ESP
Track_Trains_ESP_Class
IR_Single_Track_Class
LDR_Ser_Sig3_Ser_Class
Signals_for_Delta_Layout
Delta_Layout
WiFi
Dsp_State_ESP13
WiFi_Train_State
WiFi_Train_SSE
Track_Train_ESP_WiFi
LDR_ESP_WiFi_SSE
Multi_WiFi_to_WiFi_AP
NCE_Bus
NCE_Bus_Probe
NCE_Bus_LCD
DCC_NCE_Bus
WiFi
WiFi_Basics
WiFi_123
WiFi_Mess
WiFi_SSE
Programs
Coal_Basin_Control_code
Coal_Basin_Buttons_code
Coal_Basin_LEDs_code
Coal_Basin_Servo_code
Coal_Basin_Signals_code
DCC_Debug_code
DCC_Loco_Fn_code
DCC_NCE_Bus_code
DCC_Points_Control_code
DCC_Probe_code
Delta_Layout_code
DSP_Sensor_State_code
Dsp_State_ESP13_code
Dsp_Train_State_code
IR_Sensor_Class_code
IR_Single_Track_Class_code
IR_Test_code
LCD_Init_Class_code
LCD_Print_Class_code
LCD_ROM_Class_code
LCD_1602_Class_code
LDR_Analog_Class_code
LDR_ESP_WiFi_SSE_code
LDR_Overload_Class_code
LDR_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Serial_Sensor_Class_code
LDR_Signals3_Array_code
LDR_Ser_Sig3_Ser_Class_code
LDR_Signals3_Class_code
LDR_Test_code
LDR_Signals_RAG_Class_code
Multi_WiFi_to_WiFi_AP_code
OLED_code
Servos_for_Points_code
Servo_tester_code
Signals2_Class_code
Signals3_Serial_Class_code
Signals3_Class_code
Single_Track_Class_code
Touch_Pad_Class_code
Touch_Pad_Test_code
Track_Train_ESP_Class_code
Track_Train_ESP_code
Track_Train_ESP_WiFi_code
Track_Trains_code
Track_Trains_code
WiFi_123_code
WiFi_Mess_code
WiFi_SSE_code
WiFi_Train_SSE_code
WiFi_Train_State_code
Zip_Code
Function_Control_Points_code
XFunction_Control_Points_code
NCE_Bus_Probe_code
Display Sensor State code
DSP_Sensor_State.ino
#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 1
void setup() {
signal0.begin(POLARITY);
signal1.begin(POLARITY);
signal2.begin(POLARITY);
signal3.begin(POLARITY);
the_train = waiting;
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;
}
const char Mess_waiting[] PROGMEM = { "No trains present\n"};
const char Mess_coming[] PROGMEM = {"Train coming\n"};
const char Mess_approach[] PROGMEM = {"Train approaching\n"};
const char Mess_arrive[] PROGMEM = {"Train arriving\n"};
const char Mess_station[] PROGMEM = {"Train in station\n"};
const char Mess_depart[] PROGMEM = {"Train departing\n"};
const char Mess_leave[] PROGMEM = {"Train leaving\n"};
const char Mess_going[] PROGMEM = {"Train going\n"};
const char Mess_vacant[] PROGMEM = {"Train has vacated section\n"};
void response(const char * dd){
char cc = pgm_read_byte(dd);
while (cc != '\0'){
Serial.write(cc);
dd++;
cc = pgm_read_byte(dd);
}
}
void display_message(where_is_train state_of_train){
switch (state_of_train){
case waiting : response(Mess_waiting); break;
case coming : response(Mess_coming); break;
case approaching : response(Mess_approach); break;
case arriving : response(Mess_arrive); break;
case station : response(Mess_station); break;
case departing : response(Mess_depart); break;
case leaving : response(Mess_leave); break;
case going : response(Mess_going); break;
case vacant :
case vacant2 : response(Mess_vacant); break;
}
}
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);
if (the_train != last_state){
last_state = the_train;
display_message(last_state);
}
}
Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse