scale led colors to temperature in led_set

master
Dennis Gnad 13 years ago
parent ff0c0ee228
commit 251ea5b5f6

@ -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();
}
}

Loading…
Cancel
Save