Merge branch 'MK3_3.9.0' into flashair_display_ip
This commit is contained in:
commit
a1254b3a3c
7 changed files with 128 additions and 68 deletions
|
@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
|
||||||
extern PGM_P sPrinterName;
|
extern PGM_P sPrinterName;
|
||||||
|
|
||||||
// Firmware version
|
// Firmware version
|
||||||
#define FW_VERSION "3.9.0-RC2"
|
#define FW_VERSION "3.9.0-RC3"
|
||||||
#define FW_COMMIT_NR 3398
|
#define FW_COMMIT_NR 3401
|
||||||
// FW_VERSION_UNKNOWN means this is an unofficial build.
|
// FW_VERSION_UNKNOWN means this is an unofficial build.
|
||||||
// The firmware should only be checked into github with this symbol.
|
// The firmware should only be checked into github with this symbol.
|
||||||
#define FW_DEV_VERSION FW_VERSION_UNKNOWN
|
#define FW_DEV_VERSION FW_VERSION_UNKNOWN
|
||||||
|
|
|
@ -9448,13 +9448,13 @@ static void handleSafetyTimer()
|
||||||
}
|
}
|
||||||
#endif //SAFETYTIMER
|
#endif //SAFETYTIMER
|
||||||
|
|
||||||
#define FS_CHECK_COUNT 15
|
#define FS_CHECK_COUNT 250
|
||||||
void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument set in Marlin.h
|
void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument set in Marlin.h
|
||||||
{
|
{
|
||||||
#ifdef FILAMENT_SENSOR
|
#ifdef FILAMENT_SENSOR
|
||||||
bool bInhibitFlag;
|
bool bInhibitFlag;
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
static uint8_t nFSCheckCount=0;
|
static uint16_t nFSCheckCount=0;
|
||||||
#endif // IR_SENSOR_ANALOG
|
#endif // IR_SENSOR_ANALOG
|
||||||
|
|
||||||
if (mmu_enabled == false)
|
if (mmu_enabled == false)
|
||||||
|
@ -9474,25 +9474,53 @@ static uint8_t nFSCheckCount=0;
|
||||||
if (!moves_planned() && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal) && ! eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE))
|
if (!moves_planned() && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal) && ! eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE))
|
||||||
{
|
{
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
bool bTemp=current_voltage_raw_IR>IRsensor_Hmin_TRESHOLD;
|
static uint16_t minVolt = Voltage2Raw(6.F), maxVolt = 0;
|
||||||
bTemp=bTemp&¤t_voltage_raw_IR<IRsensor_Hopen_TRESHOLD;
|
// detect min-max, some long term sliding window for filtration may be added
|
||||||
bTemp=bTemp&&(!CHECK_ALL_HEATERS);
|
// avoiding floating point operations, thus computing in raw
|
||||||
|
if( current_voltage_raw_IR > maxVolt )maxVolt = current_voltage_raw_IR;
|
||||||
|
if( current_voltage_raw_IR < minVolt )minVolt = current_voltage_raw_IR;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
{ // debug print
|
||||||
|
static uint16_t lastVolt = ~0U;
|
||||||
|
if( current_voltage_raw_IR != lastVolt ){
|
||||||
|
printf_P(PSTR("fs volt=%4.2fV (min=%4.2f max=%4.2f)\n"), Raw2Voltage(current_voltage_raw_IR), Raw2Voltage(minVolt), Raw2Voltage(maxVolt) );
|
||||||
|
lastVolt = current_voltage_raw_IR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// the trouble is, I can hold the filament in the hole in such a way, that it creates the exact voltage
|
||||||
|
// to be detected as the new fsensor
|
||||||
|
// We can either fake it by extending the detection window to a looooong time
|
||||||
|
// or do some other countermeasures
|
||||||
|
|
||||||
|
// what we want to detect:
|
||||||
|
// if minvolt gets below ~0.6V, it means there is an old fsensor
|
||||||
|
// if maxvolt gets above 4.6V, it means we either have an old fsensor or broken cables/fsensor
|
||||||
|
// So I'm waiting for a situation, when minVolt gets to range <0, 0.7> and maxVolt gets into range <4.4, 5>
|
||||||
|
// If and only if minVolt is in range <0.6, 0.7> and maxVolt is in range <4.4, 4.5>, I'm considering a situation with the new fsensor
|
||||||
|
// otherwise, I don't care
|
||||||
|
|
||||||
|
if( minVolt >= Voltage2Raw(0.3F) && minVolt <= Voltage2Raw(0.5F)
|
||||||
|
&& maxVolt >= Voltage2Raw(4.2F) && maxVolt <= Voltage2Raw(4.6F)
|
||||||
|
){
|
||||||
|
bool bTemp = (!CHECK_ALL_HEATERS);
|
||||||
bTemp = bTemp && (menu_menu==lcd_status_screen);
|
bTemp = bTemp && (menu_menu==lcd_status_screen);
|
||||||
bTemp = bTemp && ((oFsensorPCB==ClFsensorPCB::_Old)||(oFsensorPCB==ClFsensorPCB::_Undef));
|
bTemp = bTemp && ((oFsensorPCB==ClFsensorPCB::_Old)||(oFsensorPCB==ClFsensorPCB::_Undef));
|
||||||
bTemp = bTemp && fsensor_enabled;
|
bTemp = bTemp && fsensor_enabled;
|
||||||
if(bTemp)
|
if(bTemp){
|
||||||
{
|
|
||||||
nFSCheckCount++;
|
nFSCheckCount++;
|
||||||
if(nFSCheckCount>FS_CHECK_COUNT)
|
if(nFSCheckCount>FS_CHECK_COUNT){
|
||||||
{
|
|
||||||
nFSCheckCount=0; // not necessary
|
nFSCheckCount=0; // not necessary
|
||||||
oFsensorPCB=ClFsensorPCB::_Rev04;
|
oFsensorPCB=ClFsensorPCB::_Rev04;
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR_PCB,(uint8_t)oFsensorPCB);
|
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR_PCB,(uint8_t)oFsensorPCB);
|
||||||
printf_IRSensorAnalogBoardChange(true);
|
printf_IRSensorAnalogBoardChange(true);
|
||||||
lcd_setstatuspgm(_i("FS v0.4 or newer"));
|
lcd_setstatuspgm(_i("FS v0.4 or newer"));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
nFSCheckCount=0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else nFSCheckCount=0;
|
|
||||||
#endif // IR_SENSOR_ANALOG
|
#endif // IR_SENSOR_ANALOG
|
||||||
if (fsensor_check_autoload())
|
if (fsensor_check_autoload())
|
||||||
{
|
{
|
||||||
|
|
|
@ -176,7 +176,7 @@ void fsensor_init(void)
|
||||||
uint8_t pat9125 = pat9125_init();
|
uint8_t pat9125 = pat9125_init();
|
||||||
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
|
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
|
||||||
#endif //PAT9125
|
#endif //PAT9125
|
||||||
uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
|
uint8_t fsensor_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
|
||||||
fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
|
fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
|
||||||
fsensor_not_responding = false;
|
fsensor_not_responding = false;
|
||||||
#ifdef PAT9125
|
#ifdef PAT9125
|
||||||
|
@ -184,9 +184,8 @@ void fsensor_init(void)
|
||||||
fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
|
fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
|
||||||
fsensor_set_axis_steps_per_unit(cs.axis_steps_per_unit[E_AXIS]);
|
fsensor_set_axis_steps_per_unit(cs.axis_steps_per_unit[E_AXIS]);
|
||||||
|
|
||||||
if (!pat9125)
|
if (!pat9125){
|
||||||
{
|
fsensor_enabled = 0; //disable sensor
|
||||||
fsensor = 0; //disable sensor
|
|
||||||
fsensor_not_responding = true;
|
fsensor_not_responding = true;
|
||||||
}
|
}
|
||||||
#endif //PAT9125
|
#endif //PAT9125
|
||||||
|
@ -194,19 +193,27 @@ void fsensor_init(void)
|
||||||
bIRsensorStateFlag=false;
|
bIRsensorStateFlag=false;
|
||||||
oFsensorPCB = (ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
|
oFsensorPCB = (ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
|
||||||
oFsensorActionNA = (ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
|
oFsensorActionNA = (ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
|
||||||
|
|
||||||
|
// If the fsensor is not responding even at the start of the printer,
|
||||||
|
// set this flag accordingly to show N/A in Settings->Filament sensor.
|
||||||
|
// This is even valid for both fsensor board revisions (0.3 or older and 0.4).
|
||||||
|
// Must be done after reading what type of fsensor board we have
|
||||||
|
fsensor_not_responding = ! fsensor_IR_check();
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
if (fsensor)
|
if (fsensor_enabled){
|
||||||
fsensor_enable(false); // (in this case) EEPROM update is not necessary
|
fsensor_enable(false); // (in this case) EEPROM update is not necessary
|
||||||
else
|
} else {
|
||||||
fsensor_disable(false); // (in this case) EEPROM update is not necessary
|
fsensor_disable(false); // (in this case) EEPROM update is not necessary
|
||||||
|
}
|
||||||
printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
|
printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
printf_P(PSTR(" (sensor board revision: %S)\n"),(oFsensorPCB==ClFsensorPCB::_Rev04) ? MSG_04_OR_NEWER : MSG_03_OR_OLDER);
|
printf_P(PSTR(" (sensor board revision:%S)\n"), (oFsensorPCB==ClFsensorPCB::_Rev04) ? _T(MSG_04_OR_NEWER) : _T(MSG_03_OR_OLDER));
|
||||||
#else //IR_SENSOR_ANALOG
|
#else //IR_SENSOR_ANALOG
|
||||||
printf_P(PSTR("\n"));
|
printf_P(PSTR("\n"));
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
if (check_for_ir_sensor()) ir_sensor_detected = true;
|
if (check_for_ir_sensor()){
|
||||||
|
ir_sensor_detected = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fsensor_enable(bool bUpdateEEPROM)
|
bool fsensor_enable(bool bUpdateEEPROM)
|
||||||
|
@ -691,12 +698,16 @@ void fsensor_update(void)
|
||||||
ADCSRB=nMUX2;
|
ADCSRB=nMUX2;
|
||||||
ENABLE_TEMPERATURE_INTERRUPT();
|
ENABLE_TEMPERATURE_INTERRUPT();
|
||||||
// end of sequence for ...
|
// end of sequence for ...
|
||||||
if((oFsensorPCB==ClFsensorPCB::_Rev04)&&((nADC*OVERSAMPLENR)>((int)IRsensor_Hopen_TRESHOLD)))
|
// Detection of correct function of fsensor v04 - it must NOT read >4.6V
|
||||||
|
// If it does, it means a disconnected cables or faulty board
|
||||||
|
if( (oFsensorPCB == ClFsensorPCB::_Rev04) && ( (nADC*OVERSAMPLENR) > IRsensor_Hopen_TRESHOLD ) )
|
||||||
{
|
{
|
||||||
fsensor_disable();
|
fsensor_disable();
|
||||||
fsensor_not_responding = true;
|
fsensor_not_responding = true;
|
||||||
printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
|
printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
|
||||||
if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
|
if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
|
||||||
|
|
||||||
|
// if we are printing and FS action is set to "Pause", force pause the print
|
||||||
if(oFsensorActionNA==ClFsensorActionNA::_Pause)
|
if(oFsensorActionNA==ClFsensorActionNA::_Pause)
|
||||||
lcd_pause_print();
|
lcd_pause_print();
|
||||||
}
|
}
|
||||||
|
@ -720,14 +731,27 @@ void fsensor_update(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
bool fsensor_IR_check()
|
/// This is called only upon start of the printer or when switching the fsensor ON in the menu
|
||||||
{
|
/// We cannot do temporal window checks here (aka the voltage has been in some range for a period of time)
|
||||||
uint16_t volt_IR_int;
|
bool fsensor_IR_check(){
|
||||||
bool bCheckResult;
|
if( IRsensor_Lmax_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_Hmin_TRESHOLD ){
|
||||||
|
// If the voltage is in forbidden range, the fsensor is ok, but the lever is mounted improperly.
|
||||||
|
// Or the user is so creative so that he can hold a piece of fillament in the hole in such a genius way,
|
||||||
|
// that the IR fsensor reading is within 1.5 and 3V ... this would have been highly unusual
|
||||||
|
// and would have been considered more like a sabotage than normal printer operation
|
||||||
|
printf_P(PSTR("fsensor in forbidden range 1.5-3V - bad lever\n"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
volt_IR_int=current_voltage_raw_IR;
|
if( oFsensorPCB == ClFsensorPCB::_Rev04 ){
|
||||||
bCheckResult=(volt_IR_int<((int)IRsensor_Lmax_TRESHOLD))||(volt_IR_int>((int)IRsensor_Hmin_TRESHOLD));
|
// newer IR sensor cannot normally produce 4.6-5V, this is considered a failure/bad mount
|
||||||
bCheckResult=bCheckResult&&(!((oFsensorPCB==ClFsensorPCB::_Rev04)&&(volt_IR_int>((int)IRsensor_Hopen_TRESHOLD))));
|
if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){
|
||||||
return(bCheckResult);
|
printf_P(PSTR("fsensor v0.4 in fault range 4.6-5V - unconnected\n"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// otherwise the IR fsensor is considered working correctly
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
|
|
|
@ -74,7 +74,7 @@ int current_voltage_raw_bed = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
int current_voltage_raw_IR = 0;
|
uint16_t current_voltage_raw_IR = 0;
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
|
|
||||||
int current_temperature_bed_raw = 0;
|
int current_temperature_bed_raw = 0;
|
||||||
|
|
|
@ -79,7 +79,7 @@ extern int current_voltage_raw_bed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
extern int current_voltage_raw_IR;
|
extern uint16_t current_voltage_raw_IR;
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
|
|
||||||
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
|
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
|
||||||
|
|
|
@ -1981,8 +1981,7 @@ static void lcd_menu_voltages()
|
||||||
lcd_home();
|
lcd_home();
|
||||||
lcd_printf_P(PSTR(" PWR: %4.1fV\n" " BED: %4.1fV"), volt_pwr, volt_bed);
|
lcd_printf_P(PSTR(" PWR: %4.1fV\n" " BED: %4.1fV"), volt_pwr, volt_bed);
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
float volt_IR = VOLT_DIV_REF * ((float)current_voltage_raw_IR / (1023 * OVERSAMPLENR));
|
lcd_printf_P(PSTR("\n IR : %3.1fV"), Raw2Voltage(current_voltage_raw_IR));
|
||||||
lcd_printf_P(PSTR("\n IR : %3.1fV"),volt_IR);
|
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
menu_back_if_clicked();
|
menu_back_if_clicked();
|
||||||
}
|
}
|
||||||
|
@ -2169,10 +2168,10 @@ static void lcd_support_menu()
|
||||||
switch(oFsensorPCB)
|
switch(oFsensorPCB)
|
||||||
{
|
{
|
||||||
case ClFsensorPCB::_Old:
|
case ClFsensorPCB::_Old:
|
||||||
MENU_ITEM_BACK_P(MSG_03_OR_OLDER);
|
MENU_ITEM_BACK_P(_T(MSG_03_OR_OLDER));
|
||||||
break;
|
break;
|
||||||
case ClFsensorPCB::_Rev04:
|
case ClFsensorPCB::_Rev04:
|
||||||
MENU_ITEM_BACK_P(MSG_04_OR_NEWER);
|
MENU_ITEM_BACK_P(_T(MSG_04_OR_NEWER));
|
||||||
break;
|
break;
|
||||||
case ClFsensorPCB::_Undef:
|
case ClFsensorPCB::_Undef:
|
||||||
default:
|
default:
|
||||||
|
@ -7512,30 +7511,26 @@ void lcd_belttest()
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
// called also from marlin_main.cpp
|
// called also from marlin_main.cpp
|
||||||
void printf_IRSensorAnalogBoardChange(bool bPCBrev04){
|
void printf_IRSensorAnalogBoardChange(bool bPCBrev04){
|
||||||
printf_P(PSTR("Filament sensor board change detected: revision %S\n"), bPCBrev04 ? MSG_04_OR_NEWER : MSG_03_OR_OLDER);
|
printf_P(PSTR("Filament sensor board change detected: revision%S\n"), bPCBrev04 ? _T(MSG_04_OR_NEWER) : _T(MSG_03_OR_OLDER));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool lcd_selftest_IRsensor(bool bStandalone)
|
static bool lcd_selftest_IRsensor(bool bStandalone)
|
||||||
{
|
{
|
||||||
bool bAction;
|
|
||||||
bool bPCBrev04;
|
bool bPCBrev04;
|
||||||
uint16_t volt_IR_int;
|
uint16_t volt_IR_int;
|
||||||
float volt_IR;
|
|
||||||
|
|
||||||
volt_IR_int = current_voltage_raw_IR;
|
volt_IR_int = current_voltage_raw_IR;
|
||||||
bPCBrev04=(volt_IR_int<((int)IRsensor_Hopen_TRESHOLD));
|
bPCBrev04=(volt_IR_int < IRsensor_Hopen_TRESHOLD);
|
||||||
volt_IR=VOLT_DIV_REF*((float)volt_IR_int/(1023*OVERSAMPLENR));
|
printf_P(PSTR("Measured filament sensor high level: %4.2fV\n"), Raw2Voltage(volt_IR_int) );
|
||||||
printf_P(PSTR("Measured filament sensor high level: %4.2fV\n"),volt_IR);
|
if(volt_IR_int < IRsensor_Hmin_TRESHOLD){
|
||||||
if(volt_IR_int < ((int)IRsensor_Hmin_TRESHOLD)){
|
|
||||||
if(!bStandalone)
|
if(!bStandalone)
|
||||||
lcd_selftest_error(TestError::FsensorLevel,"HIGH","");
|
lcd_selftest_error(TestError::FsensorLevel,"HIGH","");
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
lcd_show_fullscreen_message_and_wait_P(_i("Insert the filament (do not load it) into the extruder and then press the knob."));
|
lcd_show_fullscreen_message_and_wait_P(_i("Insert the filament (do not load it) into the extruder and then press the knob."));
|
||||||
volt_IR_int = current_voltage_raw_IR;
|
volt_IR_int = current_voltage_raw_IR;
|
||||||
volt_IR=VOLT_DIV_REF*((float)volt_IR_int/(1023*OVERSAMPLENR));
|
printf_P(PSTR("Measured filament sensor low level: %4.2fV\n"), Raw2Voltage(volt_IR_int));
|
||||||
printf_P(PSTR("Measured filament sensor low level: %4.2fV\n"),volt_IR);
|
if(volt_IR_int > (IRsensor_Lmax_TRESHOLD)){
|
||||||
if(volt_IR_int > ((int)IRsensor_Lmax_TRESHOLD)){
|
|
||||||
if(!bStandalone)
|
if(!bStandalone)
|
||||||
lcd_selftest_error(TestError::FsensorLevel,"LOW","");
|
lcd_selftest_error(TestError::FsensorLevel,"LOW","");
|
||||||
return(false);
|
return(false);
|
||||||
|
@ -7558,10 +7553,14 @@ static void lcd_detect_IRsensor(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bAction = lcd_selftest_IRsensor(true);
|
bAction = lcd_selftest_IRsensor(true);
|
||||||
if(bAction)
|
if(bAction){
|
||||||
lcd_show_fullscreen_message_and_wait_P(_i("Sensor verified, remove the filament now."));
|
lcd_show_fullscreen_message_and_wait_P(_i("Sensor verified, remove the filament now."));
|
||||||
else
|
// the fsensor board has been successfully identified, any previous "not responding" may be cleared now
|
||||||
|
fsensor_not_responding = false;
|
||||||
|
} else {
|
||||||
lcd_show_fullscreen_message_and_wait_P(_i("Verification failed, remove the filament and try again."));
|
lcd_show_fullscreen_message_and_wait_P(_i("Verification failed, remove the filament and try again."));
|
||||||
|
// here it is unclear what to to with the fsensor_not_responding flag
|
||||||
|
}
|
||||||
bMenuFSDetect=false; // de-inhibits some code inside "manage_inactivity()"
|
bMenuFSDetect=false; // de-inhibits some code inside "manage_inactivity()"
|
||||||
}
|
}
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
|
|
|
@ -259,10 +259,19 @@ void lcd_wizard(WizState state);
|
||||||
|
|
||||||
#define VOLT_DIV_REF 5
|
#define VOLT_DIV_REF 5
|
||||||
#ifdef IR_SENSOR_ANALOG
|
#ifdef IR_SENSOR_ANALOG
|
||||||
#define IRsensor_Hmin_TRESHOLD (3.0*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~3.0V (0.6*Vcc)
|
constexpr uint16_t Voltage2Raw(float V){
|
||||||
#define IRsensor_Lmax_TRESHOLD (1.5*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~1.5V (0.3*Vcc)
|
return ( V * 1023 * OVERSAMPLENR / VOLT_DIV_REF ) + 0.5F;
|
||||||
#define IRsensor_Hopen_TRESHOLD (4.6*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k)
|
}
|
||||||
#define IRsensor_Ldiode_TRESHOLD (0.3*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~0.3V
|
constexpr float Raw2Voltage(uint16_t raw){
|
||||||
|
return VOLT_DIV_REF*(raw / (1023.F * OVERSAMPLENR) );
|
||||||
|
}
|
||||||
|
constexpr uint16_t IRsensor_Hmin_TRESHOLD = Voltage2Raw(3.0F); // ~3.0V (0.6*Vcc), raw value=9821
|
||||||
|
constexpr uint16_t IRsensor_Lmax_TRESHOLD = Voltage2Raw(1.5F); // ~1.5V (0.3*Vcc), raw value=4910
|
||||||
|
constexpr uint16_t IRsensor_Hopen_TRESHOLD = Voltage2Raw(4.6F); // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k), raw value=15059
|
||||||
|
constexpr uint16_t IRsensor_Ldiode_TRESHOLD = Voltage2Raw(0.3F); // ~0.3V, raw value=982
|
||||||
|
constexpr uint16_t IRsensor_VMax_TRESHOLD = Voltage2Raw(5.F); // ~5V, raw value=16368
|
||||||
|
|
||||||
|
|
||||||
#endif //IR_SENSOR_ANALOG
|
#endif //IR_SENSOR_ANALOG
|
||||||
|
|
||||||
#endif //ULTRALCD_H
|
#endif //ULTRALCD_H
|
||||||
|
|
Loading…
Add table
Reference in a new issue