byte button_ped_Pin = 13;
byte pedButtonState;
byte button_bike_Pin = 2;
byte bikeButtonState;
byte led1Pin = 10;
byte led2Pin = 4;
unsigned int delay_ped = 4000;
unsigned int delay_to_processing_ped = 5000;
unsigned int processing_time_ped = 3000;
unsigned int delay_bike = 5000;
unsigned int delay_to_processing_bike = 6000;
unsigned int processing_time_bike = 3000;
unsigned long pedTimer;
unsigned long bikeTimer;
bool lastPedButtonState = HIGH;
bool lastBikeButtonState = HIGH;
enum State {
IDLE,
WAITING,
PROCESSING
};
State currentPedState = IDLE;
State currentBikeState = IDLE;
void setup() {
pinMode(button_ped_Pin, INPUT_PULLUP);
pinMode(button_bike_Pin, INPUT_PULLUP);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
Serial.begin(9600);
Serial.println("RW");
}
void loop() {
pedButtonState = digitalRead(button_ped_Pin);
delay(200);
bikeButtonState = digitalRead(button_bike_Pin);
delay(200);
switch (currentPedState) {
case IDLE:
if (pedButtonState != lastPedButtonState) {
if (pedButtonState == LOW) {
Serial.println("Pedestrian request registered");
pedTimer = millis();
currentPedState = WAITING;
};
}
lastPedButtonState = pedButtonState;
break;
case WAITING:
if (millis() - pedTimer >= delay_to_processing_ped) {
Serial.println("Pedestrian processing");
digitalWrite(led1Pin, HIGH);
pedTimer = millis();
currentPedState = PROCESSING;
}
break;
case PROCESSING:
if (millis() - pedTimer >= processing_time_ped) {
Serial.println("Pedestrian ending");
digitalWrite(led1Pin, LOW);
currentPedState = IDLE;
}
break;
}
switch (currentBikeState) {
case IDLE:
if ( bikeButtonState != lastBikeButtonState) {
if (bikeButtonState == LOW) {
Serial.println("Biker request registered");
bikeTimer = millis();
currentBikeState = WAITING;
};
}
lastBikeButtonState = bikeButtonState;
break;
case WAITING:
if (millis() - bikeTimer >= delay_to_processing_bike) {
Serial.println("Biker processing");
digitalWrite(led2Pin, HIGH);
bikeTimer = millis();
currentBikeState = PROCESSING;
}
break;
case PROCESSING:
if (millis() - bikeTimer >= processing_time_bike) {
Serial.println("Bike ending");
digitalWrite(led2Pin, LOW);
currentBikeState = IDLE;
}
break;
}
}