Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚸 Improve PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED #25681

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Marlin/src/feature/leds/pca9632.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ void PCA9632_set_led_color(const LEDColor &color) {

#if ENABLED(PCA9632_BUZZER)

void PCA9632_buzz(const long, const uint16_t) {
void PCA9632_buzz(const long, const uint16_t=0) {
uint8_t data[] = PCA9632_BUZZER_DATA;
Wire.beginTransmission(I2C_ADDRESS(PCA9632_ADDRESS));
Wire.write(data, sizeof(data));
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/feature/leds/pca9632.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@ void PCA9632_set_led_color(const LEDColor &color);

#if ENABLED(PCA9632_BUZZER)
#include <stdint.h>
void PCA9632_buzz(const long, const uint16_t);
void PCA9632_buzz(const long, const uint16_t=0);
#endif
2 changes: 1 addition & 1 deletion Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ static void createChar_P(const char c, const byte * const ptr) {

#if ENABLED(LCD_USE_I2C_BUZZER)

void MarlinUI::buzz(const long duration, const uint16_t freq) {
void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) {
if (sound_on) lcd.buzz(duration, freq);
}

Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ uint8_t MarlinUI::read_slow_buttons() {
}

// Duration in ms, freq in Hz
void MarlinUI::buzz(const long duration, const uint16_t freq) {
void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) {
if (!PanelDetected) return;
if (!sound_on) return;
#if ENABLED(TFTGLCD_PANEL_SPI)
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/marlinui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
#endif

#if ENABLED(PCA9632_BUZZER)
void MarlinUI::buzz(const long duration, const uint16_t freq) {
void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) {
if (sound_on) PCA9632_buzz(duration, freq);
}
#endif
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/marlinui.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ class MarlinUI {
#endif

#if USE_MARLINUI_BUZZER
static void buzz(const long duration, const uint16_t freq);
static void buzz(const long duration, const uint16_t freq=0);
#endif

static void chirp() {
Expand Down
13 changes: 6 additions & 7 deletions Marlin/src/libs/buzzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,21 +117,20 @@
extern Buzzer buzzer;

// Buzz directly via the BEEPER pin tone queue
#define BUZZ(d,f) buzzer.tone(d, f)
#define BUZZ(V...) buzzer.tone(V)

#elif USE_MARLINUI_BUZZER

// Use MarlinUI for a buzzer on the LCD
#include "../lcd/marlinui.h"
#define BUZZ(d,f) ui.buzz(d,f)
#define BUZZ(V...) ui.buzz(V)

#else

// No buzz capability
#define BUZZ(d,f) NOOP
#define BUZZ(...) NOOP

#endif

#define ERR_BUZZ() BUZZ(400, 40);
#define OKAY_BUZZ() do{ BUZZ(100, 659); BUZZ(10, 0); BUZZ(100, 698); }while(0)
#define DONE_BUZZ(OK) do{ if (OK) OKAY_BUZZ(); else ERR_BUZZ(); }while(0)
#define ERR_BUZZ() BUZZ(400, 40)
#define OKAY_BUZZ() do{ BUZZ(100, 659); BUZZ(10); BUZZ(100, 698); }while(0)
#define DONE_BUZZ(ok) do{ if (ok) OKAY_BUZZ(); else ERR_BUZZ(); }while(0)
56 changes: 33 additions & 23 deletions Marlin/src/module/probe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -352,25 +352,35 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
FORCE_INLINE void probe_specific_action(const bool deploy) {
DEBUG_SECTION(log_psa, "Probe::probe_specific_action", DEBUGGING(LEVELING));
#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)
do {
#if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
if (deploy != PROBE_TRIGGERED()) break;
#endif

OKAY_BUZZ();
// Start preheating before waiting for user confirmation that the probe is ready.
TERN_(PREHEAT_BEFORE_PROBING, if (deploy) probe.preheat_for_probing(0, PROBING_BED_TEMP, true));

FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
ui.set_status(ds_str, 99);
SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW));

OKAY_BUZZ();

#if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
// Wait for the probe to be attached or detached before asking for explicit user confirmation
// Allow the user to interrupt
{
KEEPALIVE_STATE(PAUSED_FOR_USER);
TERN_(HAS_RESUME_CONTINUE, wait_for_user = true);
while (deploy == PROBE_TRIGGERED() && TERN1(HAS_RESUME_CONTINUE, wait_for_user)) idle_no_sleep();
TERN_(HAS_RESUME_CONTINUE, wait_for_user = false);
OKAY_BUZZ();
}
#endif

FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
ui.set_status(ds_str, 99);
SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW));
TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str));
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str));
TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());

TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str));
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str));
TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
ui.reset_status();

} while (ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED));
ui.reset_status();

#endif // PAUSE_BEFORE_DEPLOY_STOW

Expand Down Expand Up @@ -435,15 +445,15 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
* - If a preheat input is higher than the current target, raise the target temperature.
* - If a preheat input is higher than the current temperature, wait for stabilization.
*/
void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp) {
void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp, const bool early/*=false*/) {
#if HAS_HOTEND && (PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP)
#define WAIT_FOR_NOZZLE_HEAT
#endif
#if HAS_HEATED_BED && (PROBING_BED_TEMP || LEVELING_BED_TEMP)
#define WAIT_FOR_BED_HEAT
#endif

LCD_MESSAGE(MSG_PREHEATING);
if (!early) LCD_MESSAGE(MSG_PREHEATING);

DEBUG_ECHOPGM("Preheating ");

Expand All @@ -453,23 +463,23 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
DEBUG_ECHOPGM("hotend (", hotendPreheat, ")");
thermalManager.setTargetHotend(hotendPreheat, 0);
}
#elif ENABLED(WAIT_FOR_BED_HEAT)
constexpr celsius_t hotendPreheat = 0;
#endif

#if ENABLED(WAIT_FOR_BED_HEAT)
const celsius_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0;
if (bedPreheat) {
if (hotendPreheat) DEBUG_ECHOPGM(" and ");
if (TERN0(WAIT_FOR_NOZZLE_HEAT, hotendPreheat)) DEBUG_ECHOPGM(" and ");
DEBUG_ECHOPGM("bed (", bedPreheat, ")");
thermalManager.setTargetBed(bedPreheat);
}
#endif

DEBUG_EOL();

TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0));
TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating());
if (!early) {
TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0));
TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating());
}
}

#endif
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/module/probe.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class Probe {
static xyz_pos_t offset;

#if EITHER(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING)
static void preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp);
static void preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp, const bool early=false);
#endif

static void probe_error_stop();
Expand Down