Ir ao conteúdo

Posts recomendados

Postado

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
  • Membro VIP
Postado

: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
Postado
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
  • Membro VIP
Postado
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
Postado

@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
  • Membro VIP
Postado

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!