Ir ao conteúdo
  • Cadastre-se
marcoshenri

Trocar de tela - Arduino , lcd (16,2)

Recommended Posts

E aí galera, tudo em cima?

Eu estava pensando em fazer o seguinte, utilizar um LCD 16x2 para mostrar informação de RPM  e Velocidade, daí a pessoa através de uma chave ou botão selecionar o que irá ver, por exemplo: quando o nível lógico na chave for 0 aparecerá velocidade e quando for 1 será RPM. No entanto, tá dando mts problemas, alguém pode ajudar?

 

#include <LiquidCrystal.h> // Atualiza a cada 1000 milissegundos. #define REFRESH_TIME 1000 LiquidCrystal lcd(9,8,4,5,6,7);float raio = 1.63;unsigned int velocidade;unsigned long contador;   // Contador de giroslong refresh;unsigned long contador1;unsigned int rotacao; void setup(){pinMode (13, INPUT);pinMode(2, INPUT);attachInterrupt(0, contadorDeVelocidade, RISING);lcd.begin(16,2); contador = 0;refresh = millis();velocidade = 0.0;pinMode (3, INPUT);attachInterrupt (1,rpm,RISING);contador1=0;rotacao=0;} void contadorDeVelocidade(){ contador++; } void rpm(){  contador1++;} void loop (){  if(millis()- refresh >=REFRESH_TIME) {    rotacao=(contador1*60);   refresh=millis();   contador1=0;    lcd.setCursor(0,1);   lcd.clear();   lcd.print(int(rotacao));   lcd.setCursor(6,1);   lcd.print("rpm");     }    if (digitalRead(13)==HIGH ){ if (millis() - refresh  >= REFRESH_TIME){ lcd.clear(); velocidade = (3600*raio*contador)/(millis()-refresh); contador=0; refresh=millis(); lcd.setCursor (0,0); lcd.print("velocidade");  lcd.setCursor(5,1);  lcd.print(int(velocidade));}/*else if (digitalRead(13)==LOW){ if(millis()- refresh >=REFRESH_TIME) {    rotacao=(contador1*60);   refresh=millis();   contador1=0;    lcd.setCursor(0,1);   lcd.clear();   lcd.print(int(rotacao));   lcd.setCursor(6,1);   lcd.print("rpm");     }  }  */  }         }

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Amigo é impressão minha ou você colocou  o código que testa se a chave esta em nivel baixo dentro do IF que testa se a chave esta no nivel alto..

 

Repare que o if(DigitalRead(13)==LOW) esta dentro do laço do if(DigitalRead(13)==HIGH) assim se a chave estiver em "0" nunca vai mostrar nada, tente assim:

if (digitalRead(13)==HIGH ){ if (millis() - refresh  >= REFRESH_TIME){ lcd.clear(); velocidade = (3600*raio*contador)/(millis()-refresh); contador=0; refresh=millis(); lcd.setCursor (0,0); lcd.print("velocidade");  lcd.setCursor(5,1);  lcd.print(int(velocidade));}}          // inseri aqui a chave que fecha o laço que testa se a chave esta no positivoelse if (digitalRead(13)==LOW){ if(millis()- refresh >=REFRESH_TIME) {   rotacao=(contador1*60);   refresh=millis();   contador1=0;   lcd.setCursor(0,1);   lcd.clear();   lcd.print(int(rotacao));   lcd.setCursor(6,1);   lcd.print("rpm"); }}

  a pena mudei a chave, mas como você não deu uma descrição exata do problema que encontrou, não sei se vai funcionar....

 

 

Espero ter ajudado,

grato Luiz Gustavo.

  • Curtir 1

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

×