Commit 2dfd21c9 authored by MagoKimbra's avatar MagoKimbra

Merge remote-tracking branch 'refs/remotes/origin/master' into dev

parents 46ac851b 49b252fc
......@@ -137,6 +137,7 @@
* M595 - Set hotend AD595 offset and gain
* M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
* M605 - Set dual x-carriage movement mode: Smode [ X<duplication x-offset> Rduplication temp offset ]
* M649 - Set laser options. S<intensity> L<duration> P<ppm> B<set mode> R<raster mm per pulse> F<feedrate>
* M666 - Set z probe offset or Endstop and delta geometry adjustment. M666 L for list command
* M906 - Set motor currents XYZ T0-4 E
* M907 - Set digital trimpot motor current using axis codes.
......
### Version 4.2.83
* Add Cooler and Hot Chamber
* Add Laser Beam PWM and raster base64 ONLY ARDUINO MEGA
* Add Laser Beam PWM and raster base64
### Version 4.2.82
* Add DONDOLO_DUAL_MOTOR for DONDOLO bowden and dual extruder
......
......@@ -7688,7 +7688,7 @@ inline void gcode_M503() {
if (code_seen('D') && IsRunning()) laser.diagnostics = (bool) code_value();
// Wait for the rest
//st_synchronize();
// st_synchronize();
if (code_seen('S') && IsRunning()) {
laser.intensity = (float) code_value();
laser.rasterlaserpower = laser.intensity;
......
......@@ -23,6 +23,7 @@
/**
* laser.cpp - Laser control library for Arduino using 16 bit timers- Version 1
* Copyright (c) 2013 Timothy Schmidt. All right reserved.
* Copyright (c) 2016 Franco (nextime) Lanza
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
......
......@@ -23,6 +23,7 @@
/**
* laser.cpp - Laser control library for Arduino using 16 bit timers- Version 1
* Copyright (c) 2013 Timothy Schmidt. All right reserved.
* Copyright (c) 2016 Franco (nextime) Lanza
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
......
......@@ -67,6 +67,10 @@
#undef USE_BIG_EDIT_FONT
#endif
#if ENABLED(LASERBEAM)
#include "../laser/laserbitmaps.h"
#endif
#if ENABLED(USE_SMALL_INFOFONT)
#include "dogm_font_data_6x9_marlin.h"
#define FONT_STATUSMENU_NAME u8g_font_6x9
......@@ -370,6 +374,25 @@ static void lcd_implementation_status_screen() {
bool blink = lcd_blink();
#if ENABLED(LASERBEAM)
#if ENABLED(LASER_PERIPHERALS)
if (laser_peripherals_ok()) {
u8g.drawBitmapP(29,4, LASERENABLE_BYTEWIDTH, LASERENABLE_HEIGHT, laserenable_bmp);
}
#endif
lcd_setFont(FONT_STATUSMENU);
u8g.setColorIndex(1);
u8g.setPrintPos(3,6);
if (current_block->laser_status == LASER_ON) {
u8g.drawBitmapP(5,14, ICON_BYTEWIDTH, ICON_HEIGHT, laseron_bmp);
u8g.print(itostr3(current_block->laser_intensity));
lcd_printPGM(PSTR("%"));
} else {
u8g.drawBitmapP(5,14, ICON_BYTEWIDTH, ICON_HEIGHT, laseroff_bmp);
lcd_printPGM(PSTR("---%"));
}
#else
// Symbols menu graphics, animated fan
u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT,
#if HAS(FAN)
......@@ -378,6 +401,7 @@ static void lcd_implementation_status_screen() {
status_screen0_bmp
#endif
);
#endif
// Status Menu Font for SD info, Heater status, Fan, XYZ
lcd_setFont(FONT_STATUSMENU);
......@@ -434,7 +458,7 @@ static void lcd_implementation_status_screen() {
u8g.setPrintPos(90, 47);
if (end_time > 1380 || end_time == 0)
u8g.print('E--:--');
lcd_printPGM(PSTR("E--:--"));
else if (end_time > 0) {
u8g.print('E');
u8g.print(itostr2(end_time/60));
......@@ -450,6 +474,7 @@ static void lcd_implementation_status_screen() {
}
#endif
#if DISABLED(LASERBEAM)
// Hotends
for (int i = 0; i < HOTENDS; i++) _draw_heater_status(6 + i * 25, i);
......@@ -457,6 +482,7 @@ static void lcd_implementation_status_screen() {
#if HOTENDS < 4 && HAS(TEMP_BED)
_draw_heater_status(81, -1);
#endif
#endif // !LASERBEAM
// Fan
u8g.setPrintPos(104, 27);
......
......@@ -88,6 +88,29 @@ char lcd_status_message[3 * (LCD_WIDTH) + 1] = WELCOME_MSG; // worst case is kan
#define LCD_Printpos(x, y) lcd.setCursor(x, y)
#endif
#if ENABLED(LASERBEAM)
static void lcd_laser_focus_menu();
static void lcd_laser_menu();
static void lcd_laser_test_fire_menu();
static void laser_test_fire(uint8_t power, int dwell);
static void laser_set_focus(float f_length);
static void action_laser_focus_custom();
static void action_laser_focus_1mm();
static void action_laser_focus_2mm();
static void action_laser_focus_3mm();
static void action_laser_focus_4mm();
static void action_laser_focus_5mm();
static void action_laser_focus_6mm();
static void action_laser_focus_7mm();
static void action_laser_test_20_50ms();
static void action_laser_test_20_100ms();
static void action_laser_test_100_50ms();
static void action_laser_test_100_100ms();
static void action_laser_test_warm();
static void action_laser_acc_on();
static void action_laser_acc_off();
#endif
// The main status screen
static void lcd_status_screen();
......@@ -103,12 +126,17 @@ static void lcd_status_screen();
static void lcd_move_menu();
static void lcd_control_menu();
static void lcd_stats_menu();
#if DISABLED(LASERBEAM)
static void lcd_control_temperature_menu();
static void lcd_control_temperature_preheat_pla_settings_menu();
static void lcd_control_temperature_preheat_abs_settings_menu();
static void lcd_control_temperature_preheat_gum_settings_menu();
#endif
static void lcd_control_motion_menu();
#if DISABLED(LASERBEAM)
static void lcd_control_volumetric_menu();
#endif
#if ENABLED(FILAMENT_CHANGE_FEATURE)
static void lcd_filament_change_option_menu();
......@@ -189,7 +217,7 @@ static void lcd_status_screen();
/**
* START_MENU generates the init code for a menu function
*/
#if ENABLED(BTN_BACK) && BTN_BACK > 0
#if ENABLED(BTN_BACK) && BTN_BACK > 0
#define START_MENU() do { \
ENCODER_DIRECTION_MENUS(); \
encoderRateMultiplierEnabled = false; \
......@@ -205,7 +233,7 @@ static void lcd_status_screen();
return; } \
for (uint8_t _drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { \
_menuItemNr = 0;
#else
#else
#define START_MENU() do { \
ENCODER_DIRECTION_MENUS(); \
encoderRateMultiplierEnabled = false; \
......@@ -216,7 +244,7 @@ static void lcd_status_screen();
bool wasClicked = LCD_CLICKED, itemSelected; \
for (uint8_t _drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { \
_menuItemNr = 0;
#endif
#endif
/**
* MENU_ITEM generates draw & handler code for a menu item, potentially calling:
......@@ -526,14 +554,21 @@ inline void line_to_current(AxisEnum axis) {
#if ENABLED(SDSUPPORT)
static void lcd_sdcard_pause() { card.pausePrint(); }
static void lcd_sdcard_pause() {
card.pausePrint();
print_job_counter.pause();
}
static void lcd_sdcard_resume() { card.startPrint(); }
static void lcd_sdcard_resume() {
card.startPrint();
print_job_counter.start();
}
static void lcd_sdcard_stop() {
quickStop();
card.sdprinting = false;
card.closeFile();
print_job_counter.stop();
autotempShutdown();
cancel_heatup = true;
lcd_setstatus(MSG_PRINT_ABORTED, true);
......@@ -550,6 +585,13 @@ inline void line_to_current(AxisEnum axis) {
static void lcd_main_menu() {
START_MENU();
MENU_ITEM(back, MSG_WATCH);
#if ENABLED(LASERBEAM)
if (!(movesplanned() || IS_SD_PRINTING)) {
MENU_ITEM(submenu, "Laser Functions", lcd_laser_menu);
}
#endif
if (movesplanned() || IS_SD_PRINTING) {
MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu);
}
......@@ -755,6 +797,13 @@ static void lcd_tune_menu() {
#endif // HOTENDS > 2
#endif // HOTENDS > 1
//
// Laser:
//
#if ENABLED(LASERBEAM) && HAS(COOLER)
MENU_ITEM_EDIT(int3, MSG_COOLER, &target_temperature_cooler, 0, COOLER_MAXTEMP - 15);
#endif
//
// Bed:
//
......@@ -973,6 +1022,7 @@ void _lcd_preheat(int endnum, const float temph, const float tempb, const int fa
void lcd_cooldown() {
disable_all_heaters();
disable_all_coolers();
fanSpeed = 0;
lcd_return_to_status();
}
......@@ -994,12 +1044,16 @@ static void lcd_prepare_menu() {
//
// Auto Home
//
#if ENABLED(LASERBEAM)
MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28 X Y F2000"));
#else
MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
#if !MECH(DELTA)
MENU_ITEM(gcode, MSG_AUTO_HOME_X, PSTR("G28 X"));
MENU_ITEM(gcode, MSG_AUTO_HOME_Y, PSTR("G28 Y"));
MENU_ITEM(gcode, MSG_AUTO_HOME_Z, PSTR("G28 Z"));
#endif
#endif
//
// Set Home Offsets
......@@ -1033,7 +1087,7 @@ static void lcd_prepare_menu() {
// Preheat ABS
// Preheat GUM
//
#if TEMP_SENSOR_0 != 0
#if TEMP_SENSOR_0 != 0 && DISABLED(LASERBEAM)
#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_BED != 0
MENU_ITEM(submenu, MSG_PREHEAT_PLA, lcd_preheat_pla_menu);
MENU_ITEM(submenu, MSG_PREHEAT_ABS, lcd_preheat_abs_menu);
......@@ -1055,19 +1109,6 @@ static void lcd_prepare_menu() {
MENU_ITEM(function, MSG_RETRACT_XMM, lcd_retract);
#endif // EASY_LOAD
//
// LASER BEAM
//
#if ENABLED(LASERBEAM)
MENU_ITEM_EDIT(int3, MSG_LASER, &laser_ttl_modulation, 0, 255);
if(laser_ttl_modulation == 0) {
WRITE(LASER_PWR_PIN, LOW);
}
else {
WRITE(LASER_PWR_PIN, HIGH);
}
#endif
//
// Cooldown
//
......@@ -1275,9 +1316,13 @@ static void lcd_move_menu() {
static void lcd_control_menu() {
START_MENU();
MENU_ITEM(back, MSG_MAIN);
#if DISABLED(LASERBEAM)
MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu);
#endif
MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu);
#if DISABLED(LASERBEAM)
MENU_ITEM(submenu, MSG_FILAMENT, lcd_control_volumetric_menu);
#endif
#if HAS(LCD_CONTRAST)
//MENU_ITEM_EDIT(int3, MSG_CONTRAST, &lcd_contrast, 0, 63);
......@@ -1328,7 +1373,7 @@ static void lcd_stats_menu() {
#if ENABLED(PID_AUTOTUNE_MENU)
#if ENABLED(PIDTEMP)
int autotune_temp[HOTENDS] = { 150 };
int autotune_temp[HOTENDS] = ARRAY_BY_HOTENDS1(150);
const int heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP);
#endif
......@@ -1389,12 +1434,14 @@ static void lcd_stats_menu() {
#endif // PIDTEMP
/**
#if DISABLED(LASERBEAM)
/**
*
* "Control" > "Temperature" submenu
*
*/
static void lcd_control_temperature_menu() {
static void lcd_control_temperature_menu() {
START_MENU();
//
......@@ -1515,14 +1562,14 @@ static void lcd_control_temperature_menu() {
//
MENU_ITEM(submenu, MSG_PREHEAT_GUM_SETTINGS, lcd_control_temperature_preheat_gum_settings_menu);
END_MENU();
}
}
/**
/**
*
* "Temperature" > "Preheat PLA conf" submenu
*
*/
static void lcd_control_temperature_preheat_pla_settings_menu() {
static void lcd_control_temperature_preheat_pla_settings_menu() {
START_MENU();
MENU_ITEM(back, MSG_TEMPERATURE);
MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &plaPreheatFanSpeed, 0, 255);
......@@ -1536,14 +1583,14 @@ static void lcd_control_temperature_preheat_pla_settings_menu() {
MENU_ITEM(function, MSG_STORE_EPROM, Config_StoreSettings);
#endif
END_MENU();
}
}
/**
/**
*
* "Temperature" > "Preheat ABS conf" submenu
*
*/
static void lcd_control_temperature_preheat_abs_settings_menu() {
static void lcd_control_temperature_preheat_abs_settings_menu() {
START_MENU();
MENU_ITEM(back, MSG_TEMPERATURE);
MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &absPreheatFanSpeed, 0, 255);
......@@ -1557,14 +1604,14 @@ static void lcd_control_temperature_preheat_abs_settings_menu() {
MENU_ITEM(function, MSG_STORE_EPROM, Config_StoreSettings);
#endif
END_MENU();
}
}
/**
/**
*
* "Temperature" > "Preheat GUM conf" submenu
*
*/
static void lcd_control_temperature_preheat_gum_settings_menu() {
static void lcd_control_temperature_preheat_gum_settings_menu() {
START_MENU();
MENU_ITEM(back, MSG_TEMPERATURE);
MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &gumPreheatFanSpeed, 0, 255);
......@@ -1578,7 +1625,9 @@ static void lcd_control_temperature_preheat_gum_settings_menu() {
MENU_ITEM(function, MSG_STORE_EPROM, Config_StoreSettings);
#endif
END_MENU();
}
}
#endif // !LASERBEAM
/**
*
......@@ -1650,7 +1699,8 @@ static void lcd_control_motion_menu() {
* "Control" > "Filament" submenu
*
*/
static void lcd_control_volumetric_menu() {
#if DISABLED(LASERBEAM)
static void lcd_control_volumetric_menu() {
START_MENU();
MENU_ITEM(back, MSG_CONTROL);
......@@ -1672,7 +1722,8 @@ static void lcd_control_volumetric_menu() {
}
END_MENU();
}
}
#endif // !LASERBEAM
/**
*
......@@ -1730,6 +1781,88 @@ static void lcd_control_volumetric_menu() {
}
#endif // FWRETRACT
#if ENABLED(LASERBEAM)
static void lcd_laser_menu() {
START_MENU();
MENU_ITEM(back, MSG_MAIN);
MENU_ITEM(submenu, "Set Focus", lcd_laser_focus_menu);
MENU_ITEM(submenu, "Test Fire", lcd_laser_test_fire_menu);
#if ENABLED(LASER_PERIPHERALS)
if (laser_peripherals_ok()) {
MENU_ITEM(function, "Turn On Pumps/Fans", action_laser_acc_on);
}
else if (!(movesplanned() || IS_SD_PRINTING)) {
MENU_ITEM(function, "Turn Off Pumps/Fans", action_laser_acc_off);
}
#endif // LASER_PERIPHERALS
END_MENU();
}
static void lcd_laser_test_fire_menu() {
START_MENU();
MENU_ITEM(back, "Laser Functions");
MENU_ITEM(function, " 20% 50ms", action_laser_test_20_50ms);
MENU_ITEM(function, " 20% 100ms", action_laser_test_20_100ms);
MENU_ITEM(function, "100% 50ms", action_laser_test_100_50ms);
MENU_ITEM(function, "100% 100ms", action_laser_test_100_100ms);
MENU_ITEM(function, "Warm-up Laser 2sec", action_laser_test_warm);
END_MENU();
}
static void action_laser_acc_on() { enqueue_and_echo_commands_P(PSTR("M80")); }
static void action_laser_acc_off() { enqueue_and_echo_commands_P(PSTR("M81")); }
static void action_laser_test_20_50ms() { laser_test_fire(20, 50); }
static void action_laser_test_20_100ms() { laser_test_fire(20, 100); }
static void action_laser_test_100_50ms() { laser_test_fire(100, 50); }
static void action_laser_test_100_100ms() { laser_test_fire(100, 100); }
static void action_laser_test_warm() { laser_test_fire(15, 2000); }
static void laser_test_fire(uint8_t power, int dwell) {
enqueue_and_echo_commands_P(PSTR("M80")); // Enable laser accessories since we don't know if its been done (and there's no penalty for doing it again).
laser_fire(power);
delay(dwell);
laser_extinguish();
}
float focalLength = 0;
static void lcd_laser_focus_menu() {
START_MENU();
MENU_ITEM(back, "Laser Functions");
MENU_ITEM(function, "1mm", action_laser_focus_1mm);
MENU_ITEM(function, "2mm", action_laser_focus_2mm);
MENU_ITEM(function, "3mm - 1/8in", action_laser_focus_3mm);
MENU_ITEM(function, "4mm", action_laser_focus_4mm);
MENU_ITEM(function, "5mm", action_laser_focus_5mm);
MENU_ITEM(function, "6mm - 1/4in", action_laser_focus_6mm);
MENU_ITEM(function, "7mm", action_laser_focus_7mm);
MENU_ITEM_EDIT_CALLBACK(float32, "Custom", &focalLength, 0, LASER_FOCAL_HEIGHT, action_laser_focus_custom);
END_MENU();
}
static void action_laser_focus_custom() { laser_set_focus(focalLength); }
static void action_laser_focus_1mm() { laser_set_focus(1); }
static void action_laser_focus_2mm() { laser_set_focus(2); }
static void action_laser_focus_3mm() { laser_set_focus(3); }
static void action_laser_focus_4mm() { laser_set_focus(4); }
static void action_laser_focus_5mm() { laser_set_focus(5); }
static void action_laser_focus_6mm() { laser_set_focus(6); }
static void action_laser_focus_7mm() { laser_set_focus(7); }
static void laser_set_focus(float f_length) {
if (!axis_homed[Z_AXIS]) {
enqueue_and_echo_commands_P(PSTR("G28 Z F150"));
}
focalLength = f_length;
float focus = LASER_FOCAL_HEIGHT - f_length;
char cmd[20];
sprintf_P(cmd, PSTR("G0 Z%s F150"), ftostr52(focus));
enqueue_and_echo_commands_P(cmd);
}
#endif // LASERBEAM
#if ENABLED(SDSUPPORT)
#if !PIN_EXISTS(SD_DETECT)
......
......@@ -56,7 +56,7 @@ The current MarlinKimbra dev team consists of:
- simonepri - Simone Primarosa (https://github.com/simonepri)
More features have been added by:
-
- Franco (nextime) Lanza
## License
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment