excel was fine (even if it was somehow misleading as you are using 6 inputs and 5 Leds now).
next step is to check your logic table against your hardware.
You could use simple if statements
something like this (compiles, but missing your hardware tests)
/* Model railroad signal control
https://forum.arduino.cc/index.php?topic=659917.0
Prototype
by noiasca
*/
const byte signal1rPin = 2;
const byte signal1yPin = 3;
const byte signal1gPin = 4;
const byte signal2rPin = 5;
const byte signal1y2yPin = 6;
const byte block2Pin = 8;
const byte block3Pin = 9;
const byte block4Pin = 10;
const byte switch1Pin = A0;
const byte switch4Pin = A1;
const byte switch3Pin = A2;
void doSignal()
{
static byte previousStage = 42;
byte newStage = 42;
// Step 1: check for pin changes
if ( block2Pin && !switch1Pin && !switch4Pin)
{
newStage = 0;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 1);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
}
else if ( !block2Pin && block3Pin && !switch1Pin && !switch4Pin)
{
newStage = 1;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 1);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
}
else if ( !block2Pin && !block3Pin && !switch1Pin && !switch4Pin)
{
newStage = 2;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 1);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
}
else if ( !switch1Pin && !switch4Pin)
{
newStage = 3;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 1);
digitalWrite(signal1y2yPin, 0);
}
else if ( !block4Pin && switch1Pin && !switch3Pin)
{
newStage = 4;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 1);
}
else
{
newStage = 255; // just in case your logic table has an error,
Serial.println(F("unspecified "));
Serial.println(digitalRead(block2Pin));
Serial.println(digitalRead(block3Pin));
Serial.println(digitalRead(block4Pin));
Serial.println(digitalRead(switch1Pin));
Serial.println(digitalRead(switch4Pin));
Serial.println(digitalRead(switch3Pin));
}
// Step 2: change lights if something new happend
if (newStage != previousStage)
{
switch (newStage)
{
case 0 :
previousStage = newStage;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 1);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
break;
case 1 :
previousStage = newStage;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 1);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
break;
case 2 :
previousStage = newStage;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 1);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 0);
break;
case 3 :
previousStage = newStage;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 1);
digitalWrite(signal1y2yPin, 0);
break;
case 4:
previousStage = newStage;
Serial.println(F("condition ")); Serial.println(previousStage);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1yPin, 0);
digitalWrite(signal1gPin, 0);
digitalWrite(signal1rPin, 0);
digitalWrite(signal1y2yPin, 1);
break;
default:
Serial.println(F("unspecified ")); // just in case your logic table has an error
Serial.println(digitalRead(block2Pin));
Serial.println(digitalRead(block3Pin));
Serial.println(digitalRead(block4Pin));
Serial.println(digitalRead(switch1Pin));
Serial.println(digitalRead(switch4Pin));
Serial.println(digitalRead(switch3Pin));
break;
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println(F("\n Signal V1"));
pinMode(signal1rPin, INPUT);
pinMode(signal1yPin, INPUT);
pinMode(signal1gPin, INPUT);
pinMode(signal1rPin, INPUT);
pinMode(signal1y2yPin, INPUT);
pinMode(block2Pin, OUTPUT);
pinMode(block3Pin, OUTPUT);
pinMode(block4Pin, OUTPUT);
pinMode(switch1Pin, OUTPUT);
pinMode(switch4Pin, OUTPUT);
pinMode(switch3Pin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
doSignal();
}
Its not optimized in any way, just a beginner-write-down as a start.
Will you need only one signal with (5) LEDs or will you need more Signals with the same logic (on other Input pins) in a later stage?