comecei a mexer com arduino recentemente e queria um exemplo de como eu faria um código que registrasse o tempo, mas de preferencia um código simples (vi uns de cronômetro e fiquei meio perdida).
pode ser usando sensor de luz ou botão.
não sei se ajuda, mas eu tava querendo saber quanto tempo demora para um objeto ir e voltar para o mesmo lugar, em segundos.
Imagine que o botão está conectado ao pin3 e ao gnd :
unsigned long tempo;// para trabalhar com millis sempre unsigned long
void setup (){
Serial.begin (9600),
pinMode (3, INPUT_PULLUP);
}
void loop (){
while (digitalRead (3) == HIGH);// pára até ao início da viagem de ida
tempo = millis(); // A hora em que a viagem de ida começa é marcada
while (digitalRead (3) == HIGH); //Espera até que volte, millis continua contando
// calcula e imprime o tempo decorrido
Serial.print ( (millis () - tempo) / 1000);
Serial.println (" Segundos.");
}
Isto é um desperdício de recursos do processador e má prática no que toca a sistemas deste género.
uma solução seria:
//esta variável vai tomar conta de quando o primeiro evento aconteceu.
unsigned long t = 0;
unsigned char prevStart = 0; //esta variável fica com o estado do sensor de partida.
unsigned char prevStop = 0; //esta variável fica com o estado do sensor de chegada.
unsigned char counting = 0;
unsigned long interval = 0; //intervalo em milisegundos
void loop() {
unsigned char start = digitalRead(START_PIN); //vou assumir que este sinal a 1 inicia a contagem.
unsigned char stop = digitalRead(STOP_PIN); //vou assumir que este sinal a 1 para a contagem.
unsigned long endT = 0;
if ((start == 1) && (start != prevStart)){
t = millis(); //toma nota do tempo em que começou.
counting = 1; //indica que a contagem está em curso.
}
if (counting == 1) { //isto só faz sentido se estivermos a medir tempo.
if ((stop == 1) && (stop != prevStop)){
endT = millis(); //toma nota do tempo em que começou.
counting = 0; //indica que a contagem parou
interval = endT - t;
Serial.print ("intervalo = ");
Serial.print(interval/1000);
Serial.println(" segundos");
}
}
//toma nota dos estados para o próximo ciclo.
prevStart = start;
prevStop = stop;
}