aboutsummaryrefslogtreecommitdiff
path: root/sensor
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-04-16 15:18:47 +0200
committerJonas Smedegaard <dr@jones.dk>2025-04-16 15:18:47 +0200
commitc6b91ff638656c2848e52c31cbbb965b651b245a (patch)
tree804b2094d13cc1c87b83f0e4c49c26e8da3fd34e /sensor
parentd2964a112211084c03e90f69001565997ed26152 (diff)
add light sensor
Diffstat (limited to 'sensor')
-rw-r--r--sensor/sensor.ino44
1 files changed, 33 insertions, 11 deletions
diff --git a/sensor/sensor.ino b/sensor/sensor.ino
index 8b56c26..8d43b22 100644
--- a/sensor/sensor.ino
+++ b/sensor/sensor.ino
@@ -40,6 +40,10 @@
// maximum accumulated stress
#define STRESS_MAX 50
+// light sensor
+#define LIGHT_PIN 34
+#define DARKNESS_MAX 1000
+
// arduino-esp32 Touch sensor
#define TOUCH_PIN T0 // T0 is GPIO4
#define TOUCH_THRESHOLD 40
@@ -132,9 +136,33 @@ void keepPace() {
}
}
-// read fake gape angle sensor from pacemaker
-int getGapeAngle() {
- return ledcRead(LED_PIN);
+// read light intensity and return its non-zero capped value
+int getLightIntensity() {
+ int value = analogRead(LIGHT_PIN);
+ if (value > DARKNESS_MAX)
+ value = DARKNESS_MAX;
+ log_i("light intensity: %d", value);
+
+ return DARKNESS_MAX - value;
+}
+
+// fake gape angle as pacemaker position dampened by light intensity
+int resolveGapeAngle() {
+ int paceAngle = ledcRead(LED_PIN);
+ log_i("pacemaker value: %d", value);
+
+ int lightIntensity = getLightIntensity();
+ log_i("light intensity: %d", value);
+
+ int gapeAngle = paceAngle * lightIntensity / DARKNESS_MAX;
+
+ // misuse error-only log level for plot-friendly output
+#if ARDUHAL_LOG_LEVEL == ARDUHAL_LOG_LEVEL_ERROR
+ Serial.printf("pace_angle:%d light/10:%d gape_angle:%d\n",
+ paceAngle, lightIntensity/10, gapeAngle);
+#endif
+
+ return gapeAngle;
}
// Encode static Bluetooth beacon advertisement data
@@ -174,20 +202,14 @@ void setup() {
BLEDevice::init(BEACON_NAME);
pAdvertising = BLEDevice::getAdvertising();
setBeaconAdvertisement();
- setBeaconServiceData(getGapeAngle());
+ setBeaconServiceData(resolveGapeAngle());
pAdvertising->start();
}
void loop() {
// update Bluetooth beacon service data
- setBeaconServiceData(getGapeAngle());
-
- // misuse error-only log level for plot-friendly output
-#if ARDUHAL_LOG_LEVEL == ARDUHAL_LOG_LEVEL_ERROR
- Serial.printf("gape_angle:%d\n",
- getGapeAngle());
-#endif
+ setBeaconServiceData(resolveGapeAngle());
delay(500);
}