Hi, I'm facing an issue when I try to use SoftwareSerial together with NewPing.h.
The distance returned from the ultrasonic sensors sometime will be 0.
Below is the code:
#include <NewPing.h>
#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
#define sonarNum 4 // Number of sensors.
#define maxDistance 400 // Maximum distance (in cm) to ping.
#define GPSrx 3
#define GPStx 4
#define GPSBaud 9600
unsigned int cm[sonarNum]; // Where the ping distances are stored.
char name[4] = {'A', 'B', 'C', 'D'};
float txlat;
float txlng;
NewPing sonar[sonarNum] = { // Sensor object array.
NewPing(5, A0, maxDistance), //trigger pin, echo pin, max distance
NewPing(6, A1, maxDistance),
NewPing(7, A2, maxDistance),
NewPing(8, A3, maxDistance)
};
TinyGPSPlus GPS;
SoftwareSerial GPSserial(GPSrx, GPStx);
void setup() {
Serial.begin(9600);
GPSserial.begin(GPSBaud);
}
void loop() {
for (uint8_t i = 0; i < sonarNum; i++) { // Loop through each sensor and display results.
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
Serial.print("Sensor"+String(name[i])+":");
cm[i] = sonar[i].ping_cm();
Serial.print(cm[i]);
Serial.print("cm ");
}
Serial.println();
while (GPSserial.available())
GPS.encode(GPSserial.read());
if (GPS.location.isValid()) {
txlat = GPS.location.lat();
txlng = GPS.location.lng();
} else {
txlat = 2.249420;
txlng = 102.276125;
}
}
Below is the result: (I have fix an object in front of each sensors, should return the same value)
12:31:46.013 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:46.225 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:46.445 -> SensorA:3cm SensorB:0cm SensorC:0cm SensorD:0cm
12:31:46.739 -> SensorA:0cm SensorB:0cm SensorC:4cm SensorD:7cm
12:31:47.023 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:47.238 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:47.440 -> SensorA:3cm SensorB:0cm SensorC:0cm SensorD:0cm
12:31:47.744 -> SensorA:0cm SensorB:0cm SensorC:4cm SensorD:7cm
12:31:48.011 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:48.229 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:48.441 -> SensorA:3cm SensorB:0cm SensorC:0cm SensorD:0cm
12:31:48.741 -> SensorA:0cm SensorB:0cm SensorC:4cm SensorD:7cm
12:31:49.008 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:49.221 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:49.433 -> SensorA:3cm SensorB:4cm SensorC:0cm SensorD:0cm
12:31:49.695 -> SensorA:0cm SensorB:0cm SensorC:4cm SensorD:7cm
12:31:49.967 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:50.187 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:50.376 -> SensorA:3cm SensorB:4cm SensorC:0cm SensorD:0cm
12:31:50.671 -> SensorA:0cm SensorB:0cm SensorC:4cm SensorD:7cm
12:31:50.933 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:51.154 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:51.339 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:0cm
12:31:51.583 -> SensorA:0cm SensorB:0cm SensorC:0cm SensorD:7cm
12:31:51.908 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:52.140 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:52.293 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:52.513 -> SensorA:0cm SensorB:0cm SensorC:0cm SensorD:0cm
12:31:52.860 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:53.079 -> SensorA:3cm SensorB:4cm SensorC:4cm SensorD:7cm
12:31:53.278 -> SensorA:3cm SensorB:4cm SensorC:3cm SensorD:7cm
12:31:53.488 -> SensorA:0cm SensorB:0cm SensorC:0cm SensorD:0cm
12:31:53.807 -> SensorA:3cm SensorB:4cm SensorC:3cm SensorD:7cm
Let me know if still need more information, thanks.