HC-RS04 NewPing Class
Just finished writing a small C++ class to work with multiple HC-RS04 sonar transducers in 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.
/*
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);
}
Sonar sonar1(2,3)
Cheers!