Ajuda com código de tempo

oii! como estão?

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.");
}

Olá.
Depende do objeto e do lugar onde ele vai.
Se for um foguete espacial e estiver indo a Marte vai levar alguns meses.

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

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.