// // Start of temperature lookup table // #define NUMTEMPS 20 short temptable[NUMTEMPS][2] = { // { adc , temp } { 1 , 929 } , { 54 , 266 } , { 107 , 217 } , { 160 , 190 } , { 213 , 172 } , { 266 , 158 } , { 319 , 146 } , { 372 , 136 } , { 425 , 127 } , { 478 , 119 } , { 531 , 111 } , { 584 , 103 } , { 637 , 96 } , { 690 , 88 } , { 743 , 80 } , { 796 , 71 } , { 849 , 62 } , { 902 , 50 } , { 955 , 34 } , { 1008 , 2 } }; // // End of temperature lookup table // //these our the default values for the extruder. int extruder_speed = 128; int extruder_target_celsius = 0; int extruder_max_celsius = 0; byte extruder_heater_low = 64; byte extruder_heater_high = 255; void init_extruder() { //default to room temp. extruder_set_temperature(21); pinMode(EXTRUDER_MOTOR_DIR_PIN, OUTPUT); pinMode(EXTRUDER_MOTOR_SPEED_PIN, OUTPUT); pinMode(EXTRUDER_HEATER_PIN, OUTPUT); } void extruder_set_direction(byte direction) { digitalWrite(EXTRUDER_MOTOR_DIR_PIN, direction); } void extruder_set_speed(byte speed) { analogWrite(EXTRUDER_MOTOR_SPEED_PIN, speed); } void extruder_set_cooler(byte speed) { analogWrite(EXTRUDER_FAN_PIN, speed); } void extruder_set_temperature(int temp) { extruder_target_celsius = temp; extruder_max_celsius = (int)((float)temp * 1.1); } /** * Samples the temperature and converts it to degrees celsius. * Returns degrees celsius. */ int extruder_get_temperature() { if (EXTRUDER_THERMISTOR_PIN > -1) return extruder_read_thermistor(); else if (EXTRUDER_THERMOCOUPLE_PIN > -1) return extruder_read_thermocouple(); } /* * This function gives us the temperature from the thermistor in Celsius */ int extruder_read_thermistor() { int raw = extruder_sample_temperature(EXTRUDER_THERMISTOR_PIN); int celsius = 0; byte i; for (i=1; i raw) { celsius = temptable[i-1][1] + (raw - temptable[i-1][0]) * (temptable[i][1] - temptable[i-1][1]) / (temptable[i][0] - temptable[i-1][0]); if (celsius > 255) celsius = 255; break; } } // Overflow: We just clamp to 0 degrees celsius if (i == NUMTEMPS) celsius = 0; return celsius; } /* * This function gives us the temperature from the thermocouple in Celsius */ int extruder_read_thermocouple() { return ( 5.0 * extruder_sample_temperature(EXTRUDER_THERMOCOUPLE_PIN) * 100.0) / 1024.0; } /* * This function gives us an averaged sample of the analog temperature pin. */ int extruder_sample_temperature(byte pin) { int raw = 0; //read in a certain number of samples for (byte i=0; i