Com esse exemplo você simulará o funcionamento de semáforos e também contará com um display de 7 segmentos que fará a contagem regressiva para a troca de estado.
Dificuldade:
Montagem:
Programação:
Material Utilizado:
Display de 7 segmentos
A Montagem
O Sketch
#define carroVERDE A0 //Define carroVERDE como A0
#define carroAMARELO A1 //Define carroAMARELO como A1
#define carroVERMELHO A2 //Define carroVERMELHO como A2
#define pedestreVERDE A4 //Define pedestreVERDE como A3
#define pedestreVERMELHO A5 //Define pedestreVERMELHO como A4
#define A_DISPLAY 4 //Define A_DISPLAY como 2
#define B_DISPLAY 5 //Define B_DISPLAY como 3
#define C_DISPLAY 6 //Define C_DISPLAY como 4
#define D_DISPLAY 7 //Define D_DISPLAY como 5
#define E_DISPLAY 8 //Define E_DISPLAY como 6
#define F_DISPLAY 3 //Define F_DISPLAY como 7
#define G_DISPLAY 2 //Define G_DISPLAY como 8
#define botao A3 //Define o botão como 11
void setup()
{
//Configura os pinos dos semáforos como saída
pinMode(carroVERDE, OUTPUT); //Configura pino 2 como saída
pinMode(carroAMARELO, OUTPUT); //Configura pino 3 como saída
pinMode(carroVERMELHO, OUTPUT); //Configura pino 4 como saída
pinMode(pedestreVERDE, OUTPUT); //Configura pino 11 como saída
pinMode(pedestreVERMELHO, OUTPUT); //Configura pino 12 como saída
//=============================
pinMode(botao, INPUT_PULLUP); //Configura o pino 11 como entrada
//Desliga todos dos semáforos
digitalWrite(carroVERDE, LOW); //Desliga o LED Verde dos carro
digitalWrite(carroAMARELO, LOW); //Desliga o LED Amarelo dos carro
digitalWrite(carroVERMELHO, LOW); //Desliga o LED Vermelho dos carro
digitalWrite(pedestreVERDE, LOW); //Desliga o LED Verde dos pedestre
digitalWrite(pedestreVERMELHO, LOW); //Desliga o LED Verde dos carro
//=================================
//Configura os pinos do display como saída
pinMode(A_DISPLAY, OUTPUT); //Configura pino 2 como saída
pinMode(B_DISPLAY, OUTPUT); //Configura pino 3 como saída
pinMode(B_DISPLAY, OUTPUT); //Configura pino 4 como saída
pinMode(D_DISPLAY, OUTPUT); //Configura pino 11 como saída
pinMode(E_DISPLAY, OUTPUT); //Configura pino 12 como saída
pinMode(F_DISPLAY, OUTPUT); //Configura pino 11 como saída
pinMode(G_DISPLAY, OUTPUT); //Configura pino 12 como saída
//=============================
//Desliga todos os segmentos do display
apaga_segmentos();
//=================================
}
void loop()
{
while(!(digitalRead(botao))) //Enquanto o botao do pedestre não for pressionado
{
digitalWrite(carroVERDE, HIGH); //Liga o LED Verde do carro
digitalWrite(pedestreVERMELHO, HIGH); //Liga o LED Vermelho do pedestre
}
digitalWrite(carroVERDE, LOW); //Apaga o LED Verde do carro
digitalWrite(carroAMARELO,HIGH); //Liga o LED Amarelo do carro
tempo_amarelo(); //Vai para a função de contagem no amarelo
digitalWrite(carroAMARELO, LOW); //Apaga o LED Amarelo do carro
digitalWrite(carroVERMELHO, HIGH); //Liga o LED Vermelho do carro
delay(1000); //Aguarda 1 segundo
digitalWrite(pedestreVERMELHO, LOW); //Apaga o LED Vermelho do pedestre
digitalWrite(pedestreVERDE, HIGH); //Liga o LED Verde do pedestre
tempo_vermelho(); //Vai para função de contagem no vermelho
delay(1000); //Aguarda 1 segundo
digitalWrite(pedestreVERDE, LOW); //Apaga LED Verde do pedestre
digitalWrite(carroVERMELHO, LOW); //Apaga LED Vermelho do pedestre
}
void tempo_vermelho()
{
//Desenha o 9 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
digitalWrite(F_DISPLAY, HIGH); //Liga o segmento F do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 8 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(E_DISPLAY, HIGH); //Liga o segmento E do display
digitalWrite(F_DISPLAY, HIGH); //Liga o segmento F do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 7 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 6 no display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(E_DISPLAY, HIGH); //Liga o segmento E do display
digitalWrite(F_DISPLAY, HIGH); //Liga o segmento F do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 5 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(F_DISPLAY, HIGH); //Liga o segmento F do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 4 no display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
digitalWrite(F_DISPLAY, HIGH); //Liga o segmento F do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
digitalWrite(pedestreVERDE, LOW); //Liga o LED Verde do pedestre
digitalWrite(pedestreVERMELHO, !(digitalRead(pedestreVERMELHO)));//Inverte estado do LED Vermelho do pedestre
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 3 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
digitalWrite(pedestreVERMELHO, !(digitalRead(pedestreVERMELHO))); //Inverte estado do LED Vermelho do pedestre
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 2 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(E_DISPLAY, HIGH); //Liga o segmento E do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=======================
digitalWrite(pedestreVERMELHO, !(digitalRead(pedestreVERMELHO))); //Inverte estado do LED Vermelho do pedestre
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 1 no display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
//======================
digitalWrite(pedestreVERMELHO, !(digitalRead(pedestreVERMELHO))); //Inverte estado do LED Vermelho do pedestre
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
digitalWrite(pedestreVERMELHO, !(digitalRead(pedestreVERMELHO))); //Inverte estado do LED Vermelho do pedestre
}
void tempo_amarelo()
{
//Desenha o 3 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//===================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 2 no display
digitalWrite(A_DISPLAY, HIGH); //Liga o segmento A do display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(D_DISPLAY, HIGH); //Liga o segmento D do display
digitalWrite(E_DISPLAY, HIGH); //Liga o segmento E do display
digitalWrite(G_DISPLAY, HIGH); //Liga o segmento G do display
//=====================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
//Desenha o 1 no display
digitalWrite(B_DISPLAY, HIGH); //Liga o segmento B do display
digitalWrite(C_DISPLAY, HIGH); //Liga o segmento C do display
//=======================
delay(1000); //Aguarda 1 segundo
apaga_segmentos(); //Vai para a função de apagar os segmentos
}
void apaga_segmentos()
{
digitalWrite(A_DISPLAY, LOW); //Desliga o segmento A do display
digitalWrite(B_DISPLAY, LOW); //Desliga o segmento B do display
digitalWrite(C_DISPLAY, LOW); //Desliga o segmento C do display
digitalWrite(D_DISPLAY, LOW); //Desliga o segmento D do display
digitalWrite(E_DISPLAY, LOW); //Desliga o segmento E do display
digitalWrite(F_DISPLAY, LOW); //Desliga o segmento F do display
digitalWrite(G_DISPLAY, LOW); //Desliga o segmento G do display
}