/*
source:
https://wokwi.com/projects/378661442296684545
*/
#define led_VerdeP_Pin 9
#define led_VermelhoP_Pin 11
#define led_VerdeC_Pin 6
#define led_AmareloC_Pin 4
#define led_VermelhoC_Pin 13
//#define switchPin 2
const byte switchPin = 2;
#define Sprintln(a) (Serial.println(a))
#define Sprint(a) (Serial.print(a))
volatile int state = LOW;
const long interval = 3000;
unsigned long previousMillis = 0;
unsigned long currentMillis =0;
unsigned long Timer_T1 = 500;
unsigned long last_time_1 = 0;
void setup() {
pinMode(led_VerdeP_Pin,OUTPUT); //declare LED as output
pinMode(led_VermelhoP_Pin,OUTPUT); //declare LED as output
//pinMode(switchPin,INPUT_PULLUP); //declare pushbutton as input
pinMode(led_VerdeC_Pin,OUTPUT); //declare LED as output
pinMode(led_AmareloC_Pin,OUTPUT); //declare pushbutton as input
pinMode(led_VermelhoC_Pin,OUTPUT); //declare LED as output
Serial.begin(115200); //Start serial debuging
pinMode(switchPin, INPUT_PULLUP); //Set Interrupt pin
attachInterrupt(digitalPinToInterrupt(switchPin), semaforo, FALLING); //Attach Interrupt(FALLING/RISING)
}
void loop() {
if(state==0){
digitalWrite(led_VermelhoP_Pin,HIGH);
digitalWrite(led_VerdeC_Pin,HIGH);
digitalWrite(led_VerdeP_Pin,LOW);
digitalWrite(led_AmareloC_Pin,LOW);
digitalWrite(led_VermelhoC_Pin,LOW);
}
else if(state==1){
delay(1000);
digitalWrite(led_AmareloC_Pin,HIGH);
digitalWrite(led_VerdeC_Pin,LOW);
delay(2000);
digitalWrite(led_AmareloC_Pin,LOW);
digitalWrite(led_VermelhoC_Pin,HIGH);
digitalWrite(led_VermelhoP_Pin,LOW);
digitalWrite(led_VerdeP_Pin,HIGH);
delay(10000);
currentMillis=millis();
previousMillis=currentMillis;
while( (currentMillis-previousMillis<interval)){
digitalWrite(led_VerdeP_Pin,HIGH); //turn LED ON
delay(500);
digitalWrite(led_VerdeP_Pin,LOW); //turn LED OFF
delay(500);
currentMillis = millis();
}
delay(3000);
digitalWrite(led_VerdeP_Pin,LOW);
digitalWrite(led_VermelhoP_Pin,HIGH);
delay(1000);
digitalWrite(led_VermelhoC_Pin,LOW);
digitalWrite(led_VerdeC_Pin,HIGH);
state=2;
Sprint("8");
}
Sprint("state : ");
Sprintln(state);
delay(1000);
}
void semaforo()
{
if((millis()-last_time_1) >= Timer_T1) //Call timer interrupt millis() for check event time 250 mS
{
last_time_1 = millis();
//state ^= 1; //Invest variable stat
state=1;
Sprintln("semaforo");
}
}