Hi guys im having trouble getting my timing right here, If i put a delay of more than 200us in my receiving sketch I get wrong readings on my sensors and for my project to work i need some delays in place.
Any feedback is much appreciated.
Receiving sketch:
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
#define usTRIG1 4
#define usTRIG2 8
#define usECHO1 6
#define usECHO2 11
char data;
unsigned long t1,t2;//timers
const int pin = 12;
void setup()
{
Serial.begin(9600);
pinMode(usTRIG1,OUTPUT);pinMode(usTRIG2,OUTPUT);
digitalWrite(usTRIG1,LOW);digitalWrite(usTRIG2,LOW);
pinMode(usECHO1,INPUT);pinMode(usECHO2,INPUT);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(2);
vw_rx_start();
pinMode(13,OUTPUT);
pinMode(pin,OUTPUT);
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
digitalWrite(13, true); // Flash a light to show received good message
for (i = 0; i < buflen; i++)
{
if(buf[i] == 'E'){
digitalWrite(usTRIG1,LOW);delayMicroseconds(10);digitalWrite(usTRIG1,HIGH);delayMicroseconds(10);digitalWrite(usTRIG1,LOW);
t1=pulseIn(usECHO1,HIGH);//return pulse length in uS
}
if(buf[i] == 'C'){
digitalWrite(usTRIG2,LOW);delayMicroseconds(10);digitalWrite(usTRIG2,HIGH);delayMicroseconds(10);digitalWrite(usTRIG2,LOW);
t2=pulseIn(usECHO2,HIGH);
Serial.print(t1/29);Serial.print("\t");Serial.println(t2/29);//distance in cm, 29 not 58 because ultrasound is 1 way only, no reflection
}
}
digitalWrite(13, false);
}
}
Sending sketch:
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
#define ultraTRIG 5
char *msg1 = "C",*msg2 = "E";
int timer = 200,timer2=150;
void setup()
{
pinMode(ultraTRIG,OUTPUT);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(3);
}
void loop()
{
digitalWrite(13, true);vw_send((uint8_t *)msg1, strlen(msg1));vw_wait_tx();digitalWrite(13, false);
digitalWrite(ultraTRIG,LOW);
delayMicroseconds(timer);
digitalWrite(ultraTRIG,HIGH);delayMicroseconds(10);digitalWrite(ultraTRIG,LOW);
delay(timer2);
digitalWrite(13, true);vw_send((uint8_t *)msg2, strlen(msg2));vw_wait_tx();digitalWrite(13, false);
digitalWrite(ultraTRIG,LOW);
delayMicroseconds(timer);
digitalWrite(ultraTRIG,HIGH);delayMicroseconds(10);digitalWrite(ultraTRIG,LOW);
delay(3000);//3000 is 3 second delay before next loop
}