|
@@ -3,6 +3,8 @@
|
|
|
|
|
|
|
|
const char * sensorName = "SR04";
|
|
const char * sensorName = "SR04";
|
|
|
const int dp = 2;
|
|
const int dp = 2;
|
|
|
|
|
+#define SENTINEL -1.0f
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
* Arduino UNO:
|
|
* Arduino UNO:
|
|
|
*
|
|
*
|
|
@@ -13,6 +15,7 @@ const int dp = 2;
|
|
|
*
|
|
*
|
|
|
*/
|
|
*/
|
|
|
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
|
|
|
+SensorEMA_t sensorCtx;
|
|
|
|
|
|
|
|
|
|
|
|
|
// HC-SR04 Pins
|
|
// HC-SR04 Pins
|
|
@@ -39,7 +42,7 @@ void my_init() {
|
|
|
float readDistance() {
|
|
float readDistance() {
|
|
|
// Enforce minimum 60ms delay between readings to prevent ghost echoes
|
|
// Enforce minimum 60ms delay between readings to prevent ghost echoes
|
|
|
if (millis() - lastRead < 60) {
|
|
if (millis() - lastRead < 60) {
|
|
|
- return -1.0; // Return invalid flag if called too soon
|
|
|
|
|
|
|
+ return SENTINEL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Clear trigPin
|
|
// Clear trigPin
|
|
@@ -59,7 +62,7 @@ float readDistance() {
|
|
|
|
|
|
|
|
// Handle timeout (no echo received)
|
|
// Handle timeout (no echo received)
|
|
|
if (duration == 0) {
|
|
if (duration == 0) {
|
|
|
- return -1.0; // Return invalid flag
|
|
|
|
|
|
|
+ return SENTINEL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Calculate distance: (duration * speed of sound) / 2
|
|
// Calculate distance: (duration * speed of sound) / 2
|
|
@@ -74,20 +77,14 @@ void my_write(float val) {
|
|
|
lcd.print(" ");
|
|
lcd.print(" ");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// --- Global Context ---
|
|
|
|
|
-SensorEMA_t sensorCtx;
|
|
|
|
|
|
|
|
|
|
void setup() {
|
|
void setup() {
|
|
|
- // Assign function pointers
|
|
|
|
|
sensorCtx.fn_init = my_init;
|
|
sensorCtx.fn_init = my_init;
|
|
|
sensorCtx.fn_read = readDistance;
|
|
sensorCtx.fn_read = readDistance;
|
|
|
sensorCtx.fn_write = my_write;
|
|
sensorCtx.fn_write = my_write;
|
|
|
-
|
|
|
|
|
- // Initialize Library (Alpha=0.1, Interval=2000ms)
|
|
|
|
|
- SensorEMA_setup(&sensorCtx, 0.1, 2000);
|
|
|
|
|
|
|
+ SensorEMA_setup(&sensorCtx, 0.1, 2000, SENTINEL);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void loop() {
|
|
void loop() {
|
|
|
- // Call library loop as fast as possible
|
|
|
|
|
SensorEMA_loop(&sensorCtx, millis());
|
|
SensorEMA_loop(&sensorCtx, millis());
|
|
|
}
|
|
}
|