diff options
author | Jonas Smedegaard <dr@jones.dk> | 2025-04-16 15:18:47 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2025-04-16 15:18:47 +0200 |
commit | c6b91ff638656c2848e52c31cbbb965b651b245a (patch) | |
tree | 804b2094d13cc1c87b83f0e4c49c26e8da3fd34e /sensor | |
parent | d2964a112211084c03e90f69001565997ed26152 (diff) |
add light sensor
Diffstat (limited to 'sensor')
-rw-r--r-- | sensor/sensor.ino | 44 |
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); } |