Changed comment mode for detection.
Added M221 extuder multiply factor.
This commit is contained in:
		| @@ -98,7 +98,8 @@ | ||||
| // M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2  also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate | ||||
| // M205 -  advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk | ||||
| // M206 - set additional homeing offset | ||||
| // M220 - set speed factor override percentage S:factor in percent | ||||
| // M220 S<factor in percent>- set speed factor override percentage | ||||
| // M221 S<factor in percent>- set extrude factor override percentage | ||||
| // M240 - Trigger a camera to take a photograph | ||||
| // M301 - Set PID parameters P I and D | ||||
| // M302 - Allow cold extrudes | ||||
| @@ -126,6 +127,8 @@ bool axis_relative_modes[] = AXIS_RELATIVE_MODES; | ||||
| volatile int feedmultiply=100; //100->1 200->2 | ||||
| int saved_feedmultiply; | ||||
| volatile bool feedmultiplychanged=false; | ||||
| volatile int extrudemultiply=100; //100->1 200->2 | ||||
| volatile bool extrudemultiplychanged=false; | ||||
| float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0 }; | ||||
| float add_homeing[3]={0,0,0}; | ||||
| uint8_t active_extruder = 0; | ||||
| @@ -332,9 +335,13 @@ void get_command() | ||||
|     serial_char = MYSERIAL.read(); | ||||
|     if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )  | ||||
|     { | ||||
|       if(!serial_count) return; //if empty line | ||||
|       if(!serial_count) { //if empty line | ||||
|         comment_mode = false; //for new command | ||||
|         return; | ||||
|       } | ||||
|       cmdbuffer[bufindw][serial_count] = 0; //terminate string | ||||
|       if(!comment_mode){ | ||||
|         comment_mode = false; //for new command | ||||
|         fromsd[bufindw] = false; | ||||
|         if(strstr(cmdbuffer[bufindw], "N") != NULL) | ||||
|         { | ||||
| @@ -411,9 +418,7 @@ void get_command() | ||||
|         } | ||||
|         bufindw = (bufindw + 1)%BUFSIZE; | ||||
|         buflen += 1; | ||||
|  | ||||
|       } | ||||
|       comment_mode = false; //for new command | ||||
|       serial_count = 0; //clear buffer | ||||
|     } | ||||
|     else | ||||
| @@ -447,10 +452,9 @@ void get_command() | ||||
|         card.checkautostart(true); | ||||
|          | ||||
|       } | ||||
|       if(serial_char=='\n') | ||||
|          comment_mode = false; //for new command | ||||
|       if(!serial_count) | ||||
|       { | ||||
|         comment_mode = false; //for new command | ||||
|         return; //if empty line | ||||
|       } | ||||
|       cmdbuffer[bufindw][serial_count] = 0; //terminate string | ||||
| @@ -459,6 +463,7 @@ void get_command() | ||||
|         buflen += 1; | ||||
|         bufindw = (bufindw + 1)%BUFSIZE; | ||||
|       }      | ||||
|       comment_mode = false; //for new command | ||||
|       serial_count = 0; //clear buffer | ||||
|     } | ||||
|     else | ||||
| @@ -1100,8 +1105,14 @@ void process_commands() | ||||
|       } | ||||
|     } | ||||
|     break; | ||||
|      | ||||
|      | ||||
|     case 221: // M221 S<factor in percent>- set extrude factor override percentage | ||||
|     { | ||||
|       if(code_seen('S'))  | ||||
|       { | ||||
|         extrudemultiply = code_value() ; | ||||
|         extrudemultiplychanged=true; | ||||
|     } | ||||
|     break; | ||||
|  | ||||
|     #ifdef PIDTEMP | ||||
|     case 301: // M301 | ||||
|   | ||||
| @@ -81,6 +81,8 @@ long position[4];   //rescaled from extern when axis_steps_per_unit are changed | ||||
| static float previous_speed[4]; // Speed of previous path line segment | ||||
| static float previous_nominal_speed; // Nominal speed of previous path line segment | ||||
|  | ||||
| extern volatile int extrudemultiply; // Sets extrude multiply factor (in percent) | ||||
|  | ||||
| #ifdef AUTOTEMP | ||||
|     float autotemp_max=250; | ||||
|     float autotemp_min=210; | ||||
| @@ -474,8 +476,6 @@ void plan_buffer_line(float &x, float &y, float &z, float &e, float feed_rate, u | ||||
|   target[Z_AXIS] = lround(z*axis_steps_per_unit[Z_AXIS]);      | ||||
|   target[E_AXIS] = lround(e*axis_steps_per_unit[E_AXIS]); | ||||
|    | ||||
|  | ||||
|    | ||||
|   #ifdef PREVENT_DANGEROUS_EXTRUDE | ||||
|     if(target[E_AXIS]!=position[E_AXIS]) | ||||
|     if(degHotend(active_extruder)<EXTRUDE_MINTEMP && !allow_cold_extrude) | ||||
| @@ -503,6 +503,8 @@ void plan_buffer_line(float &x, float &y, float &z, float &e, float feed_rate, u | ||||
|   block->steps_y = labs(target[Y_AXIS]-position[Y_AXIS]); | ||||
|   block->steps_z = labs(target[Z_AXIS]-position[Z_AXIS]); | ||||
|   block->steps_e = labs(target[E_AXIS]-position[E_AXIS]); | ||||
|   block->steps_e *= extrudemultiply; | ||||
|   block-?steps_e /= 100; | ||||
|   block->step_event_count = max(block->steps_x, max(block->steps_y, max(block->steps_z, block->steps_e))); | ||||
|  | ||||
|   // Bail if this is a zero-length block | ||||
| @@ -531,7 +533,7 @@ void plan_buffer_line(float &x, float &y, float &z, float &e, float feed_rate, u | ||||
|   delta_mm[X_AXIS] = (target[X_AXIS]-position[X_AXIS])/axis_steps_per_unit[X_AXIS]; | ||||
|   delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]; | ||||
|   delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]; | ||||
|   delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS]; | ||||
|   delta_mm[E_AXIS] = ((target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS])*extrudemultiply/100.0; | ||||
|   if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { | ||||
|     block->millimeters = abs(delta_mm[E_AXIS]); | ||||
|   } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user