Ir ao conteúdo

Problema código - Arduino


marcoshenri

Posts recomendados

Postado

Pessoal, tô tentando fazer um velocímetro e um rpm e vou usar um LCD 16x2, quando acionar a chave vai mostrar a velocidade e se eu usá-la novamente mostra o rpm. No entanto, fiz a simulação no proteus, e os valores de rpm e velocidade tão dando tipo uns 840000. Tentei mexer no código, mas não consigo descobrir o q tá errado. Primeiramente fiz os velocímetro e o conta giros separados, daí funcionaram bem, mas quando juntei tudo e coloquei a chave deu esse problema. Queria saber se alguém aí pode ver o código e me ajudar. A chave funciona bem, mostra a velocidade ou o rpm quando eu quero, o problema são esses valores que não mudam e não são nada coerentes.

 

#line 1 "arduinoB.ino"#include <LiquidCrystal.h> // inclui a biblioteca do LCD  #include "Arduino.h"void setup ();void fun_velocidade ();void fun_rpm ();void loop ();#line 3LiquidCrystal lcd(9,8,4,5,6,7); // configura\u00e7\u00e3o dos pinos do LCD #define REFRESH_TIME 100 // atualiza a cada 1 segundo  float comprimentoDaCircunferencia = 1.64; // 2*pi*r da roda do carro PAC BAJA float velocidade; // vari\u00e1vel que ser\u00e1 atribuida a velocidade do carro unsigned int contadorV; // contador da velocidade long tempo; // variavel de tempo  unsigned int contadorR; // contador de rpm unsigned int rotacao; // variavel que sera atribuida ao RPM do carro int val = 0; // variavel para ler o estado do interruptor int mudancaDeTela = 0; // variavel que sinaliza a mudanca de tela void setup (){pinMode (0, INPUT); // define o pino 0 como entrada (bot\u00e3o)pinMode (2, INPUT); // define o pino 2 como entradapinMode (3,INPUT); // define o pino 3 como entrada attachInterrupt (0,fun_velocidade,RISING); // int 0 pin3attachInterrupt (1, fun_rpm, RISING);      // int 1 pin2 lcd.begin(16,2); // inicializa o LCD 16x2 contadorV = 0 ; //atribui ao contador da velocidade o valor 0 velocidade = 0.0 ; //atribui a velocidade o valor 0 contadorR = 0; //atribui ao contador do RPM o valor 0 rotacao = 0; // atribui a rotacao o valor 0 tempo=millis(); } void fun_velocidade (){contadorV++; } void fun_rpm (){contadorR++;} void loop (){val=digitalRead(0); // l\u00ea o valor de entradaif (val==HIGH){if (millis() - tempo  >= REFRESH_TIME){if(mudancaDeTela==1) {lcd.clear();mudancaDeTela = 0;}velocidade = (3600*comprimentoDaCircunferencia*contadorV)/(millis()-tempo);contadorV=0;tempo=millis();lcd.setCursor (0,0);lcd.print("velocidade");lcd.setCursor(5,1);lcd.print('    ');lcd.print(float(velocidade));}}else { if(millis()- tempo >=REFRESH_TIME){if(mudancaDeTela==0) {lcd.clear();mudancaDeTela = 1;}rotacao=(contadorR*60);tempo=millis();contadorR=0; lcd.setCursor(0,1);lcd.print('    ');lcd.print(int(rotacao));lcd.setCursor(6,1);lcd.print("rpm"); }}}

  • 2 semanas depois...
Postado

oi marcos,

dei uma lida no seu código,mas eu estou meio enferrujado pelas ferias.

Algumas vezes o código esta certo,mas por motivos sobrenaturais a coisa não funciona.kkk

uma coisa que poderia deixar seu código muito mais limpo e menos propenso a erros seria se você trocasse millis(), pela biblioteca "TimerOne".

Ela utiliza o timer do arduino e nos poupa do trabalho sujo. Simplificando a opera, você escolhe de quanto em quanto tempo(em microsegundos) determinada função sera executada(voce decide qual). Dai tu poderia incrementar variaveis como se fosse um cronometro e assim poder calcular velocidade e giro.

Pesquise no google sobre esta biblioteca, e baixe-a(em 2 segs). depois vai na IDE e clica em adicionar biblioteca.

Acho que sera muito mais fácil.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!