aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/ramping-ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'spaghetti-monster/ramping-ui.c')
-rw-r--r--spaghetti-monster/ramping-ui.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/spaghetti-monster/ramping-ui.c b/spaghetti-monster/ramping-ui.c
index bd5a016..c85804d 100644
--- a/spaghetti-monster/ramping-ui.c
+++ b/spaghetti-monster/ramping-ui.c
@@ -19,7 +19,7 @@
#define FSM_EMISAR_D4_LAYOUT
#define USE_LVP
-//#define USE_THERMAL_REGULATION
+#define USE_THERMAL_REGULATION
#define DEFAULT_THERM_CEIL 32
#define USE_DEBUG_BLINK
#define USE_DELAY_MS
@@ -34,7 +34,7 @@ uint8_t steady_state(EventPtr event, uint16_t arg);
uint8_t party_strobe_state(EventPtr event, uint16_t arg);
// brightness control
-uint8_t memorized_level = 1;
+uint8_t memorized_level = MAX_1x7135;
// smooth vs discrete ramping
uint8_t ramp_step_size = 1;
@@ -189,18 +189,23 @@ uint8_t steady_state(EventPtr event, uint16_t arg) {
return 0;
}
#ifdef USE_THERMAL_REGULATION
- // FIXME: make thermal regulation work with ramping
- // overheating: drop by 1 level
+ // TODO: test this on a real light
+ // overheating: drop by an amount proportional to how far we are above the ceiling
else if (event == EV_temperature_high) {
- if (actual_level > 1) {
- set_level(actual_level - 1);
+ if (actual_level > MAX_LEVEL/4) {
+ uint8_t stepdown = actual_level - arg;
+ if (stepdown < MAX_LEVEL/4) stepdown = MAX_LEVEL/4;
+ set_level(stepdown);
}
return 0;
}
- // underheating: increase by 1 level if we're lower than the target
+ // underheating: increase slowly if we're lower than the target
+ // (proportional to how low we are)
else if (event == EV_temperature_low) {
if (actual_level < target_level) {
- set_level(actual_level + 1);
+ uint8_t stepup = actual_level + (arg>>1);
+ if (stepup > target_level) stepup = target_level;
+ set_level(stepup);
}
return 0;
}
@@ -268,7 +273,9 @@ void low_voltage() {
}
void setup() {
- debug_blink(2);
+ set_level(RAMP_SIZE/8);
+ delay_4ms(3);
+ set_level(0);
push_state(off_state, 0);
}