#include <TimerOne.h>

const int pinoLedVermelho = 2;
const int pinoLedVerde = 3;
const int pinoLedAmarelo = 4;

const long intervaloVermelho = 4000;     
const long intervaloVerde = 20000;      
const long intervaloAmarelo = 40000;    

int estadoLedVermelho = 0;
int estadoLedVerde = 0;
int estadoLedAmarelo = 0;

void setup() {
 
  pinMode(pinoLedVermelho, OUTPUT);
  pinMode(pinoLedVerde, OUTPUT);
  pinMode(pinoLedAmarelo, OUTPUT);

  Timer1.initialize(1000000); 
  Timer1.attachInterrupt(timerIsr);
}

void loop() {
}

void timerIsr() {
  if (millis() % intervaloVermelho < (intervaloVermelho /2)) {
    estadoLedVermelho = 1;
  } else {
    estadoLedVermelho = 0;
  }
  digitalWrite(pinoLedVermelho, estadoLedVermelho);

  if (millis() % intervaloVerde < (intervaloVerde /2)) {
    estadoLedVerde = 1; 
  } else {
    estadoLedVerde = 0; 
  }
  digitalWrite(pinoLedVerde, estadoLedVerde);

  if (millis() % intervaloAmarelo < (intervaloAmarelo / 2)) {
    estadoLedAmarelo = 1; 
  } else {
    estadoLedAmarelo = 0; 
  }
  digitalWrite(pinoLedAmarelo, estadoLedAmarelo);
}