Here's your code adapted to use a state machine for one platform:
//Bolton Trinty Street Station signal lights
//By John Marshall
const int upplatform3RedLed = 7; //This set are Platform 3 direction signals for Preston or Blackburn
const int upplatform3YellowLed = 8;
const int upplatform3GreenLed = 9;
const int upplatform3WhiteLed1 = 10; //Centre LED
const int upplatform3WhiteLed2 = 11; //Left LED
const int upplatform3WhiteLed3 = 12; //Right LED
const int upmainRedLed = 13; //This set are Up Main direction signals for Preston or Blackburn
const int upmainYellowLed = 14;
const int upmainGreenLed = 15;
const int upmainWhiteLed1 = 16; //As above LEDs
const int upmainWhiteLed2 = 17;
const int upmainWhiteLed3 = 18;
const int downmainRedLed = 19; //This set are Down main direction signals for Manchester
const int downmainYellowLed = 20;
const int downmainGreenLed = 21;
const int downmainWhiteLed1 = 0; //not used
const int downmainWhiteLed2 = 0; //not used
const int downmainWhiteLed3 = 0; //not used
const int downplatform1or2RedLed = 22; //This set are Platform 1 or 2 direction signals for Manchester
const int downplatform1or2YellowLed = 23;
const int downplatform1or2GreenLed = 24;
const int downplatform1or2WhiteLed1 = 25;
const int downplatform1or2WhiteLed2 = 26;
const int downplatform1or2WhiteLed3 = 27;
const int upplatform1or2RedLed = 28; //This set are Platform 1 direction signals for Preston or Blackburn
const int upplatform1or2YellowLed = 29; //But maybe never went in this direction ???
const int upplatform1or2GreenLed = 30;
const int upplatform1or2WhiteLed1 = 31;
const int upplatform1or2WhiteLed2 = 32;
const int upplatform1or2WhiteLed3 = 33;
const int mainLedDelay = 5000;
const int pushButton1 = 2;
const int pushButton2 = 3;
const int pushButton3 = 4;
const int pushButton4 = 5;
const int pushButton5 = 6;
const int pushButton6 = 40;
const int pushButton7 = 41;
const int pushButton8 = 42;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;
int buttonState7 = 0;
int buttonState8 = 0;
const byte IRSensorPin = 43;
enum States {START,RED,YELLOW,GREEN};
void setup()
{
pinMode (upplatform3RedLed, OUTPUT); //All void setup for Platform 3 Preston or Blackburn
pinMode (upplatform3YellowLed, OUTPUT);
pinMode (upplatform3GreenLed, OUTPUT);
pinMode (upplatform3WhiteLed1, OUTPUT);
pinMode (upplatform3WhiteLed2, OUTPUT);
pinMode (upplatform3WhiteLed3, OUTPUT);
pinMode (upmainRedLed, OUTPUT); //All Void Setup for Up Main for Preston or Blackburn
pinMode (upmainYellowLed, OUTPUT);
pinMode (upmainGreenLed, OUTPUT);
pinMode (upmainWhiteLed1, OUTPUT);
pinMode (upmainWhiteLed2, OUTPUT);
pinMode (upmainWhiteLed3, OUTPUT);
pinMode (downmainRedLed, OUTPUT); //All Void Setup for Down Main to Manchester
pinMode (downmainYellowLed, OUTPUT);
pinMode (downmainGreenLed, OUTPUT);
pinMode (downmainWhiteLed1, OUTPUT);
pinMode (downmainWhiteLed2, OUTPUT);
pinMode (downmainWhiteLed3, OUTPUT);
pinMode (downplatform1or2RedLed, OUTPUT); //All Void Setup for Down Platform 1 or 2 to Manchester
pinMode (downplatform1or2YellowLed, OUTPUT);
pinMode (downplatform1or2GreenLed, OUTPUT);
pinMode (downplatform1or2WhiteLed1, OUTPUT);
pinMode (downplatform1or2WhiteLed2, OUTPUT);
pinMode (downplatform1or2WhiteLed3, OUTPUT);
pinMode (upplatform1or2RedLed, OUTPUT); //All Void Setup for Down Platform 1to Manchester
pinMode (upplatform1or2YellowLed, OUTPUT); // But maybe never used
pinMode (upplatform1or2GreenLed, OUTPUT);
pinMode (upplatform1or2WhiteLed1, OUTPUT);
pinMode (upplatform1or2WhiteLed2, OUTPUT);
pinMode (upplatform1or2WhiteLed3, OUTPUT);
pinMode(pushButton1, INPUT);
pinMode(pushButton2, INPUT);
pinMode(pushButton3, INPUT);
pinMode(pushButton4, INPUT);
pinMode(pushButton5, INPUT);
pinMode(pushButton6, INPUT);
pinMode(pushButton7, INPUT);
pinMode(pushButton8, INPUT);
digitalWrite(upplatform3RedLed, HIGH); //All void setup outputs for Platform 3 Preston or Blackburn
digitalWrite(upplatform3YellowLed, LOW);
digitalWrite(upplatform3GreenLed, LOW);
digitalWrite(upplatform3WhiteLed1, LOW);
digitalWrite(upplatform3WhiteLed2, LOW);
digitalWrite(upplatform3WhiteLed3, LOW);
digitalWrite(upmainRedLed, HIGH); //All Void Setup outputs for Up Main for Preston or Blackburn
digitalWrite(upmainYellowLed, LOW);
digitalWrite(upmainGreenLed, LOW);
digitalWrite(upmainWhiteLed1, LOW);
digitalWrite(upmainWhiteLed2, LOW);
digitalWrite(upmainWhiteLed3, LOW);
digitalWrite(downmainRedLed, HIGH); //This set are Down main direction signals for Manchester
digitalWrite(downmainYellowLed, LOW);
digitalWrite(downmainGreenLed, LOW);
digitalWrite(downplatform1or2RedLed, HIGH); //This set are Platform 1 or 2 direction signals for Manchester
digitalWrite(downplatform1or2YellowLed, LOW);
digitalWrite(downplatform1or2GreenLed, LOW);
digitalWrite(downplatform1or2WhiteLed1, LOW);
digitalWrite(downplatform1or2WhiteLed2, LOW);
digitalWrite(downplatform1or2WhiteLed3, LOW);
}
void loop()
{
routeUpplatform1(); // All Trains Up Via Platform 1 to Blackburn or Preston ( But not used at moment)
}
void routeUpplatform1() // All Trains Up Via Platform 1 to Blackburn or Preston ( But not used at moment)
{
static States state=START;
static unsigned long LastEventTime;
switch (state)
{
case START:
SetRedForUpPlatform1();
state=RED;
break;
case RED:
if(digitalRead(pushButton5)==HIGH)
{
digitalWrite(upplatform3RedLed, LOW);
digitalWrite(upplatform3YellowLed, HIGH);
digitalWrite(upplatform3GreenLed, LOW);
digitalWrite(upplatform3WhiteLed1, HIGH);
digitalWrite(upplatform3WhiteLed2, HIGH);
digitalWrite(upplatform3WhiteLed3, LOW);
LastEventTime=millis();
state=YELLOW;
}
break;
case YELLOW:
if(millis()-LastEventTime > mainLedDelay)
{
digitalWrite(upplatform3RedLed, LOW);
digitalWrite(upplatform3YellowLed, LOW);
digitalWrite(upplatform3GreenLed, HIGH);
digitalWrite(upplatform3WhiteLed1, HIGH);
digitalWrite(upplatform3WhiteLed2, LOW);
digitalWrite(upplatform3WhiteLed3, HIGH);
state=GREEN;
}
break;
case GREEN:
if(digitalRead(IRSensorPin)==HIGH)
{
SetRedForUpPlatform1();
state=RED;
}
break;
}
}
void SetRedForUpPlatform1()
{
digitalWrite(upplatform3RedLed, HIGH);
digitalWrite(upplatform3YellowLed, LOW);
digitalWrite(upplatform3GreenLed, LOW);
digitalWrite(upplatform3WhiteLed1, LOW);
digitalWrite(upplatform3WhiteLed2, LOW);
digitalWrite(upplatform3WhiteLed3, LOW);
}
Compiled, Not tested.
Obviously, you would need to replicate these two functions for each platform. It's not as elegant as UKHeliBob's example, but you may find it easier just to copy and paste and fix up the details of the pins for that platform.
It wouldn't really matter, but I dislike having the state code set leds to the same thing every time, so the leds only get set when transitioning out of a state. That created the need for the start state to allow the initial setting of red and the associated leds.