#define GREEN_VEHICLE 25 //Pino 25 para verde do semaforo dos veiculos
#define YELLOW_VEHICLE 26 //Pino 26 para amarelo do semaforo dos veiculos
#define RED_VEHICLE 27 //Pino 27 para vermelho do semaforo dos veiculos
#define GREEN_PEOPLE 22 //Pino 22 para verde do semaforo dos pedestres
#define RED_PEOPLE 23 //Pino 23 para vermelho do semaforo dos pedestres
#define BUTTON_PIN 34 //Pino 13 para o pedestre pedir passagem.
int buttonState = 0;
int lastButtonState;
float hasRequestPeople = false;
const int AttentionCars = 1;
const int AttentionPeople = 2;
const int PassPeople = 3;
const int PassCar = 4;
int state = PassCar;
void setup() {
Serial.begin(115200);
pinMode(GREEN_VEHICLE, OUTPUT);
pinMode(YELLOW_VEHICLE, OUTPUT);
pinMode(RED_VEHICLE, OUTPUT);
pinMode(GREEN_PEOPLE, OUTPUT);
pinMode(RED_PEOPLE, OUTPUT);
lastButtonState = digitalRead(BUTTON_PIN);
turnCar(true);
Serial.println("CARROS = verde e PEDESTRES = vermelho;");
}
void turnCar(boolean flag) {
if (flag) {
digitalWrite(GREEN_VEHICLE, HIGH);
digitalWrite(YELLOW_VEHICLE, LOW);
digitalWrite(RED_VEHICLE, LOW);
digitalWrite(GREEN_PEOPLE, LOW);
digitalWrite(RED_PEOPLE, HIGH);
} else {
digitalWrite(GREEN_VEHICLE, LOW);
digitalWrite(YELLOW_VEHICLE, LOW);
digitalWrite(RED_VEHICLE, HIGH);
digitalWrite(GREEN_PEOPLE, HIGH);
digitalWrite(RED_PEOPLE, LOW);
}
}
void mealy(){
switch (state) {
case PassCar:
turnCar(true);
if (hasRequestPeople) state = AttentionCars;
break;
case AttentionCars:
digitalWrite(GREEN_VEHICLE, LOW);
digitalWrite(YELLOW_VEHICLE, HIGH);
digitalWrite(RED_VEHICLE, LOW);
Serial.println("CARROS = amarelo.");
delay(2000);
state = PassPeople;
break;
case PassPeople:
turnCar(false);
Serial.println("CARROS = vermelho e PEDESTRES = verde;");
delay(3000);
for (int i = 0; i < 10; ++i) {
delay(100);
digitalWrite(GREEN_PEOPLE, i%2 ? LOW: HIGH);
}
hasRequestPeople=false;
Serial.println("CARROS = verde e PEDESTRES = vermelho;");
state = PassCar;
break;
}
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (lastButtonState != buttonState) { // state changed
delay(100); // debounce time
if (buttonState == LOW){
hasRequestPeople = true;
}
lastButtonState = buttonState;
}
mealy();
}