PAT9125 first prototype

This commit is contained in:
Alex Voinea 2022-02-28 17:47:09 +01:00 committed by D.R.racer
parent c5c4c21124
commit 65b2881b06
2 changed files with 59 additions and 14 deletions

View File

@ -168,7 +168,6 @@ protected:
} }
void triggerError() { void triggerError() {
// deinit(); //not sure if I should call this here.
state = State::error; state = State::error;
/// some message, idk /// some message, idk
@ -223,6 +222,7 @@ public:
default: default:
return false; return false;
} }
return false;
} }
bool getFilamentPresent() { bool getFilamentPresent() {
@ -447,23 +447,39 @@ public:
deinit(); //deinit first if there was an error. deinit(); //deinit first if there was an error.
} }
puts_P(PSTR("fsensor::init()")); puts_P(PSTR("fsensor::init()"));
;//
settings_init(); //also sets the state to State::initializing settings_init(); //also sets the state to State::initializing
if (!pat9125_init()) {
deinit();
triggerError();
;//
}
#ifdef IR_SENSOR_PIN
else if (!READ(IR_SENSOR_PIN)) {
;// MK3 fw on MK3S printer
}
#endif //IR_SENSOR_PIN
} }
void deinit() { void deinit() {
puts_P(PSTR("fsensor::deinit()")); puts_P(PSTR("fsensor::deinit()"));
;// ;//
state = State::disabled; state = State::disabled;
filter = 0;
} }
bool update() { bool update() {
switch (state) { switch (state) {
case State::initializing: case State::initializing:
// state = State::ready; //the IR sensor gets ready instantly as it's just a gpio read operation. if (!updatePAT9125()) {
break; // still not stable. Stay in the initialization state.
}
oldFilamentPresent = getFilamentPresent(); //initialize the current filament state so that we don't create a switching event right after the sensor is ready. oldFilamentPresent = getFilamentPresent(); //initialize the current filament state so that we don't create a switching event right after the sensor is ready.
// fallthru state = State::ready;
break;
case State::ready: { case State::ready: {
updatePAT9125();
postponedLoadEvent = false; postponedLoadEvent = false;
bool event = checkFilamentEvents(); bool event = checkFilamentEvents();
@ -476,16 +492,47 @@ public:
default: default:
return false; return false;
} }
return false;
} }
bool getFilamentPresent() { bool getFilamentPresent() {
return false;/// return filterFilPresent;
} }
void settings_init() { void settings_init() {
Filament_sensor::settings_init(); Filament_sensor::settings_init();
jamDetection = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_JAM_DETECTION);
}
private:
static constexpr uint16_t pollingPeriod = 10; //[ms]
static constexpr uint8_t filterCnt = 5; //how many checks need to be done in order to determine the filament presence precisely.
ShortTimer pollingTimer;
uint8_t filter;
uint8_t filterFilPresent;
bool jamDetection;
bool updatePAT9125() {
if (!pollingTimer.running() || pollingTimer.expired(pollingPeriod)) {
pollingTimer.start();
if (!pat9125_update()) {
init(); //try to reinit.
}
bool present = (pat9125_s < 17) || (pat9125_s >= 17 && pat9125_b >= 50);
if (present != filterFilPresent) {
filter++;
}
else if (filter) {
filter--;
}
if (filter >= filterCnt) {
filter = 0;
filterFilPresent = present;
}
}
return (filter == 0); //return stability
} }
protected:
}; };
#endif //(FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125) #endif //(FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125)

View File

@ -3445,15 +3445,13 @@ static void lcd_show_sensors_state()
lcd_print_state(finda_state); lcd_print_state(finda_state);
} }
#ifdef FILAMENT_SENSOR #ifdef FILAMENT_SENSOR
if (ir_sensor_detected) { idler_state = fsensor.getFilamentPresent();
idler_state = fsensor.getFilamentPresent(); lcd_puts_at_P(0, 1, _T(MSG_FSENSOR));
lcd_puts_at_P(0, 1, _T(MSG_FSENSOR)); lcd_set_cursor(LCD_WIDTH - 3, 1);
lcd_set_cursor(LCD_WIDTH - 3, 1); lcd_print_state(idler_state);
lcd_print_state(idler_state);
}
#endif //FILAMENT_SENSOR #endif //FILAMENT_SENSOR
#ifdef PAT9125 #if defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125)
// Display X and Y difference from Filament sensor // Display X and Y difference from Filament sensor
// Display Light intensity from Filament sensor // Display Light intensity from Filament sensor
// Frame_Avg register represents the average brightness of all pixels within a frame (324 pixels). This // Frame_Avg register represents the average brightness of all pixels within a frame (324 pixels). This
@ -3470,7 +3468,7 @@ static void lcd_show_sensors_state()
"S: %3d Yd:%6d"), "S: %3d Yd:%6d"),
pat9125_b, pat9125_x, pat9125_b, pat9125_x,
pat9125_s, pat9125_y); pat9125_s, pat9125_y);
#endif //PAT9125 #endif //defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125)
} }
void lcd_menu_show_sensors_state() // NOT static due to using inside "Marlin_main" module ("manage_inactivity()") void lcd_menu_show_sensors_state() // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")