Я хочу измерить время, прошедшее между моими двумя arduino с использованием модуля rx/tx в микросекундах. Я сделал свои коды, и я заметил, что что-то не так в моей работе. Я надеюсь, что вы можете мне помочь.Получение эллипса времени между двумя ардуино в микросекундах
Оба устройства A
(устройство 1) и B
(устройство 2) отвечают за точное измерение времени с использованием местных часов.
- Если время
A
посылает сигналTSA
, - время
B
принимает сигналTRB
, - время
B
ответов на этоTSB
, - время
A
принимает сигнал спинаTRA
- такой, что
TSA < TRB <TSB < TRA
, - затем
A
мерыTA = TRA -TSA
и B
мерыTB = TSB - TRB
.
TOF можно оценить путем сочетания этих двух измерений:
Total time elapsed = (TA-TB)/2
код ПРЕОБРАЗОВАТЕЛЬ
#include <VirtualWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const int transmit_pin = 12;
const int receive_pin = 11;
char *c;
unsigned long received, sends, elapsed;
void setup() {
Serial.println();
Serial.begin(9600); // Debugging only
//transmitter settings
pinMode(13, OUTPUT)
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_tx_pin(12);
vw_setup(1000); // speed of data transfer Kbps
//receiver settings
Serial.println();
Serial.begin(9600); // Debugging only
vw_set_rx_pin(11);
vw_rx_start();
}
void loop() {
//Transmitter
digitalWrite(13, 1);
c = "1";
vw_send((uint8_t *)c, strlen(c));
vw_wait_tx(); //Wait until the whole message is go
delay(1000); // for debounce
sends=micros();
//Receiver
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) { // Non-blocking
for(int i = 0;i < buflen;i++) {
if(buf[i] == '2') {
digitalWrite(13, 0);
delay(1000); // for debounce
received=micros();
elapsed=(received-sends);
Serial.print(sends);
Serial.println(" TRANSMITTED TIME");
Serial.print(received);
Serial.println(" RECEIVED TIME");
Serial.print(elapsed);
Serial.println(" microseconds elapsed");
}
}
}
}
RECEIVER код
#include <VirtualWire.h>
const int receive_pin = 11;
const int transmit_pin = 12;
char *chars;
unsigned long received, sends;
void setup() {
Serial.println();
Serial.begin(9600); // Debugging only
//transmitter settings
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_tx_pin(12);
vw_setup(1000); // speed of data transfer Kbps
//receiver settings
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(11);
vw_setup(1000); // Bits per sec
pinMode(13, OUTPUT);
vw_rx_start(); // Start the receiver PLL running
}
void loop() {
//Receiver
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
digitalWrite(13, 1);
if (vw_get_message(buf, &buflen)) { // Non-blocking
for(int i = 0;i < buflen;i++) {
if(buf[i] == '1') {
received=micros();
//Transmitter
chars = "2";
vw_send((uint8_t *)chars, strlen(chars));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, 0);
delay(1000);
sends=micros();
Serial.print(received);
Serial.println(" RECEIVED TIME");
Serial.print(sends);
Serial.println(" TRANSMTTED TIME");
}
}
}
}//End for Loop
Мощность передатчика
Полученное время должно быть больше больше, как вы можете видеть в моей формуле.
transmitter output http://i58.tinypic.com/245xcag.jpg
выход приемника
receiver output http://i62.tinypic.com/23j5rfp.jpg
Я надеюсь, что вы можете помочь мне, что это проблема в моей программе.
Что я должен изменить в своей программе, чтобы измерить прошедшее время? – Rafael