HC-RS04 NewPing Class


sonar non blocking sonar

Just finished writing a small C++ class to work with multiple HC-RS04 sonar transducers with a non-blocking way with the NewPing Library.
In this exact code I connected two sensors, but you can add as many as you like.

To add new sonars, just create a new instance of it adding the echo and trigger pins.

Sonar sonar1(2,3);

/*
Daniel Andrade - www.danielandrade.net
non blocking classes for NewPing sonars
*/
#include <NewPing.h>
class Sonar : public NewPing
{
// Class Member Variables
// Initialized
int trigPin; // Trigger
int echoPin; // Echo
// Current Readings
int distance; // measured distance
unsigned long previousMillis; // last time we did a reading
// Constructor - creates a sonar
// and initialize member variables
public : Sonar(int trig, int echo) : NewPing(trig, echo, 90), trigPin(trig), echoPin(echo), previousMillis(0)
{
}
void updateSonar()
{
// check if the time has passed (more than 30ms)
unsigned long currentMillis = millis();
// if it has passed more than 30ms
if(currentMillis - previousMillis >= 30)
{
previousMillis = millis();
// read current distance
distance = ping_cm();
}
}
int currentDistance() { return distance; }
};
// Create the instances for our sonars
Sonar sonar1(2,3);
Sonar sonar2(5,4);
void setup()
{
}
void loop()
{
sonar1.updateSonar();
sonar2.updateSonar();
int distance1 = sonar1.currentDistance();
int distance2 = sonar2.currentDistance();
Serial.print(distance1);
Serial.print(" - ");
Serial.println(distance2);
}

Here is an example with some NeoPixels, just for fun:

Cheers!

Comments

  1. Sir, I like your idea very much and I m impressed with your project. So, I just want to make this amazing project but the problem is that you haven’t mentioned the device or the component you are using also there is no information about the connection, please sir help me out with this.
    I’ll be so glad if you’ll help me out.
    Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.