From 251ea5b5f689908265e45a0c45d8796f28ecd0fe Mon Sep 17 00:00:00 2001 From: Dennis Gnad Date: Mon, 14 Jan 2013 15:55:03 +0100 Subject: [PATCH] scale led colors to temperature in led_set --- firmware/cup.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/firmware/cup.c b/firmware/cup.c index 108ccf3..a2560a2 100644 --- a/firmware/cup.c +++ b/firmware/cup.c @@ -12,6 +12,9 @@ #define TIMEOUT 255 +const uint16_t LED_GREEN_TEMP = 300; +const uint16_t LED_RED_TEMP = 1200; + const uint16_t TARGET_TEMP_MAX = 1520; uint8_t led_color = 0; @@ -20,7 +23,6 @@ uint8_t setting_timeout = 0; uint8_t adc_pos = 0; uint16_t adc_sum = 0; -uint16_t temperature_adc = 0; uint16_t target = 0; uint16_t temperature = 0; @@ -71,13 +73,13 @@ ISR(PCINT0_vect) input_state = new_state; } -uint8_t control_output(uint16_t current_temp, uint16_t target_temp) +uint8_t control_output() { - if (current_temp > target_temp) + if (temperature > target) { return 0; } else { - return (uint8_t)((uint16_t)((uint32_t)((uint32_t)255*target_temp)/current_temp)/TARGET_TEMP_MAX); + return (uint8_t)((uint16_t)((uint32_t)((uint32_t)255*target)/temperature)/TARGET_TEMP_MAX); } } @@ -142,7 +144,14 @@ void led_init(void) void led_set(uint16_t value) { - OCR0A = OCR0B = led_color = value >> 8; + if (LED_GREEN_TEMP < value && value < LED_RED_TEMP) { + value = (value-LED_GREEN_TEMP) * 255/(LED_RED_TEMP-LED_GREEN_TEMP); + } else if (value < LED_GREEN_TEMP) { + value = 0; + } else { + value = 255; + } + OCR0A = OCR0B = (uint8_t)value; } void led_off(void) @@ -192,11 +201,10 @@ int main(void) adc_sum += ADC; if(++adc_pos == 64) { - temperature_adc = adc_sum; + temperature = linearize_temp(adc_sum); adc_sum = 0; adc_pos = 0; - temperature = linearize_temp(temperature_adc); - heat_output = control_output(temperature, target); + heat_output = control_output(); } }