Hi
Trying to program a rc car. I want it to steer left and right if there are any obstacles on the route. Im having troubble using values from the left right and front sonarsensors in an if else. Hope somebody can help me.. For example, if the right sonar is less than 10 cm from any obstacle it should turn left. The functions works well, but the if else things I
m having troubble with.
Here is the code:
#include <VarSpeedServo.h>
const int trigPinFront = 2;
const int echoPinFront = 3;
const int trigPinLeft = 4;
const int echoPinLeft = 5;
const int trigPinRight = 6;
const int echoPinRight = 7;
VarSpeedServo SteeringServo;
void setup() {
Serial.begin(9600);
SteeringServo.attach(8);
}
void loop()
{
if (Right >10 && Left > 10 && Front > 10) //SERVO MID POSITION WHEELS STRAIGHT FOREWARD AND START ENGINE FOREWARD
{
SteeringServo.write(90, 25, false);
// HERE I WOULD ALSO SET THE MOTOR TO GO FOREWARD
}
else if (Right < 10) //TURN Left
{
SteeringServo.write(0, 25, false);
// HERE I WOULD ALSO SET THE MOTOR TO GO FOREWARD
}
else if (Left < 10) //TURN RIGHT
{
SteeringServo.write(180, 25, false);
// HERE I WOULD ALSO SET THE MOTOR TO GO FOREWARD
}
else if (Left < 10 && Right < 10) //SERVO MID POSITION WHEELS STRAIGHT FOREWARD AND START ENGINE REVERSE
{
SteeringServo.write(90, 25, false);
// HERE I WOULD ALSO SET THE MOTOR TO GO BACKWARDS
}
}
void Front()
{
long duration, cm;
pinMode(trigPinFront, OUTPUT);
digitalWrite(trigPinFront, LOW);
delayMicroseconds(2);
digitalWrite(trigPinFront, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinFront, LOW);
pinMode(echoPinFront, INPUT);
duration = pulseIn(echoPinFront, HIGH);
cm = microsecondsToCentimetersFront(duration);
Serial.print(cm);
Serial.print(" cm foran");
Serial.println();
delay(2000);
}
long microsecondsToCentimetersFront(long microseconds)
{
return microseconds / 29 / 2;
}
void Left()
{
long duration, cm;
pinMode(trigPinLeft, OUTPUT);
digitalWrite(trigPinLeft, LOW);
delayMicroseconds(2);
digitalWrite(trigPinLeft, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinLeft, LOW);
pinMode(echoPinLeft, INPUT);
duration = pulseIn(echoPinLeft, HIGH);
cm = microsecondsToCentimetersLeft(duration);
Serial.print(cm);
Serial.print(" cm Left");
Serial.println();
delay(2000);
}
long microsecondsToCentimetersLeft(long microseconds)
{
return microseconds / 29 / 2;
}
void Right()
{
long duration, cm;
pinMode(trigPinRight, OUTPUT);
digitalWrite(trigPinRight, LOW);
delayMicroseconds(2);
digitalWrite(trigPinRight, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinRight, LOW);
pinMode(echoPinRight, INPUT);
duration = pulseIn(echoPinRight, HIGH);
cm = microsecondsToCentimetersRight(duration);
Serial.print(cm);
Serial.print(" cm Right");
Serial.println();
delay(2000);
}
long microsecondsToCentimetersRight(long microseconds)
{
return microseconds / 29 / 2;
}