// Definições dos pinos dos LEDs do semáforo A (verde, amarelo, vermelho)
#define led1verd 15 // LED verde do semáforo A no pino 15
#define led1amar 0 // LED amarelo do semáforo A no pino 0
#define led1verm 16 // LED vermelho do semáforo A no pino 16
// Definições dos pinos dos LEDs do semáforo B (verde, amarelo, vermelho)
#define led2verd 5 // LED verde do semáforo B no pino 5
#define led2amar 19 // LED amarelo do semáforo B no pino 19
#define led2verm 21 // LED vermelho do semáforo B no pino 21
// Definições dos pinos dos LEDs do semáforo de pedestre C
#define ledp1verd 18 // LED verde do semáforo C no pino 18
#define ledp1verm 17 // LED vermelho do semáforo C no pino 17
// Definições dos pinos dos LEDs do semáforo de pedestre D
#define ledp2verd 22 // LED verde do semáforo D no pino 22
#define ledp2verm 23 // LED vermelho do semáforo D no pino 23
// Definições dos pinos dos botões
#define S1 27 // Botão de Segurança no pino 27
#define S2 13 // Botão do semáforo C (PRETO) no pino 13
#define S3 12 // Botão do semáforo D (BRANCO) no pino 12
// Funções auxiliares
//------------------------------ SEMÁFOROS ------------------------------
// Liga o LED verde do semáforo 1, e apaga os outros LEDs
void verde1() {
digitalWrite(led1verd, HIGH); // Acende o LED verde do semáforo 1
digitalWrite(led1amar, LOW); // Apaga o LED amarelo do semáforo 1
digitalWrite(led1verm, LOW); // Apaga o LED vermelho do semáforo 1
}
// Liga o LED amarelo do semáforo 1, e apaga os outros LEDs
void amarelo1() {
digitalWrite(led1verd, LOW); // Apaga o LED verde do semáforo 1
digitalWrite(led1amar, HIGH); // Acende o LED amarelo do semáforo 1
digitalWrite(led1verm, LOW); // Apaga o LED vermelho do semáforo 1
}
// Liga o LED vermelho do semáforo 1, e apaga os outros LEDs
void vermelho1() {
digitalWrite(led1verd, LOW); // Apaga o LED verde do semáforo 1
digitalWrite(led1amar, LOW); // Apaga o LED amarelo do semáforo 1
digitalWrite(led1verm, HIGH); // Acende o LED vermelho do semáforo 1
}
// Liga o LED verde do semáforo 2, e apaga os outros LEDs
void verde2() {
digitalWrite(led2verd, HIGH); // Acende o LED verde do semáforo 2
digitalWrite(led2amar, LOW); // Apaga o LED amarelo do semáforo 2
digitalWrite(led2verm, LOW); // Apaga o LED vermelho do semáforo 2
}
// Liga o LED amarelo do semáforo 2, e apaga os outros LEDs
void amarelo2() {
digitalWrite(led2verd, LOW); // Apaga o LED verde do semáforo 2
digitalWrite(led2amar, HIGH); // Acende o LED amarelo do semáforo 2
digitalWrite(led2verm, LOW); // Apaga o LED vermelho do semáforo 2
}
// Liga o LED vermelho do semáforo 2, e apaga os outros LEDs
void vermelho2() {
digitalWrite(led2verd, LOW); // Apaga o LED verde do semáforo 2
digitalWrite(led2amar, LOW); // Apaga o LED amarelo do semáforo 2
digitalWrite(led2verm, HIGH); // Acende o LED vermelho do semáforo 2
}
//------------------------------ PEDESTRES ------------------------------
// Liga o LED verde do semáforo de pedestre C, e apaga os outros LEDs
void verdeP1() {
digitalWrite(ledp1verd, HIGH); // Acende o LED verde do semáforo 1
digitalWrite(ledp1verm, LOW); // Apaga o LED vermelho do semáforo 1
}
// Liga o LED vermelho do semáforo de pedestre C, e apaga os outros LEDs
void vermelhoP1() {
digitalWrite(ledp1verd, LOW); // Apaga o LED verde do semáforo 1
digitalWrite(ledp1verm, HIGH); // Acende o LED vermelho do semáforo 1
}
// Liga o LED verde do semáforo de pedestre D, e apaga os outros LEDs
void verdeP2() {
digitalWrite(ledp2verd, HIGH); // Acende o LED verde do semáforo 2
digitalWrite(ledp2verm, LOW); // Apaga o LED vermelho do semáforo 2
}
// Liga o LED vermelho do semáforo de pedestre D, e apaga os outros LEDs
void vermelhoP2() {
digitalWrite(ledp2verd, LOW); // Apaga o LED verde do semáforo 2
digitalWrite(ledp2verm, HIGH); // Acende o LED vermelho do semáforo 2
}
//------------------------------ FUNÇÕES ------------------------------
// Estado de segurança, com A e B amarelos
void seguranca(){
// Desliga todos os LEDs verdes e vermelhos dos semáforos A e B
while(true){
digitalWrite(led1verd, LOW);
digitalWrite(led1amar, HIGH);
digitalWrite(led1verm, LOW);
digitalWrite(led2verd, LOW);
digitalWrite(led2amar, HIGH);
digitalWrite(led2verm, LOW);
//Desliga os semáforos dos pedestres C e D
digitalWrite(ledp1verd, LOW);
digitalWrite(ledp1verm, LOW);
digitalWrite(ledp2verd, LOW);
digitalWrite(ledp2verm, LOW);
if(digitalRead(S1) == HIGH){
delay(1);
break;
}
}
}
// Semáforo de Pedestre C fica verde
void botaopreto(){
delay(4000); // Aguarda 4 segundos
vermelho1();
verdeP1();
verde2();
vermelhoP2();
delay(5000); // Aguarda 5 segundos
}
// Semáforo de Pedestre D fica verde
void botaobranco(){
delay(4000); // Aguarda 4 segundos
vermelho2();
verdeP2();
verde1();
vermelhoP1();
delay(5000); // Aguarda 5 segundos
}
// Função temporizadora
bool estadoSeguranca = false;
void tempo(int N) {
int botao1 = digitalRead(S1);
int botao2 = digitalRead(S2);
int botao3 = digitalRead(S3);
for(int i = 1; i <= N; i++) { // Executa um loop 'for' para contar o tempo
if (!botao1) {
Serial.println("Apertou botao 1");
estadoSeguranca = !estadoSeguranca;
delay(300);
}
if (estadoSeguranca) {
seguranca();
} else if (!botao2) {
botaopreto();
} else if (!botao3) {
botaobranco();
}
else delay(1); // Aguarda 1 milissegundo
}
}
void setup() {
// Define pinos como saídas para os LEDs do semáforo 1 (A)
pinMode(led1verd, OUTPUT);
pinMode(led1amar, OUTPUT);
pinMode(led1verm, OUTPUT);
// Define pinos como saídas para os LEDs do semáforo 2 (B)
pinMode(led2verd, OUTPUT);
pinMode(led2amar, OUTPUT);
pinMode(led2verm, OUTPUT);
// Define pinos como saída para os LEDs do semáforo de Pedestre 1 (C)
pinMode(ledp1verd, OUTPUT);
pinMode(ledp1verm, OUTPUT);
// Define pinos como saída para os LEDs do semáforo de Pedestre 2 (D)
pinMode(ledp2verd, OUTPUT);
pinMode(ledp2verm, OUTPUT);
// Define pinos dos botões como entradas
pinMode(S1, INPUT_PULLDOWN);
pinMode(S2, INPUT_PULLDOWN);
pinMode(S3, INPUT_PULLDOWN);
}
void loop() {
// Inicia um loop infinito para o ciclo dos semáforos
verde1(); // Liga o verde do semáforo 1
vermelho2(); // Liga o vermelho do semáforo 2
vermelhoP1(); // Liga o vermelho no semáforo de Pedestre 1
verdeP2(); // Liga o verde do semáforo de Pedestre 2
tempo(8000); // Espera 8 segundos
amarelo1(); // Liga o amarelo do semáforo 1
vermelho2(); // Liga o vermelho do semáforo 2
tempo(2000); // Espera 2 segundos
vermelho1(); // Liga o vermelho do semáforo 1
verde2(); // Liga o verde do semáforo 2
verdeP1(); // Liga o verde no semáforo de Pedestre 1
vermelhoP2(); // Liga o vermelho do semáforo de Pedestre 2
tempo(8000); // Espera 8 segundos
vermelho1(); // Liga o vermelho do semáforo 1
amarelo2(); // Liga o amarelo do semáforo 2
tempo(2000); // Espera 2 segundos
}