Olá amigos, estou fazendo um sistema de cronometragem que usa o millis() como base para obter o tempo. O problema é que quando o tempo é enviado para o receptor que irá guardar o tempo (e demonstra-lo), parece que o tempo trava, ou seja, apos a primeira medicao de tempo, todas em diante serão iguais, como se a variavel tempo (millis()) parasse na primeira comparação para pausar. Segue o codigo.
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
long tempo;
long tempoparado;
char memoria[10];
char TempoParado[8];
int botao = 9;
int fotocelula = 11;
int verde = 12;
int vermelho = 10;
int tempocorrendo = false;
int usuariorecebido = false;
void setup()
{
pinMode(vermelho, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(fotocelula, INPUT);
pinMode(botao, INPUT);
Serial.begin(9600);
vw_setup(2000);
vw_set_tx_pin(3);
vw_set_rx_pin(4);
}
void loop()
{
int val;
val = digitalRead(botao); //botao para iniciar o sistema
if (val == HIGH)
{
tempo = millis(); // atribui a tempo os milisegundos
digitalWrite(verde, HIGH);
delay(2000);
digitalWrite(verde, LOW);
delay(2000);
tempocorrendo = true;
while ( tempocorrendo == true){
vw_rx_start(); //pega ID do usuario(lcd) que irá receber o tempo
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) {
switch (buf[0]){
case 'X':
usuariorecebido = true;
digitalWrite(verde, HIGH);
while (usuariorecebido == true ) //usuario identificado
{
vw_rx_stop();
int val1;
val1 = digitalRead(fotocelula);
if (val1 == HIGH) // fotocelula para abrir o tempo
{
tempoparado = tempo; // aqui ele pega o tempo e copia pra tempoparado
digitalWrite(verde, LOW);
// envia as informaçoes
memset(memoria, '\0', sizeof(memoria));
memset(TempoParado, '\0', sizeof(TempoParado));
ltoa( tempoparado, TempoParado, 10 );
strcat(memoria,"A"); // Adiciona A que é a fotocelula da largada
strcat(memoria,"X"); // adiciona o ID do usuario X
strcat(memoria,TempoParado); // adiciona o tempo
delay(200);
vw_send((uint8_t *)memoria, strlen(memoria));
vw_wait_tx();
delay(500);
usuariorecebido = false;
}}
break;
case 'Y': // o mesmo para um segundo usuario
usuariorecebido = true;
digitalWrite(verde, HIGH);
while (usuariorecebido == true){
int val1;
val1 = digitalRead(fotocelula);
if (val1 == HIGH)
{
tempoparado = tempo;
digitalWrite(verde, LOW);
memset(memoria, '\0', sizeof(memoria));
memset(TempoParado, '\0', sizeof(TempoParado));
ltoa( tempoparado, TempoParado, 10 );
strcat(memoria,"A");
strcat(memoria,"Y");
strcat(memoria,TempoParado);
delay(200);
vw_send((uint8_t *)memoria, strlen(memoria));
vw_wait_tx();
delay(500);
usuariorecebido = false;
}}
break;
}}}}}
Se alguem puder me ajudar, já tentei criar uma funcao void tempo(){tempo = millis()} , tentando assim manter o tempo correndo, mas nao funcionou. Alguem?