내가 전송할 때와받을 때 사이의 시간을 계산하고 싶습니다. 타이머가 전송을 시작하면 타이머가 시작되고 응답을 받으면 타이머가 멈 춥니 다. 내 arduino uno
에 C++
을 사용하고 있습니다. 내 코드를 기반으로 지연을 측정하고 있습니다. 어느 것이 좋지 않습니다. 내가 측정하려고하는 것은 전송과 수신 사이의 경과 시간입니다. 네가 나를 도울 수 있기를 바랍니다.두 이벤트 사이의 시간 간격
내 코드
#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 값이다. 나는 정말로 그 문제가 뭔지 모른다. 네가 나를 도울 수 있기를 바랍니다. [이미지] (http://postimg.org/image/r3587q3wf/) 이것은 시작 시간 이후의 지연을 사용하면 출력 이미지입니다. [이미지] (http://postimg.org/image/wsq25rzgf/) – Rafael
millis()는 시계의 해상도가 밀리 초 단위임을 나타냅니다. 1 초에 1000 밀리 초 밖에 없습니다. 측정하려는 코드가 실행되는 데 1 밀리 초도 채 걸리지 않을 수도 있습니다. –
샘 (Sam)을 어떻게해야합니까? 시간을 결정하는 데 코드를 사용해야합니까? millis()를 마이크로()로 변경하면 어떻게 될까요? – Rafael