|
|
|
|
@ -19,7 +19,7 @@
|
|
|
|
|
#define LED_RED_TEMP 800
|
|
|
|
|
|
|
|
|
|
#define TARGET_TEMP_MIN 300
|
|
|
|
|
#define TARGET_TEMP_MAX 1520
|
|
|
|
|
#define TARGET_TEMP_MAX 1050
|
|
|
|
|
|
|
|
|
|
uint8_t setting_timeout = 0;
|
|
|
|
|
|
|
|
|
|
@ -109,16 +109,22 @@ ISR(PCINT0_vect)
|
|
|
|
|
{
|
|
|
|
|
dev_state = !dev_state;
|
|
|
|
|
toggle_timeout = TOGGLE_TIMEOUT;
|
|
|
|
|
if(dev_state) {
|
|
|
|
|
device_on();
|
|
|
|
|
} else {
|
|
|
|
|
device_off();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int8_t change = state_change[((input_state & 3) << 2) | (new_state & 3)];
|
|
|
|
|
if(change)
|
|
|
|
|
{
|
|
|
|
|
target += change * 6;//0.6K * 4 per step 10; // 1 celsius per step
|
|
|
|
|
//if(target < TARGET_TEMP_MIN) {target = TARGET_TEMP_MIN;}
|
|
|
|
|
//else if(target > TARGET_TEMP_MAX) {target = TARGET_TEMP_MAX;}
|
|
|
|
|
if(target < LED_GREEN_TEMP) {target = LED_GREEN_TEMP;}
|
|
|
|
|
else if(target > LED_RED_TEMP) {target = LED_RED_TEMP;}
|
|
|
|
|
if(target < TARGET_TEMP_MIN) {target = TARGET_TEMP_MIN;}
|
|
|
|
|
else if(target > TARGET_TEMP_MAX) {target = TARGET_TEMP_MAX;}
|
|
|
|
|
//if(target < LED_GREEN_TEMP) {target = LED_GREEN_TEMP;}
|
|
|
|
|
//else if(target > LED_RED_TEMP) {target = LED_RED_TEMP;}
|
|
|
|
|
setting_timeout = TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -210,10 +216,6 @@ inline void led_init(void)
|
|
|
|
|
|
|
|
|
|
inline void led_set(uint16_t value)
|
|
|
|
|
{
|
|
|
|
|
if(!led_is_on){
|
|
|
|
|
led_init();
|
|
|
|
|
led_is_on = 1;
|
|
|
|
|
}
|
|
|
|
|
uint8_t pwmval;
|
|
|
|
|
if (LED_GREEN_TEMP <= value && value < LED_RED_TEMP) {
|
|
|
|
|
pwmval = ((uint32_t) (value-LED_GREEN_TEMP) * 255)/(LED_RED_TEMP-LED_GREEN_TEMP);
|
|
|
|
|
@ -228,13 +230,28 @@ inline void led_set(uint16_t value)
|
|
|
|
|
|
|
|
|
|
inline void led_off(void)
|
|
|
|
|
{
|
|
|
|
|
led_is_on = 0;
|
|
|
|
|
TCCR0B = 0; // stop pwm
|
|
|
|
|
TCCR0A = 0; // disconnect outputs;
|
|
|
|
|
// OCR0A = 0;
|
|
|
|
|
// OCR0B = 255;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline void device_off(void)
|
|
|
|
|
{
|
|
|
|
|
TCCR0B = 0; // stop pwm
|
|
|
|
|
TCCR0A = 0; // disconnect outputs;
|
|
|
|
|
ADCSRA &= ~(1<<ADEN); // disable adc
|
|
|
|
|
heat_power = 0; // turn off heating
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline void device_on(void)
|
|
|
|
|
{
|
|
|
|
|
led_init();
|
|
|
|
|
ADCSRA |= (1<<ADEN); // enable adc
|
|
|
|
|
ADCSRA |= (1<<ADSC); // start a conversion to be sure
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline void adc_init(void)
|
|
|
|
|
{
|
|
|
|
|
ADMUX = (1 << REFS1) | (TEMP_PIN << MUX0);/* Vref = 1.1, pin selection */
|
|
|
|
|
@ -275,6 +292,8 @@ int main(void)
|
|
|
|
|
led_init();
|
|
|
|
|
sei();
|
|
|
|
|
|
|
|
|
|
device_off(); // initial state
|
|
|
|
|
|
|
|
|
|
for(;;)
|
|
|
|
|
{
|
|
|
|
|
if(ADCSRA & (1 << ADIF))
|
|
|
|
|
@ -303,7 +322,8 @@ int main(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!dev_state) {led_off();}
|
|
|
|
|
//if(!dev_state) {led_off();}
|
|
|
|
|
// now done in interrupt
|
|
|
|
|
else if(setting_timeout) {led_set(target);}
|
|
|
|
|
else {led_set(temperature);}
|
|
|
|
|
|
|
|
|
|
@ -326,6 +346,7 @@ int main(void)
|
|
|
|
|
if(!dev_state) {
|
|
|
|
|
set_sleep_mode(SLEEP_MODE_IDLE);
|
|
|
|
|
sleep_mode();
|
|
|
|
|
// timer1 interrupt will wake us again, as will PCINT
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|