Issue with SoftwareSerial and NewPing library

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.

Changing SoftwareSerial to other libraries below might solve this issue. Thanks. :slight_smile:

Please refer to:
AltSoftSerial Library .
OR
Yet another Software Serial - Using Arduino / Programming Questions - Arduino Forum.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.