variavel tempo e calculo velocidade

Olá,

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);

}

void loop()
{

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > intervalo) {

previousMillis = currentMillis;
Serial.print(funcCalculavelocidade());
Serial.println("ms");

}
}

int funcCalculavelocidade()
{
//fazes as tuas contas ....
return metros/ 1000;
}