String modelo = "ânodo comum";
#define botao 2
#define LED_VERDE_CAR 0
#define LED_AMARELO_CAR 1
#define LED_VERMELHO_CAR 3
#define LED_VERDE_PED 4
#define LED_VERMELHO_PED 5
int modo = 0;
bool displaySeteSeg[10][7] = {
{ 1, 1, 1, 1, 0, 1, 1 },
{ 1, 0, 0, 0, 0, 1, 0 },
{ 0, 1, 1, 0, 1, 1, 1 },
{ 1, 0, 1, 0, 1, 1, 1 },
{ 1, 0, 0, 1, 1, 1, 0 },
{ 1, 0, 1, 1, 1, 0, 1 },
{ 1, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 1, 1, 1, 1, 1 }
};
void setup() {
for (int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT);
}
pinMode(botao, INPUT);
attachInterrupt(digitalPinToInterrupt(botao), botaoAcionado, CHANGE);
if (modelo == "ânodo comum") {
for (int i = 7; i <= 13; i++) {
digitalWrite(i, HIGH);
}
}
}
void loop() {
switch (modo) {
case 0:
carros();
break;
case 1:
travessia();
modo = 0;
break;
}
}
void botaoAcionado() {
modo = 1;
}
void carros() {
digitalWrite(LED_VERDE_CAR, HIGH);
digitalWrite(LED_VERMELHO_PED, HIGH);
digitalWrite(LED_VERMELHO_CAR, LOW);
if (modelo == "ânodo comum") {
for (int i = 7; i <= 13; i++) {
digitalWrite(i, HIGH);
}
} else {
for (int i = 7; i <= 13; i++) {
digitalWrite(i, LOW);
}
}
}
void travessia() {
delay(1000);
digitalWrite(LED_VERDE_CAR, LOW);
digitalWrite(LED_AMARELO_CAR, HIGH);
delay(3000);
digitalWrite(LED_AMARELO_CAR, LOW);
digitalWrite(LED_VERMELHO_CAR, HIGH);
digitalWrite(LED_VERDE_PED, HIGH);
digitalWrite(LED_VERMELHO_PED, LOW);
boolean led = HIGH;
for (int contador = 9; contador >= 0; contador--) {
ligaSegmentosDisplay(contador);
if (contador <= 6) {
digitalWrite(LED_VERDE_PED, LOW);
digitalWrite(LED_VERMELHO_PED, led);
led = !led;
}
}
}
void ligaSegmentosDisplay(int digito) {
byte pino = 7;
for (byte contadorSegmentos = 0; contadorSegmentos <= 6; ++contadorSegmentos) {
if (modelo == "ânodo comum") {
digitalWrite(pino, !displaySeteSeg[digito][contadorSegmentos]);
} else {
digitalWrite(pino, displaySeteSeg[digito][contadorSegmentos]);
}
pino++;
}
delay(1000);
}