Продолжительность времени между двумя событиями

0

Я хочу вычислить время между тем, когда я передаю и когда получаю. Мой таймер начнет подсчет, как только я начну передавать, тогда таймер остановится, как только я получу ответ. Я использую C++ на моем arduino uno. Основываясь на моем коде, я просто измеряю задержку, что плохо. то, что я пытаюсь измерить, это прошедшее время между передачей и получением. Я надеюсь, что вы можете мне помочь.

выходное изображение

Мой код

#include <VirtualWire.h>         

const int transmit_pin = 12;       
const int receive_pin = 11;                  
char *controller;         

unsigned long start, finished, elapsed;         

void setup() {          

  //receiver settings         

  Serial.begin(9600);   // Debugging only         
  vw_set_rx_pin(11);         
  vw_rx_start();          

  //transmitter settings         
  pinMode(13, OUTPUT);         

  vw_set_ptt_inverted(true);          
  vw_set_tx_pin(12);         
  vw_setup(1000); // speed of data transfer Kbps         

}         
void displayResult()         
{         
  float h,m,s,ms;         
  unsigned long over;         
  elapsed=finished-start;         
  h=int(elapsed/3600000);         
  over=elapsed%3600000;         
  m=int(over/60000);         
  over=over%60000;         
  s=int(over/1000);         
  ms=over%1000;         
  Serial.print("Raw elapsed time: ");         
  Serial.println(elapsed);         
  Serial.print("Elapsed time: ");         
  Serial.print(h,0);         
  Serial.print("h ");         
  Serial.print(m,0);                  
  Serial.print("m ");         
  Serial.print(s,0);         
  Serial.print("s ");         
  Serial.print(ms,0);         
  Serial.println("ms");         
  Serial.println();         
}         

void loop() {         

  //Transmitter         
  digitalWrite(13, 1);         
  controller = "1";         
  vw_send((uint8_t *)controller, strlen(controller));         
  vw_wait_tx(); //Wait until the whole message is go         

start=millis();         
delay(1000); // for debounce         
Serial.println("Started...");         

  //Receiver         
  uint8_t buf[VW_MAX_MESSAGE_LEN];         
  uint8_t buflen = VW_MAX_MESSAGE_LEN;         

  if (vw_get_message(buf, &buflen)) { // Non-blocking          
  digitalWrite(13, 0); //Flash a light to show received good          
  for(int i = 0;i < buflen;i++) {         
  if (buf[i] == '2')          
  {         

finished=millis();         
delay(1000); // for debounce         
displayResult();         

  elapsed=finished-start;                          
  Serial.print(start);                
  Serial.println(" milliseconds start");                   
Serial.print(finished);                   
  Serial.println(" milliseconds finished");                     
    Serial.print(elapsed);                    
  Serial.println(" milliseconds elapsed");                    
  Serial.println();                   

  }           
    }              

  }                
  }               
Теги:
arduino
time
stopwatch

2 ответа

1

Все происходит во время задержки (задержка 1000 мс). Сообщение принимается и сохраняется в буфере, ожидая, пока вы его прочитаете, пока находитесь в задержке. Теперь вы измеряете время выполнения нескольких строк кода и занимает менее миллисекунды, поэтому вы получаете 0мс время.

1

Вы говорите: "Основываясь на моем коде, я просто измеряю задержку, что плохо".

Ладно, хорошо:

start=millis();         
delay(1000); // for debounce

Ну, если вы не хотите включать задержку в истекшее время, тогда возьмите время начала после задержки(), а не раньше.

Это кажется слишком очевидным, поэтому я подозреваю, что вы действительно спрашиваете о чем-то другом. Вам нужно показать результат, который вы получаете, почему вы считаете это неправильным, и какой результат вы ожидаете получить.

  • 0
    Я сделал то, что вы сказали, Сэм, теперь я получаю нулевое значение. Я действительно не знаю, в чем проблема. Я надеюсь, что вы можете мне помочь. image это выходное изображение при использовании задержки после времени запуска. образ
  • 0
    millis () предполагает, что разрешение ваших часов в миллисекундах. В секунду есть только 1000 миллисекунд. Вполне возможно, что для выполнения кода, который вы пытаетесь измерить, требуется менее миллисекунды.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню