Sorry, Here's the updated sketch,
// Simple 3 Aspect Block Signal Control Paul Matthews 2022
// Set up for three 3 aspect signals. When a train passes signal 1
// it will turn red, when it passes signal 2 it will turn red and
// signal 1 will turn amber, when the train passes signal 3 it will
// turn red, signal 2 will turn amber and signal 1 will turn green
// If the train loops and passes signal 1 again signal 3 will go to
// amber, signal 2 to green and the cycle will start again.
// an overide switch connected to pin A1 will turn all the signals red
// a reset push switch connected to pin A0 will reset all the
// signals back to green
#define train_detection_pin1 2 // Signal 1 train detection sensor is pin 2
#define green1_pin 3 // Signal 1 green LED is pin 3
#define amber1_pin 4 // Signal 1 amber LED is pin 4
#define red1_pin 5 // Signal 1 red LED is pin 5
#define train_detection_pin2 6 // Signal 2 train detection sensor is pin 6
#define green2_pin 7 // Signal 2 green LED is pin 7
#define amber2_pin 8 // Signal 2 amber LED is pin 8
#define red2_pin 9 // Signal 2 red LED is pin 9
#define train_detection_pin3 10 // Signal 3 train detection sensor is pin 10
#define green3_pin 11 // Signal 3 green LED is pin 11
#define amber3_pin 12 // Signal 3 amber LED is pin 12
#define red3_pin 13 // Signal 3 red LED is pin 13
#define reset_switch A0 // Reset switch is pin A0
#define overide_switch A1 // Overide switch is pin A1
byte loop_around = 0;
byte state = 0;
void setup() {
// put your setup code here, to run once:
pinMode (green1_pin, OUTPUT);
pinMode (amber1_pin, OUTPUT);
pinMode (red1_pin, OUTPUT);
pinMode (train_detection_pin1, INPUT_PULLUP);
pinMode (green2_pin, OUTPUT);
pinMode (amber2_pin, OUTPUT);
pinMode (red2_pin, OUTPUT);
pinMode (train_detection_pin2, INPUT_PULLUP);
pinMode (green3_pin, OUTPUT);
pinMode (amber3_pin, OUTPUT);
pinMode (red3_pin, OUTPUT);
pinMode (train_detection_pin3, INPUT_PULLUP);
pinMode (reset_switch, INPUT_PULLUP);
pinMode (overide_switch, INPUT_PULLUP);
// Begin Lamp Test - each lamp will light in turn for 1 second (1000 ms = 1 second)
digitalWrite(green1_pin, HIGH);
digitalWrite(green2_pin, HIGH);
digitalWrite(green3_pin, HIGH);
delay(500);
digitalWrite(green1_pin, LOW);
digitalWrite(green2_pin, LOW);
digitalWrite(green3_pin, LOW);
digitalWrite(amber1_pin, HIGH);
digitalWrite(amber2_pin, HIGH);
digitalWrite(amber3_pin, HIGH);
delay(500);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, LOW);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, HIGH);
digitalWrite(red2_pin, HIGH);
digitalWrite(red3_pin, HIGH);
delay(500);
digitalWrite(red1_pin, LOW);
digitalWrite(red2_pin, LOW);
digitalWrite(red3_pin, LOW);
// End Lamp Test
digitalWrite(green1_pin, HIGH);
digitalWrite(green2_pin, HIGH);
digitalWrite(green3_pin, HIGH);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(overide_switch) == LOW) {
state = 1;
}
switch (state) {
case 1: //overide switch
digitalWrite(green1_pin, LOW);
digitalWrite(green2_pin, LOW);
digitalWrite(green3_pin, LOW);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, LOW);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, HIGH);
digitalWrite(red2_pin, HIGH);
digitalWrite(red3_pin, HIGH);
if (digitalRead(overide_switch) == HIGH) {
state = 0;
digitalWrite(green1_pin, HIGH);
digitalWrite(green2_pin, HIGH);
digitalWrite(green3_pin, HIGH);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, LOW);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, LOW);
digitalWrite(red2_pin, LOW);
digitalWrite(red3_pin, LOW);
}
break;
}
if (digitalRead(reset_switch) == LOW) {
digitalWrite(green1_pin, HIGH);
digitalWrite(green2_pin, HIGH);
digitalWrite(green3_pin, HIGH);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, LOW);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, LOW);
digitalWrite(red2_pin, LOW);
digitalWrite(red3_pin, LOW);
}
if (digitalRead(train_detection_pin1) == LOW) { //if train is detected at signal 1
digitalWrite(green1_pin, LOW);
digitalWrite(green2_pin, HIGH);
digitalWrite(green3_pin, LOW);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, LOW);
digitalWrite(red1_pin, HIGH);
digitalWrite(red2_pin, LOW);
digitalWrite(red3_pin, LOW);
if (loop_around == 1) {
digitalWrite(amber3_pin, HIGH);
}
else {
digitalWrite(green3_pin, HIGH);
}
}
if (digitalRead(train_detection_pin2) == LOW) { //if train is detected at signal 2
digitalWrite(green1_pin, LOW);
digitalWrite(green2_pin, LOW);
digitalWrite(green3_pin, HIGH);
digitalWrite(amber1_pin, HIGH);
digitalWrite(amber2_pin, LOW);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, LOW);
digitalWrite(red2_pin, HIGH);
digitalWrite(red3_pin, LOW);
}
if (digitalRead(train_detection_pin3) == LOW) { //if train is detected at signal 3
digitalWrite(green1_pin, HIGH);
digitalWrite(green2_pin, LOW);
digitalWrite(green3_pin, LOW);
digitalWrite(amber1_pin, LOW);
digitalWrite(amber2_pin, HIGH);
digitalWrite(amber3_pin, LOW);
digitalWrite(red1_pin, LOW);
digitalWrite(red2_pin, LOW);
digitalWrite(red3_pin, HIGH);
loop_around = 1;
}
}Use code tags to format code for the forumis the updated sketch,