//! calibrates sensors. This function takes 3-4 minutes. void reconos_calibrate_temperature_sensors(void){ int i, f1, f2; sensor_array_int m1,m2; float diode1, diode2; // init for (i=0;i<NUM_SENSORS;i++){ gradients[i] = 0; offsets[i] = 0; m1[i] = 0; m2[i] = 0; } // measurement m1 stop_heating(); wait_for_stable_temperature(0.3, 20); diode1 = sysmon_temp_reg() * TEMPERATURE_FACTOR; diode1 -= 273.15; #ifdef UPBDBG_RECONOS_DEBUG diag_printf("\nmake 1st calibration measurement..."); #endif sensor_measure(); #ifdef UPBDBG_RECONOS_DEBUG diag_printf("done\r\n"); #endif for(i = 0; i < NUM_SENSORS; i++){ m1[i] = sensor[i]; } // measurement m2 start_heating(); wait_for_stable_temperature(0.3, 20); diode2 = sysmon_temp_reg() * TEMPERATURE_FACTOR; diode2 -= 273.15; #ifdef UPBDBG_RECONOS_DEBUG diag_printf("\nmake 2nd calibration measurement..."); #endif sensor_measure(); #ifdef UPBDBG_RECONOS_DEBUG diag_printf("done\n"); #endif for(i = 0; i < NUM_SENSORS; i++){ m2[i] = sensor[i]; } stop_heating(); #ifdef UPBDBG_RECONOS_DEBUG diag_printf("\nsensor calibration (T1=%d.%03d, T2=%d.%03d)\n", (int)diode1, ((int)(diode1*1000))%1000, (int)diode2, ((int)(diode2*1000))%1000); #endif // self-calibration for(i = 0; i < NUM_SENSORS; i++){ f1 = (int) m1[i]; f2 = (int) m2[i]; gradients[i] = (diode2-diode1); gradients[i] /= (f2-f1); offsets[i] = diode1; offsets[i] -= (gradients[i]*m1[i]); } }
void manual_heating(){ while (!autoMode){ if (SWITCH_ON){ start_heating(); SWITCH_LED_HIGH; } else{ stop_heating(); SWITCH_LED_LOW(); } _delay_ms(100); } }
void startHeating (uint8_t level){ uint8_t i; uint8_t working=0, stopping=0; setSpeed (level, &working, &stopping); if (autoMode){ for (i=0; i < working ; i ++){ start_heating(); _delay_ms(800); } } if(autoMode){ for (i=0; i < stopping ; i ++){ stop_heating(); _delay_ms(800); } } }