Semáforos sinalizados por LEDs
e Display de 7 segmentos

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:

Arduino Uno

Cabo USB A para B

Protoboard 830

Resistor 330Ω

Potenciômetro 10KΩ

Chave Tactil

Display de 7 segmentos

LED Vermelho

LED Amarelo

LED Verde

Alguns Jumpers

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   

}