Or, to avoid the use of typedef, you can use the following:
enum RelayState { RELAY_OFF = HIGH, RELAY_ON = LOW };
enum CrossingZoneState: uint8_t {
CROSSINGZONE_CLEAR = 0, // no train in crossing area, also initialized state
CROSSINGZONE_OCCUPIED = 1, // train detected by the entry sensor
CROSSINGZONE_EXITING = 2 // train detected by the exit sensor, when sensor clears, state= Clear
};
enum CrossingZoneState CheckEntrySensor(uint8_t esp) ;
boolean throwRelayAndCheckStatus(uint8_t relayNumber, enum RelayState relayState) ;
enum CrossingZoneState CheckEntrySensor(uint8_t esp) {
enum CrossingZoneState state ;
//esp, short for entry sensor pin
if (digitalRead(esp) == HIGH)
{
state = CROSSINGZONE_CLEAR;
return state;
}
else if (digitalRead(esp) == LOW)
{
state = CROSSINGZONE_OCCUPIED;
return state;
}
// if the digital read errs, return the current state so it re-runs
return state;
}
boolean throwRelayAndCheckStatus(uint8_t relayNumber, enum RelayState relayState) {
int testInt = 0;
if (relayState == RELAY_OFF)
{
testInt = 1;
}
digitalWrite(relayNumber, relayState);
if (digitalRead(relayNumber) == testInt) {
return true;
};
return false;
}