Sorry if this topic is on the forum elsewhere but I couldn't find it if it is.
I am trying to use multiple PING))) ultrasonic sensors (4 to be exact) for navigation on an autonomus vehicle I'm creating. The code I've been working with is from "arduino.cc/playground/Main/UltrasonicSensor" (can't post actual links yet). Currently I have all four sensors outputting values in the Serial Monitor, but I think all 4 PING))) sensors are firing at once, and I believe that this is causing trouble with my controller code. Can someone tell me if I'm doing this right?
unsigned long echoFL = 0;
unsigned long echoF = 0;
unsigned long echoFR = 0;
unsigned long echoR = 0;
int ultraSoundSignalFL = 8; // Front Left Ultrasound signal pin
int ultraSoundSignalF = 7; // Front Ultrasound signal pin
int ultraSoundSignalFR = 6; // Front Right Ultrasound signal pin
int ultraSoundSignalR = 9; // Rear Ultrasound signal pin
unsigned long ultrasoundValueFL = 0;
unsigned long ultrasoundValueF = 0;
unsigned long ultrasoundValueFR = 0;
unsigned long ultrasoundValueR = 0;
void setup()
{
Serial.begin(9600);
pinMode(ultraSoundSignalF,OUTPUT);
pinMode(ultraSoundSignalFL,OUTPUT);
pinMode(ultraSoundSignalFR,OUTPUT);
pinMode(ultraSoundSignalR,OUTPUT);
}
//Front ultrasonic
unsigned long pingF(){
pinMode(ultraSoundSignalF, OUTPUT); // Switch signalpin to output
digitalWrite(ultraSoundSignalF, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignalF, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignalF, LOW); // Holdoff
pinMode(ultraSoundSignalF, INPUT); // Switch signalpin to input
digitalWrite(ultraSoundSignalF, HIGH); // Turn on pullup resistor
echoF = pulseIn(ultraSoundSignalF, HIGH); //Listen for echo
ultrasoundValueF = (echoF / 58.138) * .39; //convert to CM then to inches
return ultrasoundValueF;
}
//Front Left ultrasonic
unsigned long pingFL(){
pinMode(ultraSoundSignalFL, OUTPUT); // Switch signalpin to output
digitalWrite(ultraSoundSignalFL, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignalFL, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignalFL, LOW); // Holdoff
pinMode(ultraSoundSignalFL, INPUT); // Switch signalpin to input
digitalWrite(ultraSoundSignalFL, HIGH); // Turn on pullup resistor
echoFL = pulseIn(ultraSoundSignalFL, HIGH); //Listen for echo
ultrasoundValueFL = (echoFL / 58.138) * .39; //convert to CM then to inches
return ultrasoundValueFL;
}
//Front Right ultrasonic
unsigned long pingFR(){
pinMode(ultraSoundSignalFR, OUTPUT); // Switch signalpin to output
digitalWrite(ultraSoundSignalFR, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignalFR, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignalFR, LOW); // Holdoff
pinMode(ultraSoundSignalFR, INPUT); // Switch signalpin to input
digitalWrite(ultraSoundSignalFR, HIGH); // Turn on pullup resistor
echoFR = pulseIn(ultraSoundSignalFR, HIGH); //Listen for echo
ultrasoundValueFR = (echoFR / 58.138) * .39; //convert to CM then to inches
return ultrasoundValueFR;
}
//Rear ultrasonic
unsigned long pingR(){
pinMode(ultraSoundSignalR, OUTPUT); // Switch signalpin to output
digitalWrite(ultraSoundSignalR, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignalR, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignalR, LOW); // Holdoff
pinMode(ultraSoundSignalR, INPUT); // Switch signalpin to input
digitalWrite(ultraSoundSignalR, HIGH); // Turn on pullup resistor
echoR = pulseIn(ultraSoundSignalR, HIGH); //Listen for echo
ultrasoundValueR = (echoR / 58.138) * .39; //convert to CM then to inches
return ultrasoundValueR;
}
void loop()
{
int FL = 0;
int F = 0;
int FR = 0;
int R = 0;
FL = pingFL();
F = pingF();
FR = pingFR();
R = pingR();
Serial.print(FL);
Serial.print("in, ");
Serial.print(F);
Serial.print("in, ");
Serial.print(FR);
Serial.print("in, ");
Serial.print(R);
Serial.print("in, ");
Serial.println();
delay(250); //delay 1/4 seconds.
}
I'm thinking I might have to add a while loop or something to tell the Arduino to sweep the sensors one-by-one but I'm not sure how to do this. Any help or input would be greatly appreciated.