c++ - 两个事件之间的计时持续时间

标签 c++ time arduino stopwatch

我想计算发送和接收之间的时间。一旦我开始传输,我的计时器就会开始计时,一旦我收到回复,计时器就会停止。我在我的 arduino uno 上使用 C++。根据我的代码,我只是在测量延迟,这并不好。我要测量的是我发送和接收之间耗时。我希望你可以帮助我。

output image

我的代码

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

  }           
    }              

  }                
  }               

最佳答案

你说“根据我的代码,我只是在测量延迟,这是不好的。”

好的,好的:

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

好吧,如果您不想将延迟包括在耗时中,那么请将开始时间设为 delay() 之后,而不是之前。

这似乎太明显了,所以我怀疑你真的在问别的问题。您需要展示您得到的输出,为什么您认为它是错误的,以及您期望得到什么输出。

关于c++ - 两个事件之间的计时持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668534/

相关文章:

c++ - 检测算子 +

c++ - 当底层模型发生变化时,如何在 QTableView 中禁用自动滚动到顶部?

android - 在 Android 上格式化时间,同时遵循首选项(24 小时制与 AM/PM 等)

r - 将时间对象转换为 R 中的分类(早上、下午、晚上、晚上)变量?

c++ - 为什么我不能在 Arduino 中传递 typedef 或 enum?

python - Arduino 和 Python MD5

c++ - 堆叠协程 + gdb = "previous frame inner to this frame (corrupt stack)?"

android - 如何使用 QAndroidJniObject 从 Qt 内部调用 Java 代码?

java - 如何将时间与我的 table 匹配?

c++ - 在不破坏串行的情况下禁用 Arduino 上的定时器 0 中断