Ir ao conteúdo
  • Cadastre-se
Hiago Martins

Arduino Programação display 7 segmentos

Recommended Posts

Fala galera.

 

Eu fiz uma programação simples para fazer um display 7 segmentos contar de 0 até 9 de forma crescente. Agora eu quero fazer com que, ao chegar ao 9 a contagem passe a ser decrescente. Alguém pode me dar uma mão?

 

Segue o código:

 

const int a = 2;
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6; 
const int f = 7;
const int g = 8;

int x=0;
int y=0;

void setup() {
  
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {

  if(x==0)
  {
    //0
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g, LOW);
    
    
  
  }

   if(x==1)
  {
    //1
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
  }

  if(x==2)
  {
    //2
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,LOW);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
   
  
  }

  if(x==3)
  {
    //3
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
   
  }

  if(x==4)
  {
    //4
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
   
  }

  if(x==5)
  {
    //5
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
  
  }
  
  if(x==6)
  {
    //6
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
  
  }

  if(x==7)
  {
    //7
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
  
  }

   if(x==8)
  {
    //8
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
  
  }

 if(x==9)
  {
    //9
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
   
  }
  
 x++;
  
  delay(1000);
}
 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

:tw_angry::mad::angry:  humpf!!

 

Tente algo como...

 

9 horas atrás, Hiago Martins disse:

 if(x==9)
  {
    //9
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
   y^=1;
  }
if (~(y&1))  x++;

else x--;

Se funcionar, me explique o porquê deu certo. Se não, nem vem que não tem. Não vou com a cara do arduíno mesmo. Alguém da 'galera' :mad: dele e sua pode ajudar. ^_^

Obs: vai dar um bug quando for menor que zero. Dica: faça algo assim quando x=0. Pense... corrija... melhore... melhore-se

abç

 

:tw_angry::mad::angry:

 

  • Curtir 1
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
45 minutos atrás, Isadora Ferraz disse:

y^=1;
  }
if (~(y&1))  x++;

else x--;

 

@Isadora Ferraz ,

 

É por causa desse uso de símbolos malucos em vez de nome das operações que eu desistí de entender C .... e é a mesma coisa com a linguagem do Arduíno. Eu sei o que você fez intuitivamente, mas juro que não consigo compreender kkkkkkk

 

Mas fazer o quê se o resto do mundo adora isso ?

 

Acho que a idade complica bastante ....

 

Paulo

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, aphawk disse:

Acho que a idade complica bastante ....

tmj.

Mesmo assim tentemos com uma machadadinha na sua cabeça pra ver se entra alguma coisa

 

  • y^=1 ... o mesmo que y=y^00000001 => inverte só o bit0 de y. O operador ^ é "ou exclusivo". Ou seja, se iguais... 1e1 ou 0e0 dá 0. Se diferentes 1e0 ou 0e1 dá 1. Faz isso a cada passada pelo if.

 

... de dentro pra fora...

  • if (~(y&1))... y&1 ... o mesmo que y=y&00000001... o & é "and" pra limpar os bits que não interessam ou seja o resultado só é 1 quando bit0 de y for 1.

 

  • ~ é not ou "inverta" ou seja se o resultado for 0 ele inverte pra 1. Também pode ser ! que é "not" também

 

  • if.. else ... se for verdadeiro... faça isso, se não... aquilo

 

Agora pra você pirar o cabeção...

y ? x-- : x++;  //faz a função do if else

Entrou? Doeu? kk

 

Ok.. foi semi inútil pra você mas pode não ser totalmente pralguém do futuro. E me ajudou a descarregar uma raivinha :angry:

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Isadora Ferraz ,

 

Nossa mesmo com a machadada não entrou nada ..... que baita confusão simbólica.... pelo menos me convenceu de uma vez que eu nunca vou entender esse troço de jeito nenhum ! Não entendo nem com as suas explicações !!!!!

 

Mas de uma certa maneira, diferente da sua sugestão implícita ( kkk ) , doeu pois percebi que tá chegando a hora de largar a programação, pois algo tão simples para você me parece uma coisa inexplicável !

 

Prefiro 10.000 vezes o ASM do que essa simbologia maluca !  É .... pode ter descarregado a tua raiva mas me deixou com um pouco dela kkkk !

 

Como disse um sábio ... em um pote cheio já não entra mais nada !

 

Paulo

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Paulão...

concorrente--;

kk

O assembly tem seu lugar sim claro. O problema é que cada mc tem o seu e existem muitos. Já o C serve pra tudo. De fato existem muito menos "instruções" em c do que as "only 35 instructions to learn" do pic p.ex.

Só com as operações matemáticas " * / + - " (fácil de entender né?) e as lógicas " & | ^ ! " (seu bicho de sete cabeças) e a comparação "if"... pronto! 9 instruções e você já faz altos pisca leds bem "profissionais" mesmo!

De fato o c se resume quase todo em "if".... olha p.ex. o fonte do garoto da 'galera' (:angry: olha a raivinha aí kk.)

 

Eu prefiro a sabedoria do 1/2 copo dágua...

 

abç

  • Curtir 1
  • Haha 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×