int LedVerde = 12;
int LedAmarelo = 11;
int LedVermelho = 10;
int Verde = 9;
int Vermelho = 8;
int BotaoV = 3;
int BotaoP = 2;
const unsigned long tempodequebra = 3000;
volatile bool vAtiv = false;
volatile bool pAtiv = false;
volatile bool pAtivo = false;
volatile bool vAtivo = false;
volatile bool looping = true;
void setup() {
pinMode(LedVerde, OUTPUT);
pinMode(LedAmarelo, OUTPUT);
pinMode(LedVermelho, OUTPUT);
pinMode(Verde, OUTPUT);
pinMode(Vermelho, OUTPUT);
pinMode(BotaoP, INPUT_PULLUP);
pinMode(BotaoV, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BotaoP),loop_Botaoacionadop, CHANGE);
attachInterrupt(digitalPinToInterrupt(BotaoV),Botaoacionadov, CHANGE);
estadozero();
}
void estadozero() {
digitalWrite(Verde, LOW);
digitalWrite(Vermelho, LOW);
digitalWrite(LedVerde, LOW);
digitalWrite(LedAmarelo, LOW);
digitalWrite(LedVermelho, LOW);
delay(100);
loopdosemaforo();
}
void loop() {
}
void loopdosemaforo() {
if (looping == true || vAtiv == true) {
digitalWrite(Verde, LOW);
digitalWrite(Vermelho, HIGH);
digitalWrite(LedVerde, HIGH);
digitalWrite(LedAmarelo, LOW);
digitalWrite(LedVermelho, LOW);
delay(5000);
digitalWrite(LedVerde, LOW);
digitalWrite(Verde, LOW);
digitalWrite(LedAmarelo, HIGH);
digitalWrite(LedVermelho, LOW);
digitalWrite(Vermelho, HIGH);
delay(2500);
digitalWrite(LedVerde, LOW);
digitalWrite(LedAmarelo, LOW);
digitalWrite(LedVermelho, HIGH);
digitalWrite(Verde, HIGH);
digitalWrite(Vermelho, LOW);
delay(5000);
estadozero();
}
}
void loop_Botaoacionadop( ) {
pAtiv = true;
pAtivo = digitalRead(BotaoP)== LOW;
if (pAtivo == true ) {
digitalWrite(Verde, LOW);
digitalWrite(Vermelho, HIGH);
digitalWrite(LedVerde, LOW);
digitalWrite(LedAmarelo, HIGH);
digitalWrite(LedVermelho, LOW);
delay(105000);
digitalWrite(Verde, HIGH);
digitalWrite(Vermelho, LOW);
digitalWrite(LedVerde, LOW);
digitalWrite(LedAmarelo, LOW);
digitalWrite(LedVermelho, HIGH);
pAtivo = true;
}
if( vAtivo = digitalRead(BotaoV) == LOW ){
pAtiv = false;
pAtivo = false;
}
else{
loop_Botaoacionadop();
}
}
void Botaoacionadov() {
vAtivo = digitalRead(BotaoV) == LOW ;
pAtiv= false;
pAtivo = false;
if (vAtivo == true)
{
digitalWrite(Verde, LOW);
digitalWrite(Vermelho, HIGH);
digitalWrite(LedVermelho, LOW);
digitalWrite(LedAmarelo, LOW);
digitalWrite(LedVerde, HIGH);
vAtivo = true;
pAtivo = false;
looping = true;
}
unsigned long tempoInicio = millis();
while
(millis() - tempoInicio > tempodequebra) {
delay(1000);
break;
}
}