@ -115,14 +115,16 @@ static volatile bool temp_meas_ready = false;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  long  extruder_autofan_last_check ; 
 
					 
					 
					 
					  static  unsigned  long  extruder_autofan_last_check ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif   
 
					 
					 
					 
					# endif   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS >  3 
 
					 
					 
					 
					# if EXTRUDERS >  4 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					  #  error Unsupported number of extruders 
 
					 
					 
					 
					  #  error Unsupported number of extruders 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# elif EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# elif EXTRUDERS > 2 
 
					 
					 
					 
					# elif EXTRUDERS > 2 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 } 
 
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1, v2, v3 }
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# elif EXTRUDERS > 1 
 
					 
					 
					 
					# elif EXTRUDERS > 1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3 ) { v1, v2 }
 
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1, v2 }
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# else 
 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3 ) { v1 }
 
					 
					 
					 
					  #  define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1 }
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef PIDTEMP 
 
					 
					 
					 
					# ifdef PIDTEMP 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -144,10 +146,10 @@ static volatile bool temp_meas_ready = false;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  //PIDTEMP
 
 
					 
					 
					 
					# endif  //PIDTEMP
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// Init min and max temp with extreme values to prevent false errors during startup
 
 
					 
					 
					 
					// Init min and max temp with extreme values to prevent false errors during startup
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int  minttemp_raw [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_RAW_LO_TEMP  ,  HEATER_1_RAW_LO_TEMP  ,  HEATER_2_RAW_LO_TEMP  ) ; 
 
					 
					 
					 
					static  int  minttemp_raw [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_RAW_LO_TEMP  ,  HEATER_1_RAW_LO_TEMP  ,  HEATER_2_RAW_LO_TEMP ,   HEATER_3_RAW_LO_TEMP ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int  maxttemp_raw [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_RAW_HI_TEMP  ,  HEATER_1_RAW_HI_TEMP  ,  HEATER_2_RAW_HI_TEMP  ) ; 
 
					 
					 
					 
					static  int  maxttemp_raw [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_RAW_HI_TEMP  ,  HEATER_1_RAW_HI_TEMP  ,  HEATER_2_RAW_HI_TEMP ,   HEATER_3_RAW_HI_TEMP ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int  minttemp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  0 ,  0 ,  0  ) ; 
 
					 
					 
					 
					static  int  minttemp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  0 ,  0 ,  0 ,  0   ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int  maxttemp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  16383 ,  16383 ,  16383  ) ; 
 
					 
					 
					 
					static  int  maxttemp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  16383 ,  16383 ,  16383 ,  16383   ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					//static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */
 
 
					 
					 
					 
					//static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef BED_MAXTEMP 
 
					 
					 
					 
					# ifdef BED_MAXTEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int  bed_maxttemp_raw  =  HEATER_BED_RAW_HI_TEMP ; 
 
					 
					 
					 
					static  int  bed_maxttemp_raw  =  HEATER_BED_RAW_HI_TEMP ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -157,8 +159,8 @@ static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  void  * heater_ttbl_map [ 2 ]  =  { ( void  * ) HEATER_0_TEMPTABLE ,  ( void  * ) HEATER_1_TEMPTABLE  } ; 
 
					 
					 
					 
					  static  void  * heater_ttbl_map [ 2 ]  =  { ( void  * ) HEATER_0_TEMPTABLE ,  ( void  * ) HEATER_1_TEMPTABLE  } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  uint8_t  heater_ttbllen_map [ 2 ]  =  {  HEATER_0_TEMPTABLE_LEN ,  HEATER_1_TEMPTABLE_LEN  } ; 
 
					 
					 
					 
					  static  uint8_t  heater_ttbllen_map [ 2 ]  =  {  HEATER_0_TEMPTABLE_LEN ,  HEATER_1_TEMPTABLE_LEN  } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# else 
 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  void  * heater_ttbl_map [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  ( void  * ) HEATER_0_TEMPTABLE ,  ( void  * ) HEATER_1_TEMPTABLE ,  ( void  * ) HEATER_2_TEMPTABLE  ) ; 
 
					 
					 
					 
					  static  void  * heater_ttbl_map [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  ( void  * ) HEATER_0_TEMPTABLE ,  ( void  * ) HEATER_1_TEMPTABLE ,  ( void  * ) HEATER_2_TEMPTABLE ,  ( void  * ) HEATER_3_TEMPTABLE   ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  uint8_t  heater_ttbllen_map [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_TEMPTABLE_LEN ,  HEATER_1_TEMPTABLE_LEN ,  HEATER_2_TEMPTABLE_LEN  ) ; 
 
					 
					 
					 
					  static  uint8_t  heater_ttbllen_map [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS (  HEATER_0_TEMPTABLE_LEN ,  HEATER_1_TEMPTABLE_LEN ,  HEATER_2_TEMPTABLE_LEN ,  HEATER_3_TEMPTABLE_LEN   ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  float  analog2temp ( int  raw ,  uint8_t  e ) ; 
 
					 
					 
					 
					static  float  analog2temp ( int  raw ,  uint8_t  e ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -166,8 +168,8 @@ static float analog2tempBed(int raw);
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  updateTemperaturesFromRawValues ( ) ; 
 
					 
					 
					 
					static  void  updateTemperaturesFromRawValues ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef WATCH_TEMP_PERIOD 
 
					 
					 
					 
					# ifdef WATCH_TEMP_PERIOD 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					int  watch_start_temp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS ( 0 , 0 , 0  ); 
 
					 
					 
					 
					int  watch_start_temp [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 ,0  ); 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					unsigned  long  watchmillis [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS ( 0 , 0 , 0  ); 
 
					 
					 
					 
					unsigned  long  watchmillis [ EXTRUDERS ]  =  ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 ,0  ); 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# endif  //WATCH_TEMP_PERIOD
 
 
					 
					 
					 
					# endif  //WATCH_TEMP_PERIOD
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifndef SOFT_PWM_SCALE 
 
					 
					 
					 
					# ifndef SOFT_PWM_SCALE 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -200,7 +202,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ 
 
					 
					 
					 
					# if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ( defined ( EXTRUDER_1_AUTO_FAN_PIN )  & &  EXTRUDER_1_AUTO_FAN_PIN  >  - 1 )  | |  \
 
					 
					 
					 
					    ( defined ( EXTRUDER_1_AUTO_FAN_PIN )  & &  EXTRUDER_1_AUTO_FAN_PIN  >  - 1 )  | |  \
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ( defined ( EXTRUDER_2_AUTO_FAN_PIN )  & &  EXTRUDER_2_AUTO_FAN_PIN  >  - 1 ) 
 
					 
					 
					 
					    ( defined ( EXTRUDER_2_AUTO_FAN_PIN )  & &  EXTRUDER_2_AUTO_FAN_PIN  >  - 1 )  | |  \
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ( defined ( EXTRUDER_3_AUTO_FAN_PIN )  & &  EXTRUDER_3_AUTO_FAN_PIN  >  - 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  unsigned  long  extruder_autofan_last_check  =  millis ( ) ; 
 
					 
					 
					 
					  unsigned  long  extruder_autofan_last_check  =  millis ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -243,7 +246,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ 
 
					 
					 
					 
					      # if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ( defined ( EXTRUDER_1_AUTO_FAN_PIN )  & &  EXTRUDER_1_AUTO_FAN_PIN  >  - 1 )  | |  \
 
					 
					 
					 
					          ( defined ( EXTRUDER_1_AUTO_FAN_PIN )  & &  EXTRUDER_1_AUTO_FAN_PIN  >  - 1 )  | |  \
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ( defined ( EXTRUDER_2_AUTO_FAN_PIN )  & &  EXTRUDER_2_AUTO_FAN_PIN  >  - 1 ) 
 
					 
					 
					 
					          ( defined ( EXTRUDER_2_AUTO_FAN_PIN )  & &  EXTRUDER_2_AUTO_FAN_PIN  >  - 1 )  | |  \
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          ( defined ( EXTRUDER_3_AUTO_FAN_PIN )  & &  EXTRUDER_3_AUTO_FAN_PIN  >  - 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if ( millis ( )  -  extruder_autofan_last_check  >  2500 )  { 
 
					 
					 
					 
					      if ( millis ( )  -  extruder_autofan_last_check  >  2500 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        checkExtruderAutoFans ( ) ; 
 
					 
					 
					 
					        checkExtruderAutoFans ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        extruder_autofan_last_check  =  millis ( ) ; 
 
					 
					 
					 
					        extruder_autofan_last_check  =  millis ( ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -420,6 +424,19 @@ void checkExtruderAutoFans()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        fanState  | =  4 ; 
 
					 
					 
					 
					        fanState  | =  4 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif 
 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # if defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( current_temperature [ 3 ]  >  EXTRUDER_AUTO_FAN_TEMPERATURE )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  ( EXTRUDER_3_AUTO_FAN_PIN  = =  EXTRUDER_0_AUTO_FAN_PIN )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fanState  | =  1 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      else  if  ( EXTRUDER_3_AUTO_FAN_PIN  = =  EXTRUDER_1_AUTO_FAN_PIN )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fanState  | =  2 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      else  if  ( EXTRUDER_3_AUTO_FAN_PIN  = =  EXTRUDER_2_AUTO_FAN_PIN )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fanState  | =  4 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fanState  | =  8 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  
 
					 
					 
					 
					  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // update extruder auto fan states
 
 
					 
					 
					 
					  // update extruder auto fan states
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1 
 
					 
					 
					 
					  # if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -433,7 +450,13 @@ void checkExtruderAutoFans()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( EXTRUDER_2_AUTO_FAN_PIN  ! =  EXTRUDER_0_AUTO_FAN_PIN  
 
					 
					 
					 
					    if  ( EXTRUDER_2_AUTO_FAN_PIN  ! =  EXTRUDER_0_AUTO_FAN_PIN  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        & &  EXTRUDER_2_AUTO_FAN_PIN  ! =  EXTRUDER_1_AUTO_FAN_PIN ) 
 
					 
					 
					 
					        & &  EXTRUDER_2_AUTO_FAN_PIN  ! =  EXTRUDER_1_AUTO_FAN_PIN ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      setExtruderAutoFanState ( EXTRUDER_2_AUTO_FAN_PIN ,  ( fanState  &  4 )  ! =  0 ) ; 
 
					 
					 
					 
					      setExtruderAutoFanState ( EXTRUDER_2_AUTO_FAN_PIN ,  ( fanState  &  4 )  ! =  0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif  
 
					 
					 
					 
					  # endif 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # if defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( EXTRUDER_3_AUTO_FAN_PIN  ! =  EXTRUDER_0_AUTO_FAN_PIN  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        & &  EXTRUDER_3_AUTO_FAN_PIN  ! =  EXTRUDER_1_AUTO_FAN_PIN ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        & &  EXTRUDER_3_AUTO_FAN_PIN  ! =  EXTRUDER_0_AUTO_FAN_PIN ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      setExtruderAutoFanState ( EXTRUDER_3_AUTO_FAN_PIN ,  ( fanState  &  8 )  ! =  0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  // any extruder auto fan pins set
 
 
					 
					 
					 
					# endif  // any extruder auto fan pins set
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -592,13 +615,13 @@ void manage_heater()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							  temp_dState_bed  =  pid_input ; 
 
					 
					 
					 
							  temp_dState_bed  =  pid_input ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							  pid_output  =  pTerm_bed  +  iTerm_bed  -  dTerm_bed ; 
 
					 
					 
					 
							  pid_output  =  pTerm_bed  +  iTerm_bed  -  dTerm_bed ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          	   if  ( pid_output  >  MAX_BED_POWER )  { 
 
					 
					 
					 
					      if  ( pid_output  >  MAX_BED_POWER )  { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            	     if  ( pid_error_bed  >  0  )   temp_iState_bed  - =  pid_error_bed ;  // conditional un-integration
 
 
					 
					 
					 
					        if  ( pid_error_bed  >  0  )   temp_iState_bed  - =  pid_error_bed ;  // conditional un-integration
 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                     pid_output = MAX_BED_POWER ; 
 
					 
					 
					 
					        pid_output = MAX_BED_POWER ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					          	   }  else  if  ( pid_output  <  0 ) { 
 
					 
					 
					 
					      }  else  if  ( pid_output  <  0 ) { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            	     if  ( pid_error_bed  <  0  )   temp_iState_bed  - =  pid_error_bed ;  // conditional un-integration
 
 
					 
					 
					 
					        if  ( pid_error_bed  <  0  )   temp_iState_bed  - =  pid_error_bed ;  // conditional un-integration
 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                     pid_output = 0 ; 
 
					 
					 
					 
					        pid_output = 0 ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                   } 
 
					 
					 
					 
					      } 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # else  
 
					 
					 
					 
					    # else  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      pid_output  =  constrain ( target_temperature_bed ,  0 ,  MAX_BED_POWER ) ; 
 
					 
					 
					 
					      pid_output  =  constrain ( target_temperature_bed ,  0 ,  MAX_BED_POWER ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -830,13 +853,16 @@ void tp_init()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(HEATER_0_PIN) && (HEATER_0_PIN > -1)  
 
					 
					 
					 
					  # if defined(HEATER_0_PIN) && (HEATER_0_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SET_OUTPUT ( HEATER_0_PIN ) ; 
 
					 
					 
					 
					    SET_OUTPUT ( HEATER_0_PIN ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif    
 
					 
					 
					 
					  # endif 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(HEATER_1_PIN) && (HEATER_1_PIN > -1)  
 
					 
					 
					 
					  # if defined(HEATER_1_PIN) && (HEATER_1_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SET_OUTPUT ( HEATER_1_PIN ) ; 
 
					 
					 
					 
					    SET_OUTPUT ( HEATER_1_PIN ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif   
 
					 
					 
					 
					  # endif   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(HEATER_2_PIN) && (HEATER_2_PIN > -1)  
 
					 
					 
					 
					  # if defined(HEATER_2_PIN) && (HEATER_2_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SET_OUTPUT ( HEATER_2_PIN ) ; 
 
					 
					 
					 
					    SET_OUTPUT ( HEATER_2_PIN ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif   
 
					 
					 
					 
					  # endif 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # if defined(HEATER_3_PIN) && (HEATER_3_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    SET_OUTPUT ( HEATER_3_PIN ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(HEATER_BED_PIN) && (HEATER_BED_PIN > -1)  
 
					 
					 
					 
					  # if defined(HEATER_BED_PIN) && (HEATER_BED_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SET_OUTPUT ( HEATER_BED_PIN ) ; 
 
					 
					 
					 
					    SET_OUTPUT ( HEATER_BED_PIN ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif   
 
					 
					 
					 
					  # endif   
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -885,16 +911,23 @@ void tp_init()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif 
 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(TEMP_1_PIN) && (TEMP_1_PIN > -1) 
 
					 
					 
					 
					  # if defined(TEMP_1_PIN) && (TEMP_1_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # if TEMP_1_PIN < 8 
 
					 
					 
					 
					    # if TEMP_1_PIN < 8 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        DIDR0  | =  1 < < TEMP_1_PIN ;  
 
					 
					 
					 
					      DIDR0  | =  1 < < TEMP_1_PIN ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    # else 
 
					 
					 
					 
					    # else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        DIDR2  | =  1 < < ( TEMP_1_PIN  -  8 ) ;  
 
					 
					 
					 
					    	 DIDR2  | =  1 < < ( TEMP_1_PIN  -  8 ) ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    # endif 
 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif 
 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1) 
 
					 
					 
					 
					  # if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # if TEMP_2_PIN < 8 
 
					 
					 
					 
					    # if TEMP_2_PIN < 8 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       DIDR0  | =  1  < <  TEMP_2_PIN ;  
 
					 
					 
					 
					      DIDR0  | =  1  < <  TEMP_2_PIN ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      DIDR2  | =  1 < < ( TEMP_2_PIN  -  8 ) ;  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # if TEMP_3_PIN < 8 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      DIDR0  | =  1  < <  TEMP_3_PIN ;  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # else 
 
					 
					 
					 
					    # else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       DIDR2  | =  1 < < ( TEMP_2_PIN  -  8 ) ;  
 
					 
					 
					 
					      DIDR2  | =  1 < < ( TEMP_ 3 _PIN -  8 ) ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    # endif 
 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif 
 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(TEMP_BED_PIN) && (TEMP_BED_PIN > -1) 
 
					 
					 
					 
					  # if defined(TEMP_BED_PIN) && (TEMP_BED_PIN > -1) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -907,13 +940,13 @@ void tp_init()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  
 
					 
					 
					 
					  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  //Added for Filament Sensor 
 
 
					 
					 
					 
					  //Added for Filament Sensor 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # ifdef FILAMENT_SENSOR 
 
					 
					 
					 
					  # ifdef FILAMENT_SENSOR 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					   # if defined(FILWIDTH_PIN) && (FILWIDTH_PIN > -1)  
 
					 
					 
					 
					     # if defined(FILWIDTH_PIN) && (FILWIDTH_PIN > -1)  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						 # if FILWIDTH_PIN < 8  
 
					 
					 
					 
					       # if FILWIDTH_PIN < 8  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					       	    DIDR0  | =  1 < < FILWIDTH_PIN ;   
 
					 
					 
					 
					        DIDR0  | =  1 < < FILWIDTH_PIN ;   
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						# else   
 
					 
					 
					 
					      # else  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					       	    DIDR2  | =  1 < < ( FILWIDTH_PIN  -  8 ) ;   
 
					 
					 
					 
					        DIDR2  | =  1 < < ( FILWIDTH_PIN  -  8 ) ;   
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						 # endif  
 
					 
					 
					 
					       # endif  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					   # endif 
 
					 
					 
					 
					     # endif 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					  # endif 
 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  
 
					 
					 
					 
					  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Use timer0 for temperature measurement
 
 
					 
					 
					 
					  // Use timer0 for temperature measurement
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -987,6 +1020,28 @@ void tp_init()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  } 
 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  //MAXTEMP 2
 
 
					 
					 
					 
					# endif  //MAXTEMP 2
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if (EXTRUDERS > 3) && defined(HEATER_3_MINTEMP) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  minttemp [ 3 ]  =  HEATER_3_MINTEMP ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  while ( analog2temp ( minttemp_raw [ 3 ] ,  3 )  <  HEATER_3_MINTEMP )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if HEATER_3_RAW_LO_TEMP < HEATER_3_RAW_HI_TEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    minttemp_raw [ 3 ]  + =  OVERSAMPLENR ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    minttemp_raw [ 3 ]  - =  OVERSAMPLENR ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif  //MINTEMP 3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if (EXTRUDERS > 3) && defined(HEATER_3_MAXTEMP) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  maxttemp [ 3 ]  =  HEATER_3_MAXTEMP ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  while ( analog2temp ( maxttemp_raw [ 3 ] ,  3 )  >  HEATER_3_MAXTEMP )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if HEATER_3_RAW_LO_TEMP < HEATER_3_RAW_HI_TEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    maxttemp_raw [ 3 ]  - =  OVERSAMPLENR ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    maxttemp_raw [ 3 ]  + =  OVERSAMPLENR ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif  // MAXTEMP 3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef BED_MINTEMP 
 
					 
					 
					 
					# ifdef BED_MINTEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  /* No bed MINTEMP error implemented?!? */  /*
 
 
					 
					 
					 
					  /* No bed MINTEMP error implemented?!? */  /*
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  while ( analog2tempBed ( bed_minttemp_raw )  <  BED_MINTEMP )  { 
 
					 
					 
					 
					  while ( analog2tempBed ( bed_minttemp_raw )  <  BED_MINTEMP )  { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1075,6 +1130,7 @@ void thermal_runaway_protection(int *state, unsigned long *timer, float temperat
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          disable_e0 ( ) ; 
 
					 
					 
					 
					          disable_e0 ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          disable_e1 ( ) ; 
 
					 
					 
					 
					          disable_e1 ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          disable_e2 ( ) ; 
 
					 
					 
					 
					          disable_e2 ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          disable_e3 ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          manage_heater ( ) ; 
 
					 
					 
					 
					          manage_heater ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          lcd_update ( ) ; 
 
					 
					 
					 
					          lcd_update ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        } 
 
					 
					 
					 
					        } 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1111,8 +1167,17 @@ void disable_heater()
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # if defined(HEATER_2_PIN) && HEATER_2_PIN > -1   
 
					 
					 
					 
					    # if defined(HEATER_2_PIN) && HEATER_2_PIN > -1   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      WRITE ( HEATER_2_PIN , LOW ) ; 
 
					 
					 
					 
					      WRITE ( HEATER_2_PIN , LOW ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # endif 
 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # if defined(TEMP_3_PIN) && TEMP_3_PIN > -1 && EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    target_temperature [ 3 ] = 0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    soft_pwm [ 3 ] = 0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # if defined(HEATER_3_PIN) && HEATER_3_PIN > -1   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      WRITE ( HEATER_3_PIN , LOW ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # endif  
 
					 
					 
					 
					  # endif  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1 
 
					 
					 
					 
					  # if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    target_temperature_bed = 0 ; 
 
					 
					 
					 
					    target_temperature_bed = 0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    soft_pwm_bed = 0 ; 
 
					 
					 
					 
					    soft_pwm_bed = 0 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1227,8 +1292,9 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  long  raw_temp_0_value  =  0 ; 
 
					 
					 
					 
					  static  unsigned  long  raw_temp_0_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  long  raw_temp_1_value  =  0 ; 
 
					 
					 
					 
					  static  unsigned  long  raw_temp_1_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  long  raw_temp_2_value  =  0 ; 
 
					 
					 
					 
					  static  unsigned  long  raw_temp_2_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  static  unsigned  long  raw_temp_3_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  long  raw_temp_bed_value  =  0 ; 
 
					 
					 
					 
					  static  unsigned  long  raw_temp_bed_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  temp_state  =  1 0 ; 
 
					 
					 
					 
					  static  unsigned  char  temp_state  =  1 2 ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  pwm_count  =  ( 1  < <  SOFT_PWM_SCALE ) ; 
 
					 
					 
					 
					  static  unsigned  char  pwm_count  =  ( 1  < <  SOFT_PWM_SCALE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  soft_pwm_0 ; 
 
					 
					 
					 
					  static  unsigned  char  soft_pwm_0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1236,6 +1302,7 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  state_heater_0  =  0 ; 
 
					 
					 
					 
					  static  unsigned  char  state_heater_0  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  state_timer_heater_0  =  0 ; 
 
					 
					 
					 
					  static  unsigned  char  state_timer_heater_0  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  
 
					 
					 
					 
					# endif  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL) 
 
					 
					 
					 
					# if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  soft_pwm_1 ; 
 
					 
					 
					 
					  static  unsigned  char  soft_pwm_1 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1250,6 +1317,14 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  state_timer_heater_2  =  0 ; 
 
					 
					 
					 
					  static  unsigned  char  state_timer_heater_2  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  
 
					 
					 
					 
					# endif  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  static  unsigned  char  soft_pwm_3 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  static  unsigned  char  state_heater_3  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  static  unsigned  char  state_timer_heater_3  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  static  unsigned  char  soft_pwm_b ; 
 
					 
					 
					 
					  static  unsigned  char  soft_pwm_b ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
					 
					 
					 
					# ifdef SLOW_PWM_HEATERS 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1274,7 +1349,7 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      WRITE ( HEATER_1_PIN , 1 ) ; 
 
					 
					 
					 
					      WRITE ( HEATER_1_PIN , 1 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }  else  WRITE ( HEATER_0_PIN , 0 ) ; 
 
					 
					 
					 
					    }  else  WRITE ( HEATER_0_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     
 
					 
					 
					 
					
 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS > 1 
 
					 
					 
					 
					# if EXTRUDERS > 1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    soft_pwm_1  =  soft_pwm [ 1 ] ; 
 
					 
					 
					 
					    soft_pwm_1  =  soft_pwm [ 1 ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( soft_pwm_1  >  0 )  WRITE ( HEATER_1_PIN , 1 ) ;  else  WRITE ( HEATER_1_PIN , 0 ) ; 
 
					 
					 
					 
					    if ( soft_pwm_1  >  0 )  WRITE ( HEATER_1_PIN , 1 ) ;  else  WRITE ( HEATER_1_PIN , 0 ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1283,6 +1358,12 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    soft_pwm_2  =  soft_pwm [ 2 ] ; 
 
					 
					 
					 
					    soft_pwm_2  =  soft_pwm [ 2 ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( soft_pwm_2  >  0 )  WRITE ( HEATER_2_PIN , 1 ) ;  else  WRITE ( HEATER_2_PIN , 0 ) ; 
 
					 
					 
					 
					    if ( soft_pwm_2  >  0 )  WRITE ( HEATER_2_PIN , 1 ) ;  else  WRITE ( HEATER_2_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    soft_pwm_3  =  soft_pwm [ 3 ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if ( soft_pwm_3  >  0 )  WRITE ( HEATER_3_PIN , 1 ) ;  else  WRITE ( HEATER_3_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    soft_pwm_b  =  soft_pwm_bed ; 
 
					 
					 
					 
					    soft_pwm_b  =  soft_pwm_bed ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( soft_pwm_b  >  0 )  WRITE ( HEATER_BED_PIN , 1 ) ;  else  WRITE ( HEATER_BED_PIN , 0 ) ; 
 
					 
					 
					 
					    if ( soft_pwm_b  >  0 )  WRITE ( HEATER_BED_PIN , 1 ) ;  else  WRITE ( HEATER_BED_PIN , 0 ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1298,12 +1379,17 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    WRITE ( HEATER_1_PIN , 0 ) ; 
 
					 
					 
					 
					    WRITE ( HEATER_1_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  } 
 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS > 1 
 
					 
					 
					 
					# if EXTRUDERS > 1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if ( soft_pwm_1  <  pwm_count )  WRITE ( HEATER_1_PIN , 0 ) ; 
 
					 
					 
					 
					  if ( soft_pwm_1  <  pwm_count )  WRITE ( HEATER_1_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS > 2 
 
					 
					 
					 
					# if EXTRUDERS > 2 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if ( soft_pwm_2  <  pwm_count )  WRITE ( HEATER_2_PIN , 0 ) ; 
 
					 
					 
					 
					  if ( soft_pwm_2  <  pwm_count )  WRITE ( HEATER_2_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if ( soft_pwm_3  <  pwm_count )  WRITE ( HEATER_3_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if ( soft_pwm_b  <  pwm_count )  WRITE ( HEATER_BED_PIN , 0 ) ; 
 
					 
					 
					 
					  if ( soft_pwm_b  <  pwm_count )  WRITE ( HEATER_BED_PIN , 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1405,7 +1491,33 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      } 
 
					 
					 
					 
					      } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // EXTRUDER 3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    soft_pwm_3  =  soft_pwm [ 3 ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( soft_pwm_3  >  0 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      // turn ON heather only if the minimum time is up 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  ( state_timer_heater_3  = =  0 )  {  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						// if change state set timer 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						if  ( state_heater_3  = =  0 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						  state_timer_heater_3  =  MIN_STATE_TIME ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						state_heater_3  =  1 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						WRITE ( HEATER_3_PIN ,  1 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    }  else  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      // turn OFF heather only if the minimum time is up 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  ( state_timer_heater_3  = =  0 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						// if change state set timer 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						if  ( state_heater_3  = =  1 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						  state_timer_heater_3  =  MIN_STATE_TIME ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						state_heater_3  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						WRITE ( HEATER_3_PIN ,  0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // BED
 
 
					 
					 
					 
					    // BED
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    soft_pwm_b  =  soft_pwm_bed ; 
 
					 
					 
					 
					    soft_pwm_b  =  soft_pwm_bed ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1478,6 +1590,21 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  } 
 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  // EXTRUDER 3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  ( soft_pwm_3  <  slow_pwm_count )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // turn OFF heather only if the minimum time is up 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( state_timer_heater_3  = =  0 )  {  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      // if change state set timer 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  ( state_heater_3  = =  1 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						state_timer_heater_3  =  MIN_STATE_TIME ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      state_heater_3  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      WRITE ( HEATER_3_PIN ,  0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  
 
					 
					 
					 
					  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // BED
 
 
					 
					 
					 
					  // BED
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1526,6 +1653,12 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( state_timer_heater_2  >  0 )  
 
					 
					 
					 
					    if  ( state_timer_heater_2  >  0 )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      state_timer_heater_2 - - ; 
 
					 
					 
					 
					      state_timer_heater_2 - - ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Extruder 3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( state_timer_heater_3  >  0 )  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      state_timer_heater_3 - - ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    
 
					 
					 
					 
					    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
					 
					 
					 
					# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Bed   
 
 
					 
					 
					 
					    // Bed   
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1614,10 +1747,28 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1) 
 
					 
					 
					 
					      # if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        raw_temp_2_value  + =  ADC ; 
 
					 
					 
					 
					        raw_temp_2_value  + =  ADC ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # endif 
 
					 
					 
					 
					      # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      temp_state  =  8 ; //change so that Filament Width is also measured
 
 
					 
					 
					 
					      temp_state  =  8 ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      break ; 
 
					 
					 
					 
					      break ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    case  8 :  //Prepare FILWIDTH 
 
 
					 
					 
					 
					    case  8 :  // Prepare TEMP_3
 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        # if TEMP_3_PIN > 7 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          ADCSRB  =  1 < < MUX5 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        # else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          ADCSRB  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ADMUX  =  ( ( 1  < <  REFS0 )  |  ( TEMP_3_PIN  &  0x07 ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ADCSRA  | =  1 < < ADSC ;  // Start conversion
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      lcd_buttons_update ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      temp_state  =  9 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      break ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    case  9 :  // Measure TEMP_3
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        raw_temp_3_value  + =  ADC ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      temp_state  =  10 ;  //change so that Filament Width is also measured
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      break ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    case  10 :  //Prepare FILWIDTH 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     # if defined(FILWIDTH_PIN) && (FILWIDTH_PIN> -1)  
 
					 
					 
					 
					     # if defined(FILWIDTH_PIN) && (FILWIDTH_PIN> -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # if FILWIDTH_PIN>7  
 
					 
					 
					 
					      # if FILWIDTH_PIN>7  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         ADCSRB  =  1 < < MUX5 ; 
 
					 
					 
					 
					         ADCSRB  =  1 < < MUX5 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1628,9 +1779,9 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ADCSRA  | =  1 < < ADSC ;  // Start conversion 
 
 
					 
					 
					 
					      ADCSRA  | =  1 < < ADSC ;  // Start conversion 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     # endif  
 
					 
					 
					 
					     # endif  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     lcd_buttons_update ( ) ;        
 
					 
					 
					 
					     lcd_buttons_update ( ) ;        
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     temp_state  =  9 ;  
 
					 
					 
					 
					     temp_state  =  11 ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     break ;  
 
					 
					 
					 
					     break ;  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    case  9 :    //Measure FILWIDTH 
 
 
					 
					 
					 
					    case  11 :    //Measure FILWIDTH 
 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     # if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)  
 
					 
					 
					 
					     # if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)  
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     //raw_filwidth_value += ADC;  //remove to use an IIR filter approach 
 
 
					 
					 
					 
					     //raw_filwidth_value += ADC;  //remove to use an IIR filter approach 
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if ( ADC > 102 )   //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
 
 
					 
					 
					 
					      if ( ADC > 102 )   //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1646,7 +1797,7 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     break ;       
 
					 
					 
					 
					     break ;       
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      
 
					 
					 
					 
					      
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      
 
					 
					 
					 
					      
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    case  1 0 :  //Startup, delay initial temp reading a tiny bit so the hardware can settle.
 
 
					 
					 
					 
					    case  1 2 :  //Startup, delay initial temp reading a tiny bit so the hardware can settle.
 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      temp_state  =  0 ; 
 
					 
					 
					 
					      temp_state  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      break ; 
 
					 
					 
					 
					      break ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					//    default:
 
 
					 
					 
					 
					//    default:
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1668,6 +1819,9 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS > 2 
 
					 
					 
					 
					# if EXTRUDERS > 2 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      current_temperature_raw [ 2 ]  =  raw_temp_2_value ; 
 
					 
					 
					 
					      current_temperature_raw [ 2 ]  =  raw_temp_2_value ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      current_temperature_raw [ 3 ]  =  raw_temp_3_value ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      current_temperature_bed_raw  =  raw_temp_bed_value ; 
 
					 
					 
					 
					      current_temperature_bed_raw  =  raw_temp_bed_value ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1683,6 +1837,7 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    raw_temp_0_value  =  0 ; 
 
					 
					 
					 
					    raw_temp_0_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    raw_temp_1_value  =  0 ; 
 
					 
					 
					 
					    raw_temp_1_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    raw_temp_2_value  =  0 ; 
 
					 
					 
					 
					    raw_temp_2_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    raw_temp_3_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    raw_temp_bed_value  =  0 ; 
 
					 
					 
					 
					    raw_temp_bed_value  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP 
 
					 
					 
					 
					# if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1699,6 +1854,8 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        min_temp_error ( 0 ) ; 
 
					 
					 
					 
					        min_temp_error ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if EXTRUDERS > 1 
 
					 
					 
					 
					# if EXTRUDERS > 1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP 
 
					 
					 
					 
					# if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( current_temperature_raw [ 1 ]  < =  maxttemp_raw [ 1 ] )  { 
 
					 
					 
					 
					    if ( current_temperature_raw [ 1 ]  < =  maxttemp_raw [ 1 ] )  { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1731,7 +1888,24 @@ ISR(TIMER0_COMPB_vect)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        min_temp_error ( 2 ) ; 
 
					 
					 
					 
					        min_temp_error ( 2 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif 
 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  
 
					 
					 
					 
					# if EXTRUDERS > 3 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if ( current_temperature_raw [ 3 ]  < =  maxttemp_raw [ 3 ] )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if ( current_temperature_raw [ 3 ]  > =  maxttemp_raw [ 3 ] )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        max_temp_error ( 3 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if ( current_temperature_raw [ 3 ]  > =  minttemp_raw [ 3 ] )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if ( current_temperature_raw [ 3 ]  < =  minttemp_raw [ 3 ] )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        min_temp_error ( 3 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  /* No bed MINTEMP error? */ 
 
					 
					 
					 
					  /* No bed MINTEMP error? */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0) 
 
					 
					 
					 
					# if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					#  if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP 
 
					 
					 
					 
					#  if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1790,5 +1964,3 @@ float unscalePID_d(float d)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# endif  //PIDTEMP
 
 
					 
					 
					 
					# endif  //PIDTEMP