Odometro com sensor hall

Galera eu fiz um velocímetro com contador de horas na raça e to todo estrupiado agr poderia me ajudar com o código para um odometro? Estou usando uma tela lcd I2C

Essa pergunta parece um pouco ridicula porque se fizeste um velocimetro tiveste de contar a distancia percorrida e dividir pelo periodo de tempo que demorou a percorrer essa distancia. Logo, apenas tens de ir adicionando essa distância a uma variável para teres um odómetro.

Se queres mais ajuda, coloca aqui o código que fizeste e alguém te poderá ajudar.

Está como attach o código executável e aqui está o código escrito:

A parte do velocímetro um amigo meu que me ajudou a escrever e eu não compreendi muito bem

#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#include <LiquidCrystal_I2C.h> //Biblioteca do LCD
#define hallPin 2 //Pinagem do Sensor Hall

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); //Comando para funfar o LCD

//Ao usar LCD contar à partir do 0

float start, finished;
float elapsed, time;
float circMetric=1.88; //Circunferência
float speedk; //Calculo da velocidade
int Scount = 0; //Conta Segundos
int Mcount = 0; //Conta Minutos
int Hcount = 0; //Conta Horas

void setup()
{
pinMode(hallPin, INPUT); //Liga o Sensor Hall
attachInterrupt(2, speedCalc, RISING);
start=millis();
lcd.begin(16,2); //Liga LCD
lcd.clear();
}

void speedCalc()
{
elapsed=millis()-start;
start=millis();
speedk=(3600circMetric)/elapsed; //1 horacircunferencia

}

void loop()
{
//Velocimetro no LCD
lcd.setCursor(4,0);
lcd.print(speedk);
lcd.setCursor(8,0);
lcd.print("Km/h");
speedk = 0; //Reseta para 0

//Contador de Horas no LCD
lcd.setCursor(10,1);
lcd.print (Hcount);
lcd.setCursor(12,1);
lcd.print ("H");

lcd.setCursor (5,1);
lcd.print (Mcount);
lcd.setCursor (8,1);
lcd.print ("M");

lcd.setCursor (0,1);
lcd.print (Scount);
lcd.setCursor (3,1);
lcd.print ("S");

//Matematica do Contador de Horas

if (Scount < 60) //Faz isso 59 vezes
{
delay (988); //Troca Ms por mins
Scount ++; //Add. 1 Segundo
}

if (Scount >59) //Se a operação for maior que 60
{
lcd.setCursor (1,1);
lcd.print (" ");
Mcount ++; //Add. 1 à Mcount
Scount = 0; //Reseta Scount
delay (58); //Troca Ms por mins
}

if ( Mcount == 60) //Se Mcount = 60
{
lcd.setCursor (6,1);
lcd.print (" ");
delay (32); //Para ajustar clock
Mcount = 0; //Reseta Mcount
Hcount ++; //Add. 1 hora
}

if (Hcount> 23)
{
Hcount = 0; //Reseta se for maior que 24
}

}

ComputadorBordo.ino (2.17 KB)

Algo assim:

double odometro = 0; 

void speedCalc()
{
  elapsed=millis()-start;
  start=millis();
  speedk=(3600*circMetric)/elapsed;      //1 hora*circunferencia
  odometro +=circMetric; 
}

A função speedCalc é chamada sempre que a roda executa uma volta. A circunferência da roda está guardada na variável circMetric, logo apenas tens de adicionar esse valor a uma variável para saberes a distância total percorrida.