我想计算发送和收到之间的时间。一旦我开始发送,我的计时器将开始计数,然后一旦收到响应,计时器就会停止。我在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();
}
}
}
}
答案 0 :(得分:1)
你说&#34;根据我的代码,我只测量延迟,这不好。&#34;
好的,好的:
start=millis();
delay(1000); // for debounce
好吧,如果你不想在你的经过时间中包含延迟,那么在延迟()后的开始时间,而不是之前。
这似乎太明显了,所以我怀疑你真的在问别的事情。您需要显示您正在获得的输出,您认为错误的原因以及您期望得到的输出。
答案 1 :(得分:1)
在延迟期间(1000毫秒延迟),每件事都会发生。收到消息并将其存储在缓冲区中,等待您在延迟时读取它。您现在正在测量几行代码的执行时间,这需要不到一毫秒的时间,这就是您获得0ms时间的原因。