Bom gostaria de saber se isto aqui está correto, porque pelo que eu li no livro "Primeiros passos com o arduino" a função delay(2000) vai pausar o programa.
while(tempo >= 0) //calculo de tempo
{
delay(1000);
tempo = tempo + 1; //variavel armazenar tempo em segundos
}
A variável tempo vai ser usada para mostrar um valor em segundos
Mais usando o delay isso estaria certo?
Uma outra dificuldade seria de como calcular a velocidade sendo que:
velocidade = metros / tempo
Como eu faria para fazer esse calculo dentro de um certo tempo (1 segundo), exemplo:
quando o sensor na roda atua ele começa a condição:
Se (sensor == 0) faça:
de 0001(millesegundos) até 1001(millesegundos) faça:
quando (sensor ==0) faça:
mestros = metros + 0.07
Dentro desse tempo de 1 segundo eu quero que toda vez que ele atue adicione um valor a variavel metros
mas sem que interfira na condição em quanto estiver dentro do tempo de 1 segundo.
A variável tempo vai ser usada para mostrar um valor em segundos
Mais usando o delay isso estaria certo?
Nao.para obteres o tempo em segundos usas a funçao millis() que te devolve um valor em milisegundos desde que o teu arduino ligou.Se quiseres o valor em segundos algo assim dá:
unsigned long tempo = millis() /1000;
Uma outra dificuldade seria de como calcular a velocidade sendo que:
velocidade = metros / tempo
Como eu faria para fazer esse calculo dentro de um certo tempo (1 segundo), exemplo:
A tua resposta depende um pouco de qual a precisao que queres fazer esse calculo.Podes usar o millis() tambem para saber se ja passou um segundo, mas isto quer dizer que o teu calculo muitas das vezes nao vai ser feito logo apos um segundo, pode ser um segundo e uns 3 milisegundos ou mais, quero isto dizer que ele vai fazer o teu calculo apenas apos o 1 segundo.Se no entanto te for imperativo fazer o calculo nos 1000 milisegundos certinhos o melhor é usares um dos timers e configura-lo para gerar uma interrupçao quando o timer fizer overflow.Esta interrupçao vai por si marcar uma flag para que seja executada a funçao da velocidade.Nota que tambem este metodo pode fugir aos 1000 milisegundos, mas é o mais aproximado que iras conseguir em termos de exatidao perto dos teus 1000 milisegundos.
Para usares o millis isto deve te dar uma idea de como podes fazer.
long intervalo = 1000;
long previousMillis = 0;
int metros = 0;
void setup()
{
Serial.begin(9600);