🎨 MMU2 cleanup

This commit is contained in:
Scott Lahteine 2022-10-14 13:15:37 -05:00
parent c52cf77d0a
commit a4d58e8876

View File

@ -54,7 +54,8 @@ MMU2 mmu2;
#define MMU_CMD_TIMEOUT 45000UL // 45s timeout for mmu commands (except P0) #define MMU_CMD_TIMEOUT 45000UL // 45s timeout for mmu commands (except P0)
#define MMU_P0_TIMEOUT 3000UL // Timeout for P0 command: 3seconds #define MMU_P0_TIMEOUT 3000UL // Timeout for P0 command: 3seconds
#define MMU2_COMMAND(S) tx_str(F(S "\n")) #define MMU2_SEND(S) tx_str(F(S "\n"))
#define MMU2_RECV(S) rx_str(F(S "\n"))
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU_EXTRUDER_SENSOR)
uint8_t mmu_idl_sens = 0; uint8_t mmu_idl_sens = 0;
@ -131,7 +132,7 @@ void MMU2::reset() {
safe_delay(20); safe_delay(20);
WRITE(MMU2_RST_PIN, HIGH); WRITE(MMU2_RST_PIN, HIGH);
#else #else
MMU2_COMMAND("X0"); // Send soft reset MMU2_SEND("X0"); // Send soft reset
#endif #endif
} }
@ -157,11 +158,9 @@ void MMU2::mmu_loop() {
case -1: case -1:
if (rx_start()) { if (rx_start()) {
prev_P0_request = millis(); // Initialize finda sensor timeout prev_P0_request = millis(); // Initialize finda sensor timeout
DEBUG_ECHOLNPGM("MMU => 'start'"); DEBUG_ECHOLNPGM("MMU => 'start'");
DEBUG_ECHOLNPGM("MMU <= 'S1'"); DEBUG_ECHOLNPGM("MMU <= 'S1'");
MMU2_SEND("S1"); // Read Version
MMU2_COMMAND("S1"); // Read Version
state = -2; state = -2;
} }
else if (millis() > 30000) { // 30sec after reset disable MMU else if (millis() > 30000) { // 30sec after reset disable MMU
@ -173,10 +172,8 @@ void MMU2::mmu_loop() {
case -2: case -2:
if (rx_ok()) { if (rx_ok()) {
sscanf(rx_buffer, "%huok\n", &version); sscanf(rx_buffer, "%huok\n", &version);
DEBUG_ECHOLNPGM("MMU => ", version, "\nMMU <= 'S2'"); DEBUG_ECHOLNPGM("MMU => ", version, "\nMMU <= 'S2'");
MMU2_SEND("S2"); // Read Build Number
MMU2_COMMAND("S2"); // Read Build Number
state = -3; state = -3;
} }
break; break;
@ -191,14 +188,12 @@ void MMU2::mmu_loop() {
#if ENABLED(MMU2_MODE_12V) #if ENABLED(MMU2_MODE_12V)
DEBUG_ECHOLNPGM("MMU <= 'M1'"); DEBUG_ECHOLNPGM("MMU <= 'M1'");
MMU2_SEND("M1"); // Stealth Mode
MMU2_COMMAND("M1"); // Stealth Mode
state = -5; state = -5;
#else #else
DEBUG_ECHOLNPGM("MMU <= 'P0'"); DEBUG_ECHOLNPGM("MMU <= 'P0'");
MMU2_SEND("P0"); // Read FINDA
MMU2_COMMAND("P0"); // Read FINDA
state = -4; state = -4;
#endif #endif
} }
@ -209,10 +204,8 @@ void MMU2::mmu_loop() {
// response to M1 // response to M1
if (rx_ok()) { if (rx_ok()) {
DEBUG_ECHOLNPGM("MMU => ok"); DEBUG_ECHOLNPGM("MMU => ok");
DEBUG_ECHOLNPGM("MMU <= 'P0'"); DEBUG_ECHOLNPGM("MMU <= 'P0'");
MMU2_SEND("P0"); // Read FINDA
MMU2_COMMAND("P0"); // Read FINDA
state = -4; state = -4;
} }
break; break;
@ -250,14 +243,13 @@ void MMU2::mmu_loop() {
else if (cmd == MMU_CMD_C0) { else if (cmd == MMU_CMD_C0) {
// continue loading // continue loading
DEBUG_ECHOLNPGM("MMU <= 'C0'"); DEBUG_ECHOLNPGM("MMU <= 'C0'");
MMU2_COMMAND("C0"); MMU2_SEND("C0");
state = 3; // wait for response state = 3; // wait for response
} }
else if (cmd == MMU_CMD_U0) { else if (cmd == MMU_CMD_U0) {
// unload current // unload current
DEBUG_ECHOLNPGM("MMU <= 'U0'"); DEBUG_ECHOLNPGM("MMU <= 'U0'");
MMU2_SEND("U0");
MMU2_COMMAND("U0");
state = 3; // wait for response state = 3; // wait for response
} }
else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) { else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) {
@ -270,7 +262,7 @@ void MMU2::mmu_loop() {
else if (cmd == MMU_CMD_R0) { else if (cmd == MMU_CMD_R0) {
// recover after eject // recover after eject
DEBUG_ECHOLNPGM("MMU <= 'R0'"); DEBUG_ECHOLNPGM("MMU <= 'R0'");
MMU2_COMMAND("R0"); MMU2_SEND("R0");
state = 3; // wait for response state = 3; // wait for response
} }
else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) { else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) {
@ -285,7 +277,7 @@ void MMU2::mmu_loop() {
cmd = MMU_CMD_NONE; cmd = MMU_CMD_NONE;
} }
else if (ELAPSED(millis(), prev_P0_request + 300)) { else if (ELAPSED(millis(), prev_P0_request + 300)) {
MMU2_COMMAND("P0"); // Read FINDA MMU2_SEND("P0"); // Read FINDA
state = 2; // wait for response state = 2; // wait for response
} }
@ -314,7 +306,7 @@ void MMU2::mmu_loop() {
if (mmu_idl_sens) { if (mmu_idl_sens) {
if (FILAMENT_PRESENT() && mmu_loading_flag) { if (FILAMENT_PRESENT() && mmu_loading_flag) {
DEBUG_ECHOLNPGM("MMU <= 'A'"); DEBUG_ECHOLNPGM("MMU <= 'A'");
MMU2_COMMAND("A"); // send 'abort' request MMU2_SEND("A"); // send 'abort' request
mmu_idl_sens = 0; mmu_idl_sens = 0;
DEBUG_ECHOLNPGM("MMU IDLER_SENSOR = 0 - ABORT"); DEBUG_ECHOLNPGM("MMU IDLER_SENSOR = 0 - ABORT");
} }
@ -327,9 +319,9 @@ void MMU2::mmu_loop() {
const bool keep_trying = !mmu2s_triggered && last_cmd == MMU_CMD_C0; const bool keep_trying = !mmu2s_triggered && last_cmd == MMU_CMD_C0;
if (keep_trying) { if (keep_trying) {
// MMU ok received but filament sensor not triggered, retrying... // MMU ok received but filament sensor not triggered, retrying...
DEBUG_ECHOLNPGM("MMU => 'ok' (filament not present in gears)"); DEBUG_ECHOLNPGM("MMU => 'ok' (no filament in gears)");
DEBUG_ECHOLNPGM("MMU <= 'C0' (keep trying)"); DEBUG_ECHOLNPGM("MMU <= 'C0' (keep trying)");
MMU2_COMMAND("C0"); MMU2_SEND("C0");
} }
#else #else
constexpr bool keep_trying = false; constexpr bool keep_trying = false;
@ -361,7 +353,7 @@ void MMU2::mmu_loop() {
*/ */
bool MMU2::rx_start() { bool MMU2::rx_start() {
// check for start message // check for start message
return rx_str(F("start\n")); return MMU2_RECV("start");
} }
/** /**
@ -440,7 +432,7 @@ void MMU2::clear_rx_buffer() {
* Check if we received 'ok' from MMU * Check if we received 'ok' from MMU
*/ */
bool MMU2::rx_ok() { bool MMU2::rx_ok() {
if (rx_str(F("ok\n"))) { if (MMU2_RECV("ok")) {
prev_P0_request = millis(); prev_P0_request = millis();
return true; return true;
} }
@ -673,7 +665,7 @@ static void mmu2_not_responding() {
// When (T0 rx->ok) load is ready, but in fact it did not load // When (T0 rx->ok) load is ready, but in fact it did not load
// successfully or an overload created pressure in the extruder. // successfully or an overload created pressure in the extruder.
// Send (C0) to load more and move E_AXIS a little to release pressure. // Send (C0) to load more and move E_AXIS a little to release pressure.
if ((fil_present = FILAMENT_PRESENT())) MMU2_COMMAND("A"); if ((fil_present = FILAMENT_PRESENT())) MMU2_SEND("A");
} while (!fil_present && PENDING(millis(), expire_ms)); } while (!fil_present && PENDING(millis(), expire_ms));
stepper.disable_extruder(); stepper.disable_extruder();
manage_response(true, true); manage_response(true, true);
@ -882,7 +874,7 @@ void MMU2::filament_runout() {
if (cmd == MMU_CMD_NONE && last_cmd == MMU_CMD_C0) { if (cmd == MMU_CMD_NONE && last_cmd == MMU_CMD_C0) {
if (present && !mmu2s_triggered) { if (present && !mmu2s_triggered) {
DEBUG_ECHOLNPGM("MMU <= 'A'"); DEBUG_ECHOLNPGM("MMU <= 'A'");
tx_str(F("A\n")); MMU2_SEND("A");
} }
// Slowly spin the extruder during C0 // Slowly spin the extruder during C0
else { else {