• Welcome to LusoRobótica - Robótica em Português.
 

[Arduino] Display 7 Segmentos - Básico

Started by joaoamaral, 13 de December de 2008, 00:14

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

joaoamaral

Olá,

Uma das coisas mais simples e divertidas que podem fazer após terem aprendido a "brincar" com leds e a arduino é controlar um display de 7 segmentos.

Um display de 7 segmentos é basicamente 7 leds em forma de 8.



Existem 2 tipos os que têm o Anodo comum a todos os leds e os que têm o Catodo comum a todos os leds.
Eu utilizei um com o cátodo comum, comprado na Dimofel por 1,29€.

Código:
/*
   Teste de um único Display de 7 Segmentos com um ponto decimal ligado à arduino
   desde o pin 5 ao 12. Nesta animação é ligado cada um deles até estarem todos ligados
   e após 1 segundo desligam-se todos 1 de cada vez.
   
*/

int b=5, a=6, f=7, g=8, dp=9, c=10, d=11, e=12;
int pins[8] = {b, a, f, g, dp, c, d, e};


void setup() {
  Serial.begin(9600);
  for (int i = 0; i == 7; i++) {
    pinMode(pins[i], OUTPUT);
  }
 
}

void loop() {
 
  for(int i = 0; i <8 7; i++) {
    digitalWrite(pins[i], HIGH);
    delay(250);

  }
 
  delay(1000);
 
  for(int i = 0; i <8 7; i++) {
    digitalWrite(pins[i], LOW);
    delay(250);

  }
 
}

Uma imagem do projecto pode ser vista aqui:
http://flickr.com/photos/luxifer/3103748664/

Referências:
http://en.wikipedia.org/wiki/Seven-segment_display
http://en.wikipedia.org/wiki/Seven-segment_display_character_representations
http://www.dnatechindia.com/index.php/Tutorials/8051-Tutorial/7-Seg-Interfacing.html

Dúvidas e sugestões são sempre bem vindas. :)
João Amaral
Twitter: @joaoamaral | Skype: joaoamaral

TigPT

Sim senhor, muito bom, realojei a imagem que não estava a dar, e vou meter no index do arduino.

Obrigado por partilhares, bom projecto.

PDI

Eu tentei por esse código mas da-me erro, foi mesmo esse que usas-te, não terás deixado nenhum erro ao passa-lo para aqui.
Alfredo Garcia

C. Ramos

O código tem um erro na linha 22 e 30.

Onde está:

for(int i = 0; i <8 7; i++) {

deve estar:

for(int i = 0; i < 7; i++) {




Tyran

Deve ter sido uma tentativa falhada de um par de <3 ... lolol

Agora a sério, se olharmos à lógica do programa é mesmo isso, descarta-se o 7 e fica o 8, porque <8 => 0-7 pinos que dá 8 pinos (7 segmentos + DP).
Mas o autor que foi ele que fez  ;D

cumpzz

leandrosilva

Quote from: joaoamaral on 13 de December de 2008, 00:14
Olá,

Uma das coisas mais simples e divertidas que podem fazer após terem aprendido a "brincar" com leds e a arduino é controlar um display de 7 segmentos.

Um display de 7 segmentos é basicamente 7 leds em forma de 8.



Existem 2 tipos os que têm o Anodo comum a todos os leds e os que têm o Catodo comum a todos os leds.
Eu utilizei um com o cátodo comum, comprado na Dimofel por 1,29€.

Código:

/*
   Teste de um único Display de 7 Segmentos com um ponto decimal ligado à arduino
   desde o pin 5 ao 12. Nesta animação é ligado cada um deles até estarem todos ligados
   e após 1 segundo desligam-se todos 1 de cada vez.
   
*/

int b=5, a=6, f=7, g=8, dp=9, c=10, d=11, e=12;
int pins[8] = {b, a, f, g, dp, c, d, e};


void setup() {
  Serial.begin(9600);
  for (int i = 0; i == 7; i++) {
    pinMode(pins[i], OUTPUT);
  }
 
}

void loop() {
 
  for(int i = 0; i <8 7; i++) {
    digitalWrite(pins[i], HIGH);
    delay(250);

  }
 
  delay(1000);
 
  for(int i = 0; i <8 7; i++) {
    digitalWrite(pins[i], LOW);
    delay(250);

  }
 
}


Uma imagem do projecto pode ser vista aqui:
http://flickr.com/photos/luxifer/3103748664/

Referências:
http://en.wikipedia.org/wiki/Seven-segment_display
http://en.wikipedia.org/wiki/Seven-segment_display_character_representations
http://www.dnatechindia.com/index.php/Tutorials/8051-Tutorial/7-Seg-Interfacing.html

Dúvidas e sugestões são sempre bem vindas. <img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":)" title="Smile" />
João Amaral

Boas, realmente o codigo aparenta um pequeno erro no ciclo for,
for (int i = 0; i == 7; i++)
deveria estar
for (int i = 0; i <=7; i++)
xD

DFC17

bem pensei que o codigo seria o mesmo para o que queria mas parece que ja e diferente, a explicaçao que dei nao foi a mais correcta, eu queria um codigo que entrasse um impulso da corrente no 2 do arduino e ligasse o 13, depois com outro impulso entrasse na mesma no 2 e desligasse o 13 e ligava o 12, depois com o terceiro impulso desligasse o 12 e ligasse o 11. obrigado

andre_f_carvalho

Quote from: DFC17 on 13 de September de 2010, 20:46
bem pensei que o codigo seria o mesmo para o que queria mas parece que ja e diferente, a explicaçao que dei nao foi a mais correcta, eu queria um codigo que entrasse um impulso da corrente no 2 do arduino e ligasse o 13, depois com outro impulso entrasse na mesma no 2 e desligasse o 13 e ligava o 12, depois com o terceiro impulso desligasse o 12 e ligasse o 11. obrigado

no arduino n sei mas no picaxe poderias contornar isso com memorias, em que se ela estivesse num determinado valor iria ligar a saída pretendida

senso

Isso é basicamente um semáforo mas controlado por um botão em vez de por tempo.
Avr fanboy