chiark / gitweb /
preliminiary implementation for the early heating finish.
authorBernhard <bkubicek@x201.(none)>
Wed, 30 Nov 2011 07:51:46 +0000 (08:51 +0100)
committerBernhard <bkubicek@x201.(none)>
Wed, 30 Nov 2011 07:51:46 +0000 (08:51 +0100)
Might be replaced by something more clever, e.g. by erik, and does not yet support the second extruder or the bed.
its kind of not so cool, because you need 6 more ints.
Maybe isheating() should use the degrees directly, as it is not used in time-critical anyways.
Then it would be much easier. to have the offsets without additional variables.

Marlin/Configuration.h
Marlin/temperature.cpp
Marlin/temperature.h

index 558044e280e43e9e2a76c70dd5d1427b72fea7f7..483b8cf83789a403d632e025a381adfd6e0ab7b5 100644 (file)
@@ -91,6 +91,8 @@
 // if CooldownNoWait is defined M109 will not wait for the cooldown to finish
 #define CooldownNoWait true
 
+// Heating is finished if a temperature close to this degree shift is reached
+#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree
 // PID settings:
 // Uncomment the following line to enable PID support.
   
index 77aa6485bac5a2ffecd3c2e67ac7d5084d72ec10..93364f8cb00a7464801a10be72b41b38810e6c35 100644 (file)
@@ -43,6 +43,8 @@
 //===========================================================================
 int target_raw[3] = {0, 0, 0};
 int current_raw[3] = {0, 0, 0};
+int heatingtarget_raw[3]= {0, 0, 0};
+
 
 #ifdef PIDTEMP
   
index a12ef03109e2e7a411825f79befb1d0242141f13..ba1043b6dacd0c9c026db0dba2dad9f2a3cdb519 100644 (file)
@@ -41,6 +41,7 @@ int temp2analogBed(int celsius);
 float analog2temp(int raw);\r
 float analog2tempBed(int raw);\r
 extern int target_raw[3];  \r
+extern int heatingtarget_raw[3];\r
 extern int current_raw[3];\r
 extern float Kp,Ki,Kd,Kc;\r
 \r
@@ -79,6 +80,7 @@ FORCE_INLINE float degTargetBed() {   return analog2tempBed(target_raw[TEMPSENSO
 FORCE_INLINE void setTargetHotend0(const float &celsius) \r
 {  \r
   target_raw[TEMPSENSOR_HOTEND_0]=temp2analog(celsius);\r
+  heatingtarget_raw[TEMPSENSOR_HOTEND_0]=temp2analog(celsius-HEATING_EARLY_FINISH_DEG_OFFSET);\r
   #ifdef PIDTEMP\r
     pid_setpoint = celsius;\r
   #endif //PIDTEMP\r
@@ -90,10 +92,10 @@ FORCE_INLINE float setTargetHotend(const float &celcius, uint8_t extruder){
 };\r
 FORCE_INLINE void setTargetBed(const float &celsius)     {  target_raw[TEMPSENSOR_BED     ]=temp2analogBed(celsius);};\r
 \r
-FORCE_INLINE bool isHeatingHotend0() {return target_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];};\r
+FORCE_INLINE bool isHeatingHotend0() {return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];};\r
 FORCE_INLINE bool isHeatingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];};\r
 FORCE_INLINE float isHeatingHotend(uint8_t extruder){  \r
-  if(extruder == 0) return target_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];\r
+  if(extruder == 0) return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];\r
   if(extruder == 1) return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];\r
 };\r
 FORCE_INLINE bool isHeatingBed() {return target_raw[TEMPSENSOR_BED] > current_raw[TEMPSENSOR_BED];};\r