Semáfaro com Arduino parte 4 (display 7 segmentos)

Semáfaro completo com display para pedestre com tempo.

Bom pessoal seguindo com o projeto o semáfaro vamos voltar para o exemplo de código da parte 2 e fazer algumas modificações.

 

No Fritzing eu usei 2 protoboards, mas não é necessário pois coloquei outra apenas para ficar mais limpa a sketch e conseguir visualizar todas as ligações.

OBS: Como eu estou usando o arduino UNO ele possui apenas 13 portas digitais eu estou fazendo uma ponte e usando a mesma porta para 2 leds do display, mais tarde vou explicar melhor o porque desta gambiarra.

Para este projeto vamos precisar :

-5 Leds – 2 vermelhos, 2 verdes, 1 amarelo

– 11 Resistores de 220 Ohms

– Arduino Uno (se for o Arduino Mega cai melhor para este projeto pois tem mais portas)

– Protoboard

– 1 Display cathode  7 segmantos

Fritzing:

Código:

//Este semáfaro vai ficar aberto para carros e fechado para pedestres ate o momento do clique no botão

int redCar = 13; //seta a variavel redCar o valor 13 (porta)
int yellowCar = 12; //seta a variavel yellowCar o valor 12(porta)
int greenCar = 11; //seta a variavel greenCar o valor 11(porta)
int redPeople = 9; //seta a variavel redPeople o valor 9(porta)
int greenPeople = 8; //seta a variavel greenPeolpe o valor 8(porta)
int button= 2; //seta a variavel button o valor 2(porta)
int displayA= 7;
int displayB= 6;
int displayC= 5;
int displayD= 4;
int displayE= 3;
int displayF= 10;

int crossTime = 5000; // tempo de travessia
void setup(){
 pinMode(redCar,OUTPUT); //seta saida
 pinMode(yellowCar,OUTPUT); //seta saida
 pinMode(greenCar,OUTPUT); //seta saida
 pinMode(redPeople,OUTPUT); //seta saida
 pinMode(greenPeople,OUTPUT); //seta saida

 pinMode(displayA,OUTPUT); //seta saida
 pinMode(displayB,OUTPUT); //seta saida
 pinMode(displayC,OUTPUT); //seta saida
 pinMode(displayD,OUTPUT); //seta saida
 pinMode(displayE,OUTPUT); //seta saida
 pinMode(displayF,OUTPUT); //seta saida

 pinMode(button,INPUT); //seta entrada (recebe valor)
 digitalWrite(greenCar, HIGH); //começa ligando led verde carro
 digitalWrite(redPeople, HIGH); //começa ligando led vermelho pessoa
}

void loop(){
 int state = digitalRead(button); /*verifica se o botao foi pressionado e se faz mais de 5 seg desde a ultima vez*/
 if (state == HIGH) { //compara o state do button se for HIGH(apertado ele vai chamar changeLights(); em 1000(1 segundo)
 //se for HIGH == HIGH ele chama o changeLights
 delay(100); //
 changeLights();
 }
}
void changeLights(){
 digitalWrite(greenCar, LOW); //apaga carGreen
 digitalWrite(yellowCar, HIGH); //acende carYellow
 delay(4000);
 digitalWrite(yellowCar, LOW); //apaga carYellow
 digitalWrite(redCar, HIGH); //acende carRed
 digitalWrite(redPeople, LOW); //apaga pedRed
 digitalWrite(greenPeople, HIGH); //acende pedGreen
 delay(crossTime); //chama a variavel crossTime que voce setou no inicio do codigo

//aqui vai começar a piscar o LED verde avisando que esta acabando o tempo de atravessar

digitalWrite(greenPeople, HIGH);
 digitalWrite(displayA, HIGH); //esta sequencia = 5
 digitalWrite(displayB, HIGH);
 digitalWrite(displayC, LOW);
 digitalWrite(displayD, HIGH);
 digitalWrite(displayE, LOW);
 digitalWrite(displayF, HIGH);
 delay(1000);
 digitalWrite(greenPeople, HIGH);
 digitalWrite(displayA, HIGH); //esta sequencia = 4
 digitalWrite(displayB, HIGH);
 digitalWrite(displayC, HIGH);
 digitalWrite(displayD, HIGH);
 digitalWrite(displayE, LOW);
 digitalWrite(displayF, LOW);
 delay(1000);
 digitalWrite(greenPeople, HIGH);
 digitalWrite(displayA, LOW); //esta sequencia = 3
 digitalWrite(displayB, HIGH);
 digitalWrite(displayC, HIGH);
 digitalWrite(displayD, HIGH);
 digitalWrite(displayE, LOW);
 digitalWrite(displayF, HIGH);
 delay(1000);
 digitalWrite(greenPeople, HIGH);
 digitalWrite(displayA, LOW); //esta sequencia = 2
 digitalWrite(displayB, LOW);
 digitalWrite(displayC, HIGH);
 digitalWrite(displayD, HIGH);
 digitalWrite(displayE, HIGH);
 digitalWrite(displayF, HIGH);
 delay(1000);
 digitalWrite(greenPeople, HIGH);
 digitalWrite(displayA, LOW); //esta sequencia = 1
 digitalWrite(displayB, HIGH);
 digitalWrite(displayC, HIGH);
 digitalWrite(displayD, LOW);
 digitalWrite(displayE, LOW);
 digitalWrite(displayF, LOW);
 delay(1000);
 digitalWrite(greenPeople, LOW);
 digitalWrite(redPeople, HIGH);
 digitalWrite(displayA, LOW); //esta sequencia = desligado
 digitalWrite(displayB, LOW);
 digitalWrite(displayC, LOW);
 digitalWrite(displayD, LOW);
 digitalWrite(displayE, LOW);
 digitalWrite(displayF, LOW);
 delay(250);

//aqui começa o estado inicial
 digitalWrite(redPeople, HIGH); //acende led vermelho pessoa
 digitalWrite(redCar, LOW); //apaga led vermelho pessoa
 digitalWrite(greenCar, HIGH); //acende led verde carro

}

Resultado final:

Video:

Anúncios
Esse post foi publicado em Arduino e marcado , , , . Guardar link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s