Semáfaro com Arduino e display 7 segmentos

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:

001 //Este semáfaro vai ficar aberto para carros e fechado para pedestres ate o momento do clique no botão
002  
003 int redCar = 13; //seta a variavel redCar o valor 13 (porta)
004 int yellowCar = 12; //seta a variavel yellowCar o valor 12(porta)
005 int greenCar = 11; //seta a variavel greenCar o valor 11(porta)
006 int redPeople = 9; //seta a variavel redPeople o valor 9(porta)
007 int greenPeople = 8; //seta a variavel greenPeolpe o valor 8(porta)
008 int button= 2; //seta a variavel button o valor 2(porta)
009 int displayA= 7;
010 int displayB= 6;
011 int displayC= 5;
012 int displayD= 4;
013 int displayE= 3;
014 int displayF= 10;
015  
016 int crossTime = 5000; // tempo de travessia
017 void setup(){
018  pinMode(redCar,OUTPUT); //seta saida
019  pinMode(yellowCar,OUTPUT); //seta saida
020  pinMode(greenCar,OUTPUT); //seta saida
021  pinMode(redPeople,OUTPUT); //seta saida
022  pinMode(greenPeople,OUTPUT); //seta saida
023  
024  pinMode(displayA,OUTPUT); //seta saida
025  pinMode(displayB,OUTPUT); //seta saida
026  pinMode(displayC,OUTPUT); //seta saida
027  pinMode(displayD,OUTPUT); //seta saida
028  pinMode(displayE,OUTPUT); //seta saida
029  pinMode(displayF,OUTPUT); //seta saida
030  
031  pinMode(button,INPUT); //seta entrada (recebe valor)
032  digitalWrite(greenCar, HIGH); //começa ligando led verde carro
033  digitalWrite(redPeople, HIGH); //começa ligando led vermelho pessoa
034 }
035  
036 void loop(){
037  int state = digitalRead(button); /*verifica se o botao foi pressionado e se faz mais de 5 seg desde a ultima vez*/
038  if (state == HIGH) { //compara o state do button se for HIGH(apertado ele vai chamar changeLights(); em 1000(1 segundo)
039  //se for HIGH == HIGH ele chama o changeLights
040  delay(100); //
041  changeLights();
042  }
043 }
044 void changeLights(){
045  digitalWrite(greenCar, LOW); //apaga carGreen
046  digitalWrite(yellowCar, HIGH); //acende carYellow
047  delay(4000);
048  digitalWrite(yellowCar, LOW); //apaga carYellow
049  digitalWrite(redCar, HIGH); //acende carRed
050  digitalWrite(redPeople, LOW); //apaga pedRed
051  digitalWrite(greenPeople, HIGH); //acende pedGreen
052  delay(crossTime); //chama a variavel crossTime que voce setou no inicio do codigo
053  
054 //aqui vai começar a piscar o LED verde avisando que esta acabando o tempo de atravessar
055  
056 digitalWrite(greenPeople, HIGH);
057  digitalWrite(displayA, HIGH); //esta sequencia = 5
058  digitalWrite(displayB, HIGH);
059  digitalWrite(displayC, LOW);
060  digitalWrite(displayD, HIGH);
061  digitalWrite(displayE, LOW);
062  digitalWrite(displayF, HIGH);
063  delay(1000);
064  digitalWrite(greenPeople, HIGH);
065  digitalWrite(displayA, HIGH); //esta sequencia = 4
066  digitalWrite(displayB, HIGH);
067  digitalWrite(displayC, HIGH);
068  digitalWrite(displayD, HIGH);
069  digitalWrite(displayE, LOW);
070  digitalWrite(displayF, LOW);
071  delay(1000);
072  digitalWrite(greenPeople, HIGH);
073  digitalWrite(displayA, LOW); //esta sequencia = 3
074  digitalWrite(displayB, HIGH);
075  digitalWrite(displayC, HIGH);
076  digitalWrite(displayD, HIGH);
077  digitalWrite(displayE, LOW);
078  digitalWrite(displayF, HIGH);
079  delay(1000);
080  digitalWrite(greenPeople, HIGH);
081  digitalWrite(displayA, LOW); //esta sequencia = 2
082  digitalWrite(displayB, LOW);
083  digitalWrite(displayC, HIGH);
084  digitalWrite(displayD, HIGH);
085  digitalWrite(displayE, HIGH);
086  digitalWrite(displayF, HIGH);
087  delay(1000);
088  digitalWrite(greenPeople, HIGH);
089  digitalWrite(displayA, LOW); //esta sequencia = 1
090  digitalWrite(displayB, HIGH);
091  digitalWrite(displayC, HIGH);
092  digitalWrite(displayD, LOW);
093  digitalWrite(displayE, LOW);
094  digitalWrite(displayF, LOW);
095  delay(1000);
096  digitalWrite(greenPeople, LOW);
097  digitalWrite(redPeople, HIGH);
098  digitalWrite(displayA, LOW); //esta sequencia = desligado
099  digitalWrite(displayB, LOW);
100  digitalWrite(displayC, LOW);
101  digitalWrite(displayD, LOW);
102  digitalWrite(displayE, LOW);
103  digitalWrite(displayF, LOW);
104  delay(250);
105  
106 //aqui começa o estado inicial
107  digitalWrite(redPeople, HIGH); //acende led vermelho pessoa
108  digitalWrite(redCar, LOW); //apaga led vermelho pessoa
109  digitalWrite(greenCar, HIGH); //acende led verde carro
110  
111 }

Resultado final:

Video:

Post original no blog: http://meetarduino.wordpress.com

Exibições: 24703

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Mateus Fernandes Menezes em 18 dezembro 2017 às 16:31

João Pereira , esse erro que está aparecendo e pelo fato de você ter copiado o código original com a numeração das linhas de código. Se você tirar a numeração que vai de 001 a 111 o código funciona normalmente. Mas para título de curiosidade esse erro que você encontrou ( sketch_feb03a:35: error: expected unqualified-id before numeric constant ) é referente a números representados de forma incorreta referente a base octal.

Comentário de João Pereira em 3 fevereiro 2014 às 13:20

sketch_feb03a:35: error: expected unqualified-id before numeric constant

porque me está a aparecer este erro?

Comentário de MARCIO RICARDO COSTA DE SOUZA em 21 julho 2013 às 1:30

Muito Bom !!!!!!!!

Comentário de Eduardo castellani em 29 novembro 2012 às 15:21

Bem interessante esse Fritzing, por gerar o esquema e a placa, vou ver uma video aulas dele. abraço

Comentário de Eduardo castellani em 20 junho 2012 às 20:52

OBRIGADO PELA RESPOSTA, ABRAÇO

Comentário de Eduardo castellani em 20 junho 2012 às 20:32

Mas pra mim que sou iniciante, e bota iniciante nisso, seria mais legal a montagem passo a passo.

Comentário de Eduardo castellani em 20 junho 2012 às 20:31

Legal, gostei, parabéns

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço