/*
Forum: https://forum.arduino.cc/t/vier-hc-sr-04-ultraschallsensoren-an-nur-5-pins-geht-das/1401048
Wokwi: https://wokwi.com/projects/438987677757600769
2025/08/11
ec2021
*/
constexpr uint8_t trigPin {4};
constexpr uint8_t echoPin[] = {5, 14, 13, 12};
constexpr size_t numSensors = sizeof(echoPin) / sizeof(echoPin[0]);
constexpr int nameLen {4};
constexpr char Name[numSensors][nameLen] = {"VL", "VR", "HL", "HR"};
class usSensorClass {
private:
uint8_t echoPin;
uint8_t triggerPin;
float distance = 0;
void trigger() {
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
}
public:
void init(uint8_t ePin, uint8_t tPin) {
echoPin = ePin;
triggerPin = tPin;
pinMode(echoPin, INPUT);
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
};
float getDistance() {
trigger();
float duration = pulseIn(echoPin, HIGH);
distance = (duration * .0343) / 2;
return distance;
};
};
usSensorClass usSensor[numSensors];
void setup() {
Serial.begin(115200);
for (int i = 0; i < numSensors; i++) {
usSensor[i].init(echoPin[i], trigPin);
}
}
void loop() {
for (int i = 0; i < numSensors; i++) {
Serial.print("Distance "); Serial.print(Name[i]); Serial.print(":\t");
Serial.println(usSensor[i].getDistance());
delay(25);
}
delay(150);
}