diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index f4f92fee7..d4c2fdb18 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2025,14 +2025,14 @@ static void do_blocking_move_to(float x, float y, float z) { feedrate = homing_feedrate[Z_AXIS]; current_position[Z_AXIS] = z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line_curposXYZE(feedrate/60, active_extruder); st_synchronize(); feedrate = XY_TRAVEL_SPEED; current_position[X_AXIS] = x; current_position[Y_AXIS] = y; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line_curposXYZE(feedrate/60, active_extruder); st_synchronize(); feedrate = oldFeedRate; @@ -2362,77 +2362,77 @@ void ramming() { max_feedrate[E_AXIS] = 50; //current_position[E_AXIS] -= 8; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder); + //plan_buffer_line_curposXYZE(2100 / 60, active_extruder); //current_position[E_AXIS] += 8; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder); + //plan_buffer_line_curposXYZE(2100 / 60, active_extruder); current_position[E_AXIS] += 5.4; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2800 / 60, active_extruder); + plan_buffer_line_curposXYZE(2800 / 60, active_extruder); current_position[E_AXIS] += 3.2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[E_AXIS] += 3; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3400 / 60, active_extruder); + plan_buffer_line_curposXYZE(3400 / 60, active_extruder); st_synchronize(); max_feedrate[E_AXIS] = 80; current_position[E_AXIS] -= 82; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 9500 / 60, active_extruder); + plan_buffer_line_curposXYZE(9500 / 60, active_extruder); max_feedrate[E_AXIS] = 50;//tmp[E_AXIS]; current_position[E_AXIS] -= 20; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1200 / 60, active_extruder); + plan_buffer_line_curposXYZE(1200 / 60, active_extruder); current_position[E_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); + plan_buffer_line_curposXYZE(400 / 60, active_extruder); current_position[E_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] -= 10; st_synchronize(); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] += 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] -= 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder); + plan_buffer_line_curposXYZE(800 / 60, active_extruder); current_position[E_AXIS] += 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder); + plan_buffer_line_curposXYZE(800 / 60, active_extruder); current_position[E_AXIS] -= 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder); + plan_buffer_line_curposXYZE(800 / 60, active_extruder); st_synchronize(); } else { //ABS max_feedrate[E_AXIS] = 50; //current_position[E_AXIS] -= 8; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder); + //plan_buffer_line_curposXYZE(2100 / 60, active_extruder); //current_position[E_AXIS] += 8; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder); + //plan_buffer_line_curposXYZE(2100 / 60, active_extruder); current_position[E_AXIS] += 3.1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); + plan_buffer_line_curposXYZE(2000 / 60, active_extruder); current_position[E_AXIS] += 3.1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder); + plan_buffer_line_curposXYZE(2500 / 60, active_extruder); current_position[E_AXIS] += 4; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); //current_position[X_AXIS] += 23; //delay - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600/60, active_extruder); //delay + //plan_buffer_line_curposXYZE(600/60, active_extruder); //delay //current_position[X_AXIS] -= 23; //delay - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600/60, active_extruder); //delay + //plan_buffer_line_curposXYZE(600/60, active_extruder); //delay _delay(4700); max_feedrate[E_AXIS] = 80; current_position[E_AXIS] -= 92; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 9900 / 60, active_extruder); + plan_buffer_line_curposXYZE(9900 / 60, active_extruder); max_feedrate[E_AXIS] = 50;//tmp[E_AXIS]; current_position[E_AXIS] -= 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder); + plan_buffer_line_curposXYZE(800 / 60, active_extruder); current_position[E_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); + plan_buffer_line_curposXYZE(400 / 60, active_extruder); current_position[E_AXIS] -= 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); st_synchronize(); current_position[E_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] -= 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); current_position[E_AXIS] -= 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + plan_buffer_line_curposXYZE(600 / 60, active_extruder); st_synchronize(); } @@ -2491,7 +2491,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon if (home_all_axes) { current_position[Z_AXIS] += MESH_HOME_Z_SEARCH; feedrate = homing_feedrate[Z_AXIS]; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder); + plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); st_synchronize(); } #ifdef ENABLE_AUTO_BED_LEVELING @@ -2809,7 +2809,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) enable_endstops(false); current_position[X_AXIS] += 5; current_position[Y_AXIS] += 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); // Let the user move the Z axes up to the end stoppers. @@ -2859,7 +2859,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) bool endstops_enabled = enable_endstops(false); current_position[Z_AXIS] -= 1; //move 1mm down with disabled endstop - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); // Move the print head close to the bed. @@ -2870,7 +2870,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) tmc2130_home_enter(Z_AXIS_MASK); #endif //TMC2130 - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); #ifdef TMC2130 @@ -2910,7 +2910,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) clean_up_after_endstop_move(l_feedmultiply); // Print head up. current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); //#ifndef NEW_XYZCAL if (result >= 0) @@ -2930,7 +2930,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) clean_up_after_endstop_move(l_feedmultiply); // Print head up. current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); // if (result >= 0) babystep_apply(); #endif //HEATBED_V2 @@ -3040,21 +3040,18 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float //Retract E current_position[E_AXIS] += e_shift; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], FILAMENTCHANGE_RFEED, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_RFEED, active_extruder); st_synchronize(); //Lift Z current_position[Z_AXIS] += z_shift; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], FILAMENTCHANGE_ZFEED, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_ZFEED, active_extruder); st_synchronize(); //Move XY to side current_position[X_AXIS] = x_position; current_position[Y_AXIS] = y_position; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED, active_extruder); st_synchronize(); //Beep, manage nozzle heater and wait for user to start unload filament @@ -3079,8 +3076,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT)); current_position[X_AXIS] -= 100; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED, active_extruder); st_synchronize(); lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually."));////MSG_CHECK_IDLER c=20 r=4 } @@ -3117,8 +3113,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float if (!automatic) { current_position[E_AXIS] += FILAMENTCHANGE_RECFEED; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], FILAMENTCHANGE_EXFEED, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_EXFEED, active_extruder); } //Move XY back @@ -3185,12 +3180,12 @@ void gcode_M701() lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT)); current_position[E_AXIS] += 40; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence + plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence st_synchronize(); marlin_rise_z(); current_position[E_AXIS] += 30; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence + plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence load_filament_final_feed(); //slow sequence st_synchronize(); @@ -4389,15 +4384,15 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) if (result) { current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[Z_AXIS] = 50; current_position[Y_AXIS] = 180; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET)); current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1); current_position[X_AXIS] = pgm_read_float(bed_ref_points_4); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); gcode_G28(false, false, true); @@ -4405,7 +4400,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) if ((current_temperature_pinda > 35) && (farm_mode == false)) { //waiting for PIDNA probe to cool down in case that we are not in farm mode current_position[Z_AXIS] = 100; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); if (lcd_wait_for_pinda(35) == false) { //waiting for PINDA probe to cool, if this takes more then time expected, temp. cal. fails lcd_temp_cal_show_result(false); break; @@ -4429,12 +4424,12 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) custom_message_state = 1; lcd_setstatuspgm(_T(MSG_TEMP_CALIBRATION)); current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[Z_AXIS] = PINDA_PREHEAT_Z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); while (current_temperature_pinda < start_temp) @@ -4446,10 +4441,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); //invalidate temp. calibration in case that in will be aborted during the calibration process current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = pgm_read_float(bed_ref_points_4); current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); bool find_z_result = find_bed_induction_sensor_point_z(-1.f); @@ -4477,12 +4472,12 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) setTargetBed(50 + 10 * (temp - 30) / 5); // setTargetHotend(255, 0); current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[Z_AXIS] = PINDA_PREHEAT_Z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); while (current_temperature_pinda < temp) { @@ -4490,10 +4485,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) serialecho_temperatures(); } current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = pgm_read_float(bed_ref_points_4); current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); find_z_result = find_bed_induction_sensor_point_z(-1.f); if (find_z_result == false) { @@ -4533,7 +4528,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; current_position[Z_AXIS] = PINDA_PREHEAT_Z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); while (abs(degBed() - PINDA_MIN_T) > 1) { @@ -4549,11 +4544,11 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); //invalidate temp. calibration in case that in will be aborted during the calibration process current_position[Z_AXIS] = 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = BED_X0; current_position[Y_AXIS] = BED_Y0; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); find_bed_induction_sensor_point_z(-1.f); @@ -4570,7 +4565,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; current_position[Z_AXIS] = PINDA_PREHEAT_Z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); while (degBed() < t_c) { delay_keep_alive(1000); @@ -4581,10 +4576,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) serialecho_temperatures(); } current_position[Z_AXIS] = 5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[X_AXIS] = BED_X0; current_position[Y_AXIS] = BED_Y0; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); find_bed_induction_sensor_point_z(-1.f); z_shift = (int)((current_position[Z_AXIS] - zero_z)*cs.axis_steps_per_unit[Z_AXIS]); @@ -4725,7 +4720,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) // Cycle through all points and probe them // First move up. During this first movement, the babystepping will be reverted. current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 60, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder); // The move to the first calibration point. current_position[X_AXIS] = BED_X0; current_position[Y_AXIS] = BED_Y0; @@ -4740,7 +4735,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); #endif //SUPPORT_VERBOSITY - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[X_AXIS] / 30, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[X_AXIS] / 30, active_extruder); // Wait until the move is finished. st_synchronize(); @@ -4792,7 +4787,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) if((ix == 0) && (iy == 0)) current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; else current_position[Z_AXIS] += 2.f / nMeasPoints; //use relative movement from Z coordinate where PINDa triggered on previous point. This makes calibration faster. float init_z_bckp = current_position[Z_AXIS]; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); st_synchronize(); // Move to XY position of the sensor point. @@ -4813,7 +4808,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) #endif // SUPPORT_VERBOSITY //printf_P(PSTR("after clamping: [%f;%f]\n"), current_position[X_AXIS], current_position[Y_AXIS]); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], XY_AXIS_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(XY_AXIS_FEEDRATE, active_extruder); st_synchronize(); // Go down until endstop is hit @@ -4825,7 +4820,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) if (init_z_bckp - current_position[Z_AXIS] < 0.1f) { //broken cable or initial Z coordinate too low. Go to MESH_HOME_Z_SEARCH and repeat last step (z-probe) again to distinguish between these two cases. //printf_P(PSTR("Another attempt! Current Z position: %f\n"), current_position[Z_AXIS]); current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); st_synchronize(); if (!find_bed_induction_sensor_point_z((has_z && mesh_point > 0) ? z0 - Z_CALIBRATION_THRESHOLD : -10.f, nProbeRetry)) { //if we have data from z calibration max allowed difference is 1mm for each point, if we dont have data max difference is 10mm from initial point @@ -4880,7 +4875,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) MYSERIAL.print(current_position[Z_AXIS], 5); } #endif // SUPPORT_VERBOSITY - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); st_synchronize(); if (mesh_point != nMeasPoints * nMeasPoints) { Sound_MakeSound(e_SOUND_TYPE_StandardAlert); @@ -4897,14 +4892,14 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) // ~ Z-homing (can not be used "G28", because X & Y-homing would have been done before (Z-homing)) bState=enable_z_endstop(false); current_position[Z_AXIS] -= 1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); enable_z_endstop(true); #ifdef TMC2130 tmc2130_home_enter(Z_AXIS_MASK); #endif // TMC2130 current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder); st_synchronize(); #ifdef TMC2130 tmc2130_home_exit(); @@ -5037,7 +5032,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) //unretract (after PINDA preheat retraction) if (degHotend(active_extruder) > EXTRUDE_MINTEMP && temp_cal_active == true && calibration_status_pinda() == true && target_temperature_bed >= 50) { current_position[E_AXIS] += default_retraction; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder); + plan_buffer_line_curposXYZE(400, active_extruder); } KEEPALIVE_STATE(NOT_BUSY); // Restore custom message state @@ -9022,7 +9017,7 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi card.openFile(filename_wldsd, false); /*destination[Z_AXIS] = mesh_home_z_search; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + //plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); for(int8_t i=0; i < NUM_AXIS; i++) { @@ -9056,7 +9051,7 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi if (iy & 1) ix = (x_points_num - 1) - ix; // Zig zag float z0 = 0.f; /*destination[Z_AXIS] = mesh_home_z_search; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + //plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); for(int8_t i=0; i < NUM_AXIS; i++) { @@ -9220,7 +9215,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_ card.openFile(filename_wldsd, false); current_position[Z_AXIS] = mesh_home_z_search; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 60, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder); int XY_AXIS_FEEDRATE = homing_feedrate[X_AXIS] / 20; int Z_LIFT_FEEDRATE = homing_feedrate[Z_AXIS] / 40; @@ -9245,14 +9240,14 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_ if (iy & 1) ix = (x_points_num - 1) - ix; // Zig zag float z0 = 0.f; current_position[Z_AXIS] = mesh_home_z_search; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder); st_synchronize(); current_position[X_AXIS] = 13.f + ix * (x_dimension / (x_points_num - 1)) - bed_zero_ref_x + shift_x; current_position[Y_AXIS] = 6.4f + iy * (y_dimension / (y_points_num - 1)) - bed_zero_ref_y + shift_y; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], XY_AXIS_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(XY_AXIS_FEEDRATE, active_extruder); st_synchronize(); if (!find_bed_induction_sensor_point_z(-10.f)) { //if we have data from z calibration max allowed difference is 1mm for each point, if we dont have data max difference is 10mm from initial point @@ -9366,12 +9361,12 @@ void temp_compensation_start() { if (degHotend(active_extruder) > EXTRUDE_MINTEMP) { current_position[E_AXIS] -= default_retraction; } - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder); + plan_buffer_line_curposXYZE(400, active_extruder); current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; current_position[Z_AXIS] = PINDA_PREHEAT_Z; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); st_synchronize(); while (fabs(degBed() - target_temperature_bed) > 1) delay_keep_alive(1000); @@ -9492,17 +9487,17 @@ void long_pause() //long pause print //retract current_position[E_AXIS] -= default_retraction; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder); + plan_buffer_line_curposXYZE(400, active_extruder); //lift z current_position[Z_AXIS] += Z_PAUSE_LIFT; if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder); + plan_buffer_line_curposXYZE(15, active_extruder); //Move XY to side current_position[X_AXIS] = X_PAUSE_POS; current_position[Y_AXIS] = Y_PAUSE_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); // Turn off the print fan fanSpeed = 0; @@ -9654,7 +9649,7 @@ void uvlo_() #if 0 // Move the print head to the side of the print until all the power stored in the power supply capacitors is depleted. current_position[X_AXIS] = (current_position[X_AXIS] < 0.5f * (X_MIN_POS + X_MAX_POS)) ? X_MIN_POS : X_MAX_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + plan_buffer_line_curposXYZE(500, active_extruder); st_synchronize(); #endif wdt_enable(WDTO_500MS); @@ -10290,7 +10285,7 @@ static void print_time_remaining_init() void load_filament_final_feed() { current_position[E_AXIS]+= FILAMENTCHANGE_FINALFEED; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_EFEED_FINAL, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FINAL, active_extruder); } //! @brief Wait for user to check the state @@ -10420,22 +10415,22 @@ void M600_load_filament_movements() do { current_position[E_AXIS] += 0.002; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + plan_buffer_line_curposXYZE(500, active_extruder); delay_keep_alive(2); } while (!lcd_clicked()); st_synchronize(); current_position[E_AXIS] += bowden_length[mmu_extruder]; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000, active_extruder); + plan_buffer_line_curposXYZE(3000, active_extruder); current_position[E_AXIS] += FIL_LOAD_LENGTH - 60; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1400, active_extruder); + plan_buffer_line_curposXYZE(1400, active_extruder); current_position[E_AXIS] += 40; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder); + plan_buffer_line_curposXYZE(400, active_extruder); current_position[E_AXIS] += 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); #else current_position[E_AXIS]+= FILAMENTCHANGE_FIRSTFEED ; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_EFEED_FIRST, active_extruder); + plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST, active_extruder); #endif load_filament_final_feed(); lcd_loading_filament(); diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 1edac56bf..6466edc45 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -919,7 +919,7 @@ static inline void go_xy(float x, float y, float fr) static inline void go_to_current(float fr) { - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], fr, active_extruder); + plan_buffer_line_curposXYZE(fr, active_extruder); st_synchronize(); } @@ -2769,7 +2769,7 @@ bool sample_z() { //make space current_position[Z_AXIS] += 150; go_to_current(homing_feedrate[Z_AXIS] / 60); - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder);); + //plan_buffer_line_curposXYZE(feedrate, active_extruder);); lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET)); diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 2c81a6e83..e7a59e75c 100755 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -537,7 +537,7 @@ void mmu_command(MmuCmd cmd) void mmu_load_step(bool synchronize) { current_position[E_AXIS] = current_position[E_AXIS] + MMU_LOAD_FEEDRATE * 0.1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); if (synchronize) st_synchronize(); } @@ -602,7 +602,7 @@ bool mmu_get_response(uint8_t move) { printf_P(PSTR("Unload 1\n")); current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); st_synchronize(); } } @@ -620,7 +620,7 @@ bool mmu_get_response(uint8_t move) { printf_P(PSTR("Unload 2\n")); current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); st_synchronize(); } } @@ -698,13 +698,13 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move) //lift z current_position[Z_AXIS] += Z_PAUSE_LIFT; if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder); + plan_buffer_line_curposXYZE(15, active_extruder); st_synchronize(); //Move XY to side current_position[X_AXIS] = X_PAUSE_POS; current_position[Y_AXIS] = Y_PAUSE_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); st_synchronize(); } if (turn_off_nozzle) { @@ -762,10 +762,10 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move) lcd_display_message_fullscreen_P(_i("MMU OK. Resuming position...")); current_position[X_AXIS] = x_position_bckp; current_position[Y_AXIS] = y_position_bckp; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); st_synchronize(); current_position[Z_AXIS] = z_position_bckp; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder); + plan_buffer_line_curposXYZE(15, active_extruder); st_synchronize(); } else { @@ -804,19 +804,19 @@ void mmu_load_to_nozzle() current_position[E_AXIS] += 7.2f; } float feedrate = 562; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder); + plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); st_synchronize(); current_position[E_AXIS] += 14.4f; feedrate = 871; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder); + plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); st_synchronize(); current_position[E_AXIS] += 36.0f; feedrate = 1393; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder); + plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); st_synchronize(); current_position[E_AXIS] += 14.4f; feedrate = 871; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder); + plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); st_synchronize(); if (!saved_e_relative_mode) axis_relative_modes[E_AXIS] = false; } @@ -903,7 +903,7 @@ void extr_mov(float shift, float feed_rate) { //move extruder no matter what the current heater temperature is set_extrude_min_temp(.0); current_position[E_AXIS] += shift; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, active_extruder); + plan_buffer_line_curposXYZE(feed_rate, active_extruder); set_extrude_min_temp(EXTRUDE_MINTEMP); } #endif //SNMM @@ -1069,8 +1069,7 @@ void mmu_filament_ramming() for(uint8_t i = 0; i < (sizeof(ramming_sequence)/sizeof(E_step));++i) { current_position[E_AXIS] += pgm_read_float(&(ramming_sequence[i].extrude)); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder); + plan_buffer_line_curposXYZE(pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder); st_synchronize(); } } @@ -1140,39 +1139,39 @@ void extr_unload() lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT)); if (current_position[Z_AXIS] < 15) { current_position[Z_AXIS] += 15; //lifting in Z direction to make space for extrusion - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 25, active_extruder); + plan_buffer_line_curposXYZE(25, active_extruder); } current_position[E_AXIS] += 10; //extrusion - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 10, active_extruder); + plan_buffer_line_curposXYZE(10, active_extruder); st_current_set(2, E_MOTOR_HIGH_CURRENT); if (current_temperature[0] < 230) { //PLA & all other filaments current_position[E_AXIS] += 5.4; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2800 / 60, active_extruder); + plan_buffer_line_curposXYZE(2800 / 60, active_extruder); current_position[E_AXIS] += 3.2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); current_position[E_AXIS] += 3; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3400 / 60, active_extruder); + plan_buffer_line_curposXYZE(3400 / 60, active_extruder); } else { //ABS current_position[E_AXIS] += 3.1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); + plan_buffer_line_curposXYZE(2000 / 60, active_extruder); current_position[E_AXIS] += 3.1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder); + plan_buffer_line_curposXYZE(2500 / 60, active_extruder); current_position[E_AXIS] += 4; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + plan_buffer_line_curposXYZE(3000 / 60, active_extruder); /*current_position[X_AXIS] += 23; //delay - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay + plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay current_position[X_AXIS] -= 23; //delay - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay*/ + plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay*/ delay_keep_alive(4700); } max_feedrate[E_AXIS] = 80; current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + plan_buffer_line_curposXYZE(500, active_extruder); current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + plan_buffer_line_curposXYZE(500, active_extruder); st_synchronize(); //st_current_init(); if (SilentMode != SILENT_MODE_OFF) st_current_set(2, tmp_motor[2]); //set back to normal operation currents @@ -1465,11 +1464,9 @@ bFilamentAction=false; // NOT in "mmu_fil_eject_menu( static bool can_load() { current_position[E_AXIS] += 60; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); current_position[E_AXIS] -= 52; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); st_synchronize(); uint_least8_t filament_detected_count = 0; @@ -1479,8 +1476,7 @@ static bool can_load() for(uint_least8_t i = 0; i < steps; ++i) { current_position[E_AXIS] -= e_increment; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder); + plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); st_synchronize(); if(0 == PIN_GET(IR_SENSOR_PIN)) { @@ -1601,13 +1597,13 @@ void mmu_continue_loading(bool blocking) //lift z current_position[Z_AXIS] += Z_PAUSE_LIFT; if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder); + plan_buffer_line_curposXYZE(15, active_extruder); st_synchronize(); //Move XY to side current_position[X_AXIS] = X_PAUSE_POS; current_position[Y_AXIS] = Y_PAUSE_POS; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); st_synchronize(); mmu_command(MmuCmd::U0); diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index 4a8d6659a..752d07258 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -651,11 +651,15 @@ void planner_abort_hard() waiting_inside_plan_buffer_line_print_aborted = true; } +void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder) { + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, extruder ); +} + float junction_deviation = 0.1; // Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in // mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration // calculation the caller must also provide the physical length of the line in millimeters. -void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder) +void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder) { // Calculate the buffer head after we push this byte int next_buffer_head = next_block_index(block_buffer_head); diff --git a/Firmware/planner.h b/Firmware/planner.h index b6a9f8361..7904c45a5 100644 --- a/Firmware/planner.h +++ b/Firmware/planner.h @@ -140,7 +140,14 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate // Get the position applying the bed level matrix if enabled vector_3 plan_get_position(); #else -void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder); + +/// Extracting common call of +/// plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], ... +/// saves almost 5KB. +/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder. +void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder); + +void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder); //void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder); #endif // ENABLE_AUTO_BED_LEVELING diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 66bdc764f..1e0aa9cc8 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2904,7 +2904,7 @@ static void _lcd_move(const char *name, int axis, int min, int max) if (max_software_endstops && current_position[axis] > max) current_position[axis] = max; lcd_encoder = 0; world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[axis] / 60, active_extruder); lcd_draw_update = 1; } } @@ -2929,7 +2929,7 @@ static void lcd_move_e() { current_position[E_AXIS] += float((int)lcd_encoder) * move_menu_scale; lcd_encoder = 0; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[E_AXIS] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[E_AXIS] / 60, active_extruder); lcd_draw_update = 1; } } @@ -3428,7 +3428,7 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z) // Only move up, whatever direction the user rotates the encoder. current_position[Z_AXIS] += fabs(lcd_encoder); lcd_encoder = 0; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[Z_AXIS] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[Z_AXIS] / 60, active_extruder); } } if (lcd_clicked()) { @@ -4621,7 +4621,7 @@ void lcd_calibrate_pinda() { lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_PLEASE_WAIT)); current_position[E_AXIS] += e_shift_calibration; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder); + plan_buffer_line_curposXYZE(feedrate, active_extruder); st_synchronize(); lcd_display_message_fullscreen_P(msg_e_cal_knob); @@ -4644,7 +4644,7 @@ void lcd_calibrate_pinda() { if (!planner_queue_full()) { current_position[E_AXIS] += float(abs((int)lcd_encoder)) * 0.01; //0.05 lcd_encoder = 0; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder); + plan_buffer_line_curposXYZE(feedrate, active_extruder); } } @@ -4764,7 +4764,7 @@ void lcd_language() static void wait_preheat() { current_position[Z_AXIS] = 100; //move in z axis to make space for loading filament - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 60, active_extruder); + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder); delay_keep_alive(2000); lcd_display_message_fullscreen_P(_T(MSG_WIZARD_HEATING)); lcd_set_custom_characters(); @@ -6218,13 +6218,13 @@ void unload_filament() // extr_unload2(); current_position[E_AXIS] -= 45; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 5200 / 60, active_extruder); + plan_buffer_line_curposXYZE(5200 / 60, active_extruder); st_synchronize(); current_position[E_AXIS] -= 15; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1000 / 60, active_extruder); + plan_buffer_line_curposXYZE(1000 / 60, active_extruder); st_synchronize(); current_position[E_AXIS] -= 20; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1000 / 60, active_extruder); + plan_buffer_line_curposXYZE(1000 / 60, active_extruder); st_synchronize(); lcd_display_message_fullscreen_P(_T(MSG_PULL_OUT_FILAMENT)); @@ -7308,7 +7308,7 @@ bool lcd_selftest() //homeaxis(X_AXIS); //homeaxis(Y_AXIS); current_position[Z_AXIS] = current_position[Z_AXIS] + 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); _progress = lcd_selftest_screen(TestScreen::AxisZ, _progress, 3, true, 1500); _result = lcd_selfcheck_axis(2, Z_MAX_POS); @@ -7322,7 +7322,7 @@ bool lcd_selftest() if (_result) { current_position[Z_AXIS] = current_position[Z_AXIS] + 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); _progress = lcd_selftest_screen(TestScreen::Home, 0, 2, true, 0); bool bres = tmc2130_home_calibrate(X_AXIS); @@ -7406,7 +7406,7 @@ bool lcd_selftest() static void reset_crash_det(unsigned char axis) { current_position[axis] += 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_DET)) tmc2130_sg_stop_on_crash = true; } @@ -7430,7 +7430,7 @@ static bool lcd_selfcheck_axis_sg(unsigned char axis) { if (axis == X_AXIS) { //there is collision between cables and PSU cover in X axis if Z coordinate is too low current_position[Z_AXIS] += 17; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); tmc2130_home_enter(Z_AXIS_MASK); st_synchronize(); tmc2130_home_exit(); @@ -7439,7 +7439,7 @@ static bool lcd_selfcheck_axis_sg(unsigned char axis) { // first axis length measurement begin current_position[axis] -= (axis_length + margin); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); @@ -7449,11 +7449,11 @@ static bool lcd_selfcheck_axis_sg(unsigned char axis) { current_position_init = st_get_position_mm(axis); current_position[axis] += 2 * margin; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); current_position[axis] += axis_length; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); @@ -7469,11 +7469,11 @@ static bool lcd_selfcheck_axis_sg(unsigned char axis) { current_position[axis] -= margin; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); current_position[axis] -= (axis_length + margin); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); @@ -7542,13 +7542,13 @@ static bool lcd_selfcheck_axis(int _axis, int _travel) if (_axis == X_AXIS) { current_position[Z_AXIS] += 17; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); } do { current_position[_axis] = current_position[_axis] - 1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); #ifdef TMC2130 if ((READ(Z_MIN_PIN) ^ (bool)Z_MIN_ENDSTOP_INVERTING)) @@ -7602,7 +7602,7 @@ static bool lcd_selfcheck_axis(int _axis, int _travel) //current_position[_axis] = current_position[_axis] + 15; - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + //plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); if (!_stepresult) { @@ -7650,17 +7650,17 @@ static bool lcd_selfcheck_pulleys(int axis) current_position_init = current_position[axis]; current_position[axis] += 2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); for (i = 0; i < 5; i++) { refresh_cmd_timeout(); current_position[axis] = current_position[axis] + move; st_current_set(0, 850); //set motor current higher - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 200, active_extruder); + plan_buffer_line_curposXYZE(200, active_extruder); st_synchronize(); if (SilentModeMenu != SILENT_MODE_OFF) st_current_set(0, tmp_motor[0]); //set back to normal operation currents else st_current_set(0, tmp_motor_loud[0]); //set motor current back current_position[axis] = current_position[axis] - move; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + plan_buffer_line_curposXYZE(50, active_extruder); st_synchronize(); if (((READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING) == 1) || ((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING) == 1)) { @@ -7677,7 +7677,7 @@ static bool lcd_selfcheck_pulleys(int axis) endstop_triggered = true; if (current_position_init - 1 <= current_position[axis] && current_position_init + 1 >= current_position[axis]) { current_position[axis] += (axis == X_AXIS) ? 13 : 9; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); return(true); } @@ -7688,7 +7688,7 @@ static bool lcd_selfcheck_pulleys(int axis) } else { current_position[axis] -= 1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); st_synchronize(); if (_millis() > timeout_counter) { lcd_selftest_error(TestError::Pulley, (axis == 0) ? "X" : "Y", ""); @@ -7712,7 +7712,7 @@ static bool lcd_selfcheck_endstops() if ((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING) == 1) current_position[1] += 10; if ((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING) == 1) current_position[2] += 10; } - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[0] / 60, active_extruder); + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); _delay(500); if (((READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING) == 1) ||