Hi robin ok here is my code, just too take note i cant really use delays in this code.
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
#define usTRIG 4 // no 12, 10 and 7 is out
#define usECHO1 11
#define usECHO2 8
#define usECHO3 9
char data;
unsigned long t1,t2,t3;//timers
int M1INA=14;
int M1INB=15;
int PWM1=5;//Motor 1
int M2INA=16;
int M2INB=17;
int PWM2=6;//Motor 2
void setup()
{
Serial.begin(9600);
pinMode(usTRIG,OUTPUT);
digitalWrite(usTRIG,LOW);
pinMode(usECHO1,INPUT);
pinMode(usECHO2,INPUT);
pinMode(usECHO3,INPUT);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(2);
vw_rx_start();
pinMode(13,OUTPUT);
pinMode(M1INA,OUTPUT);
pinMode(M1INB,OUTPUT);
pinMode(PWM1,OUTPUT);
pinMode(M2INA,OUTPUT);
pinMode(M2INB,OUTPUT);
pinMode(PWM2,OUTPUT);
digitalWrite(M1INA,LOW);
digitalWrite(M1INB,HIGH);
digitalWrite(M2INA,LOW);
digitalWrite(M2INB,HIGH);
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
}
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] == 'D'){
digitalWrite(usTRIG,LOW);
delayMicroseconds(10);
digitalWrite(usTRIG,HIGH);
delayMicroseconds(10);
digitalWrite(usTRIG,LOW);
t1=pulseIn(usECHO1,HIGH)/29;//return pulse length in uS
}
if(buf[i] == 'C'){
digitalWrite(usTRIG,LOW);
delayMicroseconds(10);
digitalWrite(usTRIG,HIGH);
delayMicroseconds(10);
digitalWrite(usTRIG,LOW);
t2=pulseIn(usECHO2,HIGH)/29;
}
if(buf[i] == 'E'){
digitalWrite(usTRIG,LOW);
delayMicroseconds(10);
digitalWrite(usTRIG,HIGH);
delayMicroseconds(10);
digitalWrite(usTRIG,LOW);
t3=pulseIn(usECHO3,HIGH)/29;
Serial.print(t1);
Serial.print("\t");
Serial.print(t2);
Serial.print("\t");
Serial.println(t3);
}
}
digitalWrite(13, false);
}
if(t2 < 250 && (t1 < 250||t3 < 250) && t1 > 40 && t2 > 40 && t3>40){
if(t2 < t1 && t2 < t3){
analogWrite(PWM1,t2);//when this statement is true and t3<t2 again the else if resets to 180 again
analogWrite(PWM2,t2);
}
else if (t3 < t2){
analogWrite(PWM1,180);//This needs to start of at 180 and each time it is true go faster so the turning is faster until the first if statement is true then reset to 180 again
analogWrite(PWM2,170);// I want this to be a constant speed
}
else if (t1 < t2){
analogWrite(PWM1,210);
analogWrite(PWM2,230);
}
}
else{
analogWrite(PWM1,0);
analogWrite(PWM2,0);
}
}