PAT9125 first prototype
This commit is contained in:
parent
c5c4c21124
commit
65b2881b06
|
|
@ -168,7 +168,6 @@ protected:
|
|||
}
|
||||
|
||||
void triggerError() {
|
||||
// deinit(); //not sure if I should call this here.
|
||||
state = State::error;
|
||||
|
||||
/// some message, idk
|
||||
|
|
@ -223,6 +222,7 @@ public:
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool getFilamentPresent() {
|
||||
|
|
@ -447,23 +447,39 @@ public:
|
|||
deinit(); //deinit first if there was an error.
|
||||
}
|
||||
puts_P(PSTR("fsensor::init()"));
|
||||
;//
|
||||
|
||||
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() {
|
||||
puts_P(PSTR("fsensor::deinit()"));
|
||||
;//
|
||||
state = State::disabled;
|
||||
filter = 0;
|
||||
}
|
||||
|
||||
bool update() {
|
||||
switch (state) {
|
||||
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.
|
||||
// fallthru
|
||||
state = State::ready;
|
||||
break;
|
||||
case State::ready: {
|
||||
updatePAT9125();
|
||||
postponedLoadEvent = false;
|
||||
bool event = checkFilamentEvents();
|
||||
|
||||
|
|
@ -476,16 +492,47 @@ public:
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool getFilamentPresent() {
|
||||
return false;///
|
||||
return filterFilPresent;
|
||||
}
|
||||
|
||||
void 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)
|
||||
|
||||
|
|
|
|||
|
|
@ -3445,15 +3445,13 @@ static void lcd_show_sensors_state()
|
|||
lcd_print_state(finda_state);
|
||||
}
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (ir_sensor_detected) {
|
||||
idler_state = fsensor.getFilamentPresent();
|
||||
lcd_puts_at_P(0, 1, _T(MSG_FSENSOR));
|
||||
lcd_set_cursor(LCD_WIDTH - 3, 1);
|
||||
lcd_print_state(idler_state);
|
||||
}
|
||||
idler_state = fsensor.getFilamentPresent();
|
||||
lcd_puts_at_P(0, 1, _T(MSG_FSENSOR));
|
||||
lcd_set_cursor(LCD_WIDTH - 3, 1);
|
||||
lcd_print_state(idler_state);
|
||||
#endif //FILAMENT_SENSOR
|
||||
|
||||
#ifdef PAT9125
|
||||
#if defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125)
|
||||
// Display X and Y difference 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
|
||||
|
|
@ -3470,7 +3468,7 @@ static void lcd_show_sensors_state()
|
|||
"S: %3d Yd:%6d"),
|
||||
pat9125_b, pat9125_x,
|
||||
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()")
|
||||
|
|
|
|||
Loading…
Reference in New Issue