Boa Noite!
Estou programando um cronômetro no arduino, só que ele está dando erro quando o milissegundo vai passar para segundo e segundo para minuto.
O que devo fazer para corrigir esse erro?
if (status == MI_OK){
Serial.println();
tpV = ( millis () - tAntig- ttV); //tempo parcial recebe a diferença entre a função milis e tempo antigo menos o tempo total
ttV = ttV + tpV; // tempo total acumula tempo total mais tempo parcial
//calculo do tempo total----------------------
ttVmil = (ttV % 100);
ttVseg = (ttV-ttVmil)/1000; // tempo total é convertido para segundos
if ((ttV / 100) >= 100) {a=1;}
ttVsec = (ttVseg % 60)+a; //variavel recebe o resto da divisão para gerar os segundos da variavel ttV1min
if ((ttVseg / 60) >= 60) {b=1;}
ttVmin = ((ttVseg-ttVsec) / 60)+b; //tempo total é recebido e convertido para minutos
ttVhora= ttVmin / 60;
//mostrar numero do cartao
Serial.print("Tempo Total: ");
Serial.print(ttVhora, DEC);
Serial.print("\",");
Serial.print(ttVmin, DEC); //exibir com formatação o tempo total
Serial.print("\",");
Serial.print(ttVsec, DEC);
Serial.print("\",");
Serial.print(ttVmil, DEC);
Serial.print("\"""");
Serial.println();
//calculo do tempo parcial----------------------
tpVmil = (tpV % 100);
tpVseg = (tpV-tpVmil)/1000; // tempo parcial é convertido para segundos
if ((tpV / 100) >= 100) {c=1;}
tpVsec = (tpVseg % 60)+c; //variavel recebe o resto da divisão para gerar os segundos da variavel tpV1min
if ((tpVseg / 60) >= 60) {d=1;}
tpVmin = ((tpVseg-tpVsec) / 60)+d; //tempo parcial é recebido e convertido para minutos
tpVhora= tpVmin / 60;
Serial.print("Tempo Parcial: ");
Serial.print(tpVhora, DEC);
Serial.print("\",");
Serial.print(tpVmin, DEC); //exibir com formatação o tempo total
Serial.print("\",");
Serial.print(tpVsec, DEC);
Serial.print("\",");
Serial.print(tpVmil, DEC);
Serial.print("\"""");
Serial.println();
}
delay(1000);
}
Tags:
Bom dia,
Modifiquei o programa do Edson Melo " https://www.youtube.com/watch?v=Okjm364EcQo" veja se te ajuda.
#include <MsTimer2.h>
#define BOTAO 2
unsigned int milissegundos =0, segundos=0, minutos=0, hora=0;
boolean setaCrono = true;
boolean cronoLigado = false;
void ajustaCronometro () {
milissegundos++;
if ( milissegundos == 1000) {
milissegundos = 0;
segundos++;
if (segundos == 60) {
segundos = 0;
minutos ++;
if (minutos == 60){
minutos = 0;
hora ++;
}
if (hora == 2){
hora = 0;
minutos = 0;
segundos = 0;
milissegundos = 0;
}
}
}
setaCrono = true;
}
void setup () {
Serial.begin(9600);
pinMode (BOTAO, INPUT);
digitalWrite(BOTAO,1);
MsTimer2::set (10, ajustaCronometro);
}
void loop () {
if ( (digitalRead (BOTAO)== LOW) && (cronoLigado == false) )
{
cronoLigado = true;
MsTimer2::start();
}
else if ( (digitalRead (BOTAO)== HIGH) && (cronoLigado == true) )
{
cronoLigado = false;
MsTimer2::stop();
}
if (setaCrono) {
Serial.print (hora,DEC);
Serial.print (':');
Serial.print (minutos,DEC);
Serial.print (':');
Serial.print (segundos,DEC);
Serial.print (':');
Serial.println (milissegundos,DEC);
setaCrono = false;
}
}
Obrigada pela ajuda.
Sugestão para facilitar para quem deseja ajudá-la.
Coloque um programa executável, incluindo as variáveis, o setup e o loop.
Fica difícil para entender todo o programa, por exemplo para mim que estou aprendendo ainda Sketch.
E ao executar o programa, fica mais fácil entender onde esta o problema.
Não entendi porque dividir ttV por 100. (décimos de segundos?)
Millis = milisegundos
ttVmil = (ttV % 100);
ttVseg = (ttV-ttVmil)/1000; // tempo total é convertido para segundos
Tinha dividido por 100 para ter os centésimos de segundos, obrigada pela ajuda.
A unidade de ttV é de milisegundos.
Se dividir milisegundos por 100 vai ter décimos de segundos...
ex: 550 ms (0,55 seg) / 100 = 5,5 décimos de segundos
Para encontrar centésimos de segundos, divida por 10.
ex : 550 ms / 10 = 55 centésimos de segundos
Acho que é isso.
http://www.matematicadidatica.com.br/MedidaTempo.aspx
Em algumas situações mesmo o segundo é uma unidade de tempo muito grande. É comum em alguns esportes trabalharmos com décimos, centésimos e até mesmo milésimos de segundo.
Um décimo de segundo pode ser expresso por 0,1 s ou ainda 1/10 s.
Expressamos um centésimo de segundo por 0,01 s ou ainda 1/100 s.
Um milésimo de segundo pode ser expresso por 0,001 s ou ainda 1/1000 s.
Para convertermos de segundos para décimos, centésimos ou milésimos de segundos, dividimos o valor por 10, 100 ou 1000 respectivamente. No cálculo inverso realizamos a multiplicação por estes valores.
Obrigada pela ajuda, já consegui fazer com que ele calculasse certo, deixei em milissegundos mesmo.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por