Filament runout sensor can be disabled via special menu.

This commit is contained in:
Knutwurst
2020-06-06 21:51:19 +02:00
parent b1dfd1fec5
commit f93857edb1
2 changed files with 90 additions and 58 deletions

View File

@@ -108,7 +108,7 @@ void AnycubicTouchscreenClass::Setup()
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR) #if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
pinMode(19, INPUT); pinMode(19, INPUT);
WRITE(19, HIGH); WRITE(19, HIGH);
if (READ(19) == true) if ((READ(19) == true) && FilamentSensorEnabled)
{ {
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER(); HARDWARE_SERIAL_ENTER();
@@ -120,6 +120,7 @@ void AnycubicTouchscreenClass::Setup()
SelectedDirectory[0] = 0; SelectedDirectory[0] = 0;
SpecialMenu = false; SpecialMenu = false;
FilamentSensorEnabled = true;
#ifdef STARTUP_CHIME #ifdef STARTUP_CHIME
buzzer.tone(250, 554); // C#5 buzzer.tone(250, 554); // C#5
@@ -497,6 +498,21 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
SERIAL_ECHOLNPGM("Special Menu: FilamentChange Resume"); SERIAL_ECHOLNPGM("Special Menu: FilamentChange Resume");
FilamentChangeResume(); FilamentChangeResume();
} }
else if (strcmp(SelectedDirectory, "<disable fil. sensor>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor");
FilamentSensorEnabled = false;
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<enable fil. sensor>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor");
FilamentSensorEnabled = true;
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<exit>") == 0) else if (strcmp(SelectedDirectory, "<exit>") == 0)
{ {
SpecialMenu = false; SpecialMenu = false;
@@ -541,6 +557,18 @@ void AnycubicTouchscreenClass::Ls()
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
break; break;
case 12: // Page 4
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
/* /*
case 12: // Fourth Page case 12: // Fourth Page
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
@@ -555,8 +583,8 @@ void AnycubicTouchscreenClass::Ls()
*/ */
default: default:
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); //HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); //HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break; break;
} }
} }
@@ -796,7 +824,7 @@ void AnycubicTouchscreenClass::StateHandler()
HARDWARE_SERIAL_ENTER(); HARDWARE_SERIAL_ENTER();
if ((!card.isPrinting()) && (!planner.movesplanned())) if ((!card.isPrinting()) && (!planner.movesplanned()))
{ {
// enter idle display state queue.clear();
TFTstate = ANYCUBIC_TFT_STATE_IDLE; TFTstate = ANYCUBIC_TFT_STATE_IDLE;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: SD print stopped... J16"); SERIAL_ECHOLNPGM("TFT Serial Debug: SD print stopped... J16");
@@ -823,68 +851,71 @@ void AnycubicTouchscreenClass::StateHandler()
void AnycubicTouchscreenClass::FilamentRunout() void AnycubicTouchscreenClass::FilamentRunout()
{ {
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR) if(FilamentSensorEnabled == true)
FilamentTestStatus = READ(19) & 0xff;
if (FilamentTestStatus > FilamentTestLastStatus)
{ {
// filament sensor pin changed, save current timestamp. #if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
const millis_t fil_ms = millis(); FilamentTestStatus = READ(19) & 0xff;
static millis_t fil_delay;
// since this is inside a loop, only set delay time once if (FilamentTestStatus > FilamentTestLastStatus)
if (FilamentSetMillis)
{ {
#ifdef ANYCUBIC_TFT_DEBUG // filament sensor pin changed, save current timestamp.
SERIAL_ECHOLNPGM("DEBUG: Set filament trigger time"); const millis_t fil_ms = millis();
#endif static millis_t fil_delay;
// set the delayed timestamp to 3000ms later
fil_delay = fil_ms + 3000UL;
// this doesn't need to run until the filament is recovered again
FilamentSetMillis = false;
}
// if three seconds passed and the sensor is still triggered, // since this is inside a loop, only set delay time once
// we trigger the filament runout status if (FilamentSetMillis)
if ((FilamentTestStatus > FilamentTestLastStatus) && (ELAPSED(fil_ms, fil_delay)))
{
if (!IsParked)
{ {
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: 3000ms delay done"); SERIAL_ECHOLNPGM("DEBUG: Set filament trigger time");
#endif #endif
if (card.isPrinting()) // set the delayed timestamp to 3000ms later
{ fil_delay = fil_ms + 3000UL;
ai3m_pause_state = 3; // this doesn't need to run until the filament is recovered again
; // set runout pause flag FilamentSetMillis = false;
#ifdef ANYCUBIC_TFT_DEBUG }
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL(); // if three seconds passed and the sensor is still triggered,
#endif // we trigger the filament runout status
PausePrint(); if ((FilamentTestStatus > FilamentTestLastStatus) && (ELAPSED(fil_ms, fil_delay)))
} {
else if (!card.isPrinting()) if (!IsParked)
{ {
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK #ifdef ANYCUBIC_TFT_DEBUG
HARDWARE_SERIAL_ENTER(); SERIAL_ECHOLNPGM("DEBUG: 3000ms delay done");
#ifdef ANYCUBIC_TFT_DEBUG #endif
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout... J15"); if (card.isPrinting())
#endif {
FilamentTestLastStatus = FilamentTestStatus; ai3m_pause_state = 3;
} ; // set runout pause flag
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
#endif
PausePrint();
}
else if (!card.isPrinting())
{
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER();
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout... J15");
#endif
FilamentTestLastStatus = FilamentTestStatus;
}
}
FilamentTestLastStatus = FilamentTestStatus;
} }
FilamentTestLastStatus = FilamentTestStatus;
} }
else if (FilamentTestStatus != FilamentTestLastStatus)
{
FilamentSetMillis = true; // set the timestamps on the next loop again
FilamentTestLastStatus = FilamentTestStatus;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout recovered");
#endif
}
#endif
} }
else if (FilamentTestStatus != FilamentTestLastStatus)
{
FilamentSetMillis = true; // set the timestamps on the next loop again
FilamentTestLastStatus = FilamentTestStatus;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout recovered");
#endif
}
#endif
} }
void AnycubicTouchscreenClass::GetCommandFromTFT() void AnycubicTouchscreenClass::GetCommandFromTFT()

View File

@@ -117,6 +117,7 @@ private:
char SelectedDirectory[30]; char SelectedDirectory[30];
uint8_t SpecialMenu = false; uint8_t SpecialMenu = false;
uint8_t FilamentSensorEnabled = true;
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR) #if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
char FilamentTestStatus = false; char FilamentTestStatus = false;