@ -262,15 +262,15 @@ static void lcd_status_screen()
# endif
# endif //LCD_PROGRESS_BAR
if ( lcd_status_update_delay )
lcd_status_update_delay - - ;
else
lcdDrawUpdate = 1 ;
if ( lcdDrawUpdate ) {
lcd_implementation_status_screen ( ) ;
lcd_status_update_delay = 10 ; /* redraw the main screen every second. This is easier then trying keep track of all things that change on the screen */
}
if ( lcd_status_update_delay )
lcd_status_update_delay - - ;
else
lcdDrawUpdate = 1 ;
if ( lcdDrawUpdate ) {
lcd_implementation_status_screen ( ) ;
lcd_status_update_delay = 10 ; /* redraw the main screen every second. This is easier then trying keep track of all things that change on the screen */
}
# ifdef ULTIPANEL
@ -346,86 +346,82 @@ static void lcd_sdcard_pause() { card.pauseSDPrint(); }
static void lcd_sdcard_resume ( ) { card . startFileprint ( ) ; }
static void lcd_sdcard_stop ( )
{
card . sdprinting = false ;
card . closefile ( ) ;
quickStop ( ) ;
if ( SD_FINISHED_STEPPERRELEASE )
{
enquecommands_P ( PSTR ( SD_FINISHED_RELEASECOMMAND ) ) ;
}
autotempShutdown ( ) ;
static void lcd_sdcard_stop ( ) {
card . sdprinting = false ;
card . closefile ( ) ;
quickStop ( ) ;
if ( SD_FINISHED_STEPPERRELEASE ) {
enquecommands_P ( PSTR ( SD_FINISHED_RELEASECOMMAND ) ) ;
}
autotempShutdown ( ) ;
cancel_heatup = true ;
cancel_heatup = true ;
lcd_setstatus ( MSG_PRINT_ABORTED ) ;
lcd_setstatus ( MSG_PRINT_ABORTED ) ;
}
/* Menu implementation */
static void lcd_main_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_WATCH , lcd_status_screen ) ;
if ( movesplanned ( ) | | IS_SD_PRINTING )
{
MENU_ITEM ( submenu , MSG_TUNE , lcd_tune_menu ) ;
} else {
MENU_ITEM ( submenu , MSG_PREPARE , lcd_prepare_menu ) ;
# ifdef DELTA_CALIBRATION_MENU
MENU_ITEM ( submenu , MSG_DELTA_CALIBRATE , lcd_delta_calibrate_menu ) ;
# endif // DELTA_CALIBRATION_MENU
static void lcd_main_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_WATCH , lcd_status_screen ) ;
if ( movesplanned ( ) | | IS_SD_PRINTING ) {
MENU_ITEM ( submenu , MSG_TUNE , lcd_tune_menu ) ;
}
else {
MENU_ITEM ( submenu , MSG_PREPARE , lcd_prepare_menu ) ;
# ifdef DELTA_CALIBRATION_MENU
MENU_ITEM ( submenu , MSG_DELTA_CALIBRATE , lcd_delta_calibrate_menu ) ;
# endif
}
MENU_ITEM ( submenu , MSG_CONTROL , lcd_control_menu ) ;
# ifdef SDSUPPORT
if ( card . cardOK ) {
if ( card . isFileOpen ( ) ) {
if ( card . sdprinting )
MENU_ITEM ( function , MSG_PAUSE_PRINT , lcd_sdcard_pause ) ;
else
MENU_ITEM ( function , MSG_RESUME_PRINT , lcd_sdcard_resume ) ;
MENU_ITEM ( function , MSG_STOP_PRINT , lcd_sdcard_stop ) ;
}
else {
MENU_ITEM ( submenu , MSG_CARD_MENU , lcd_sdcard_menu ) ;
# if SDCARDDETECT < 1
MENU_ITEM ( gcode , MSG_CNG_SDCARD , PSTR ( " M21 " ) ) ; // SD-card changed by user
# endif
}
}
/*JFR TEST*/ MENU_ITEM ( gcode , " test multiline " , PSTR ( " G4 S3 \n M104 S50 \n G4 S1 \n M104 S200 \n G4 S2 \n M104 S0 " ) ) ; // SD-card changed by user
MENU_ITEM ( submenu , MSG_CONTROL , lcd_control_menu ) ;
# ifdef SDSUPPORT
if ( card . cardOK )
{
if ( card . isFileOpen ( ) )
{
if ( card . sdprinting )
MENU_ITEM ( function , MSG_PAUSE_PRINT , lcd_sdcard_pause ) ;
else
MENU_ITEM ( function , MSG_RESUME_PRINT , lcd_sdcard_resume ) ;
MENU_ITEM ( function , MSG_STOP_PRINT , lcd_sdcard_stop ) ;
} else {
MENU_ITEM ( submenu , MSG_CARD_MENU , lcd_sdcard_menu ) ;
# if SDCARDDETECT < 1
MENU_ITEM ( gcode , MSG_CNG_SDCARD , PSTR ( " M21 " ) ) ; // SD-card changed by user
# endif
}
} else {
MENU_ITEM ( submenu , MSG_NO_CARD , lcd_sdcard_menu ) ;
# if SDCARDDETECT < 1
else {
MENU_ITEM ( submenu , MSG_NO_CARD , lcd_sdcard_menu ) ;
# if SDCARDDETECT < 1
MENU_ITEM ( gcode , MSG_INIT_SDCARD , PSTR ( " M21 " ) ) ; // Manually initialize the SD-card via user interface
# endif
# endif
}
# endif
END_MENU ( ) ;
# endif //SDSUPPORT
END_MENU ( ) ;
}
# ifdef SDSUPPORT
static void lcd_autostart_sd ( )
{
card . autostart_index = 0 ;
static void lcd_autostart_sd ( ) {
card . autostart_index = 0 ;
card . setroot ( ) ;
card . checkautostart ( true ) ;
}
}
# endif
void lcd_set_home_offsets ( )
{
for ( int8_t i = 0 ; i < NUM_AXIS ; i + + ) {
if ( i ! = E_AXIS ) {
add_homing [ i ] - = current_position [ i ] ;
current_position [ i ] = 0.0 ;
}
void lcd_set_home_offsets ( ) {
for ( int8_t i = 0 ; i < NUM_AXIS ; i + + ) {
if ( i ! = E_AXIS ) {
add_homing [ i ] - = current_position [ i ] ;
current_position [ i ] = 0.0 ;
}
plan_set_position ( 0.0 , 0.0 , 0.0 , current_position [ E_AXIS ] ) ;
}
plan_set_position ( 0.0 , 0.0 , 0.0 , current_position [ E_AXIS ] ) ;
// Audio feedback
enquecommands_P ( PSTR ( " M300 S659 P200 \n M300 S698 P200 " ) ) ;
lcd_return_to_status ( ) ;
// Audio feedback
enquecommands_P ( PSTR ( " M300 S659 P200 \n M300 S698 P200 " ) ) ;
lcd_return_to_status ( ) ;
}
@ -446,274 +442,181 @@ void lcd_set_home_offsets()
# endif //BABYSTEPPING
static void lcd_tune_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_SPEED , & feedmultiply , 10 , 999 ) ;
# if TEMP_SENSOR_0 != 0
static void lcd_tune_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_SPEED , & feedmultiply , 10 , 999 ) ;
# if TEMP_SENSOR_0 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE , & target_temperature [ 0 ] , 0 , HEATER_0_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_1 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 2 " , & target_temperature [ 1 ] , 0 , HEATER_1_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_2 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 3 " , & target_temperature [ 2 ] , 0 , HEATER_2_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_3 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 4 " , & target_temperature [ 3 ] , 0 , HEATER_3_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_BED != 0
# endif
# if TEMP_SENSOR_1 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N2 , & target_temperature [ 1 ] , 0 , HEATER_1_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_2 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N3 , & target_temperature [ 2 ] , 0 , HEATER_2_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_3 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N4 , & target_temperature [ 3 ] , 0 , HEATER_3_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_BED != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_BED , & target_temperature_bed , 0 , BED_MAXTEMP - 15 ) ;
# endif
# endif
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_FAN_SPEED , & fanSpeed , 0 , 255 ) ;
MENU_ITEM_EDIT ( int3 , MSG_FLOW , & extrudemultiply , 10 , 999 ) ;
MENU_ITEM_EDIT ( int3 , MSG_FLOW " 0 " , & extruder_multiply [ 0 ] , 10 , 999 ) ;
# if TEMP_SENSOR_1 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW " 1 " , & extruder_multiply [ 1 ] , 10 , 999 ) ;
# endif
# if TEMP_SENSOR_2 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW " 2 " , & extruder_multiply [ 2 ] , 10 , 999 ) ;
# endif
# if TEMP_SENSOR_3 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW " 3 " , & extruder_multiply [ 3 ] , 10 , 999 ) ;
# endif
MENU_ITEM_EDIT ( int3 , MSG_FLOW MSG_F0 , & extruder_multiply [ 0 ] , 10 , 999 ) ;
# if TEMP_SENSOR_1 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW MSG_F1 , & extruder_multiply [ 1 ] , 10 , 999 ) ;
# endif
# if TEMP_SENSOR_2 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW MSG_F2 , & extruder_multiply [ 2 ] , 10 , 999 ) ;
# endif
# if TEMP_SENSOR_3 != 0
MENU_ITEM_EDIT ( int3 , MSG_FLOW MSG_F3 , & extruder_multiply [ 3 ] , 10 , 999 ) ;
# endif
# ifdef BABYSTEPPING
# ifdef BABYSTEPPING
# ifdef BABYSTEP_XY
MENU_ITEM ( submenu , MSG_BABYSTEP_X , lcd_babystep_x ) ;
MENU_ITEM ( submenu , MSG_BABYSTEP_Y , lcd_babystep_y ) ;
# endif //BABYSTEP_XY
MENU_ITEM ( submenu , MSG_BABYSTEP_Z , lcd_babystep_z ) ;
# endif
# ifdef FILAMENTCHANGEENABLE
# endif
# ifdef FILAMENTCHANGEENABLE
MENU_ITEM ( gcode , MSG_FILAMENTCHANGE , PSTR ( " M600 " ) ) ;
# endif
END_MENU ( ) ;
}
void lcd_preheat_pla0 ( )
{
setTargetHotend0 ( plaPreheatHotendTemp ) ;
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
# endif
END_MENU ( ) ;
}
void lcd_preheat_abs0 ( )
{
setTargetHotend0 ( absPreheatHotendTemp ) ;
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
void _lcd_preheat ( int endnum , const float temph , const float tempb , const int fan ) {
if ( temph > 0 ) setTargetHotend ( temph , endnum ) ;
setTargetBed ( tempb ) ;
fanSpeed = fan ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_pla0 ( ) { _lcd_preheat ( 0 , plaPreheatHotendTemp , plaPreheatHPBTemp , plaPreheatFanSpeed ) ; }
void lcd_preheat_abs0 ( ) { _lcd_preheat ( 0 , absPreheatHotendTemp , absPreheatHPBTemp , absPreheatFanSpeed ) ; }
# if TEMP_SENSOR_1 != 0 //2nd extruder preheat
void lcd_preheat_pla1 ( )
{
setTargetHotend1 ( plaPreheatHotendTemp ) ;
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_abs1 ( )
{
setTargetHotend1 ( absPreheatHotendTemp ) ;
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_pla1 ( ) { _lcd_preheat ( 1 , plaPreheatHotendTemp , plaPreheatHPBTemp , plaPreheatFanSpeed ) ; }
void lcd_preheat_abs1 ( ) { _lcd_preheat ( 1 , absPreheatHotendTemp , absPreheatHPBTemp , absPreheatFanSpeed ) ; }
# endif //2nd extruder preheat
# if TEMP_SENSOR_2 != 0 //3 extruder preheat
void lcd_preheat_pla2 ( )
{
setTargetHotend2 ( plaPreheatHotendTemp ) ;
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_abs2 ( )
{
setTargetHotend2 ( absPreheatHotendTemp ) ;
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_pla2 ( ) { _lcd_preheat ( 2 , plaPreheatHotendTemp , plaPreheatHPBTemp , plaPreheatFanSpeed ) ; }
void lcd_preheat_abs2 ( ) { _lcd_preheat ( 2 , absPreheatHotendTemp , absPreheatHPBTemp , absPreheatFanSpeed ) ; }
# endif //3 extruder preheat
# if TEMP_SENSOR_3 != 0 //4 extruder preheat
void lcd_preheat_pla3 ( )
{
setTargetHotend3 ( plaPreheatHotendTemp ) ;
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_abs3 ( )
{
setTargetHotend3 ( absPreheatHotendTemp ) ;
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_pla3 ( ) { _lcd_preheat ( 3 , plaPreheatHotendTemp , plaPreheatHPBTemp , plaPreheatFanSpeed ) ; }
void lcd_preheat_abs3 ( ) { _lcd_preheat ( 3 , absPreheatHotendTemp , absPreheatHPBTemp , absPreheatFanSpeed ) ; }
# endif //4 extruder preheat
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 //more than one extruder present
void lcd_preheat_pla0123 ( )
{
void lcd_preheat_pla0123 ( ) {
setTargetHotend0 ( plaPreheatHotendTemp ) ;
setTargetHotend1 ( plaPreheatHotendTemp ) ;
setTargetHotend2 ( plaPreheatHotendTemp ) ;
setTargetHotend3 ( plaPreheatHotendTemp ) ;
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_abs0123 ( )
{
_lcd_preheat ( 3 , plaPreheatHotendTemp , plaPreheatHPBTemp , plaPreheatFanSpeed ) ;
}
void lcd_preheat_abs0123 ( ) {
setTargetHotend0 ( absPreheatHotendTemp ) ;
setTargetHotend1 ( absPreheatHotendTemp ) ;
setTargetHotend2 ( absPreheatHotendTemp ) ;
setTargetHotend3 ( absPreheatHotendTemp ) ;
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
_lcd_preheat ( 3 , absPreheatHotendTemp , absPreheatHPBTemp , absPreheatFanSpeed ) ;
}
# endif //more than one extruder present
void lcd_preheat_pla_bedonly ( )
{
setTargetBed ( plaPreheatHPBTemp ) ;
fanSpeed = plaPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_abs_bedonly ( )
{
setTargetBed ( absPreheatHPBTemp ) ;
fanSpeed = absPreheatFanSpeed ;
lcd_return_to_status ( ) ;
setWatch ( ) ; // heater sanity check timer
}
void lcd_preheat_pla_bedonly ( ) { _lcd_preheat ( 0 , 0 , plaPreheatHPBTemp , plaPreheatFanSpeed ) ; }
void lcd_preheat_abs_bedonly ( ) { _lcd_preheat ( 0 , 0 , absPreheatHPBTemp , absPreheatFanSpeed ) ; }
static void lcd_preheat_pla_menu ( )
{
static void lcd_preheat_pla_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_PREPARE , lcd_prepare_menu ) ;
MENU_ITEM ( function , MSG_PREHEAT_PLA_N " 1 " , lcd_preheat_pla0 ) ;
# if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N " 2 " , lcd_preheat_pla1 ) ;
# endif //2 extruder preheat
# if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N " 3 " , lcd_preheat_pla2 ) ;
# endif //3 extruder preheat
# if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N " 4 " , lcd_preheat_pla3 ) ;
# endif //4 extruder preheat
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 //all extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_ALL , lcd_preheat_pla0123 ) ;
# endif //all extruder preheat
# if TEMP_SENSOR_BED != 0
MENU_ITEM ( function , MSG_PREHEAT_PLA_BEDONLY , lcd_preheat_pla_bedonly ) ;
# endif
MENU_ITEM ( function , MSG_PREHEAT_PLA_N MSG_H1 , lcd_preheat_pla0 ) ;
# if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N MSG_H2 , lcd_preheat_pla1 ) ;
# endif //2 extruder preheat
# if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N MSG_H3 , lcd_preheat_pla2 ) ;
# endif //3 extruder preheat
# if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_N MSG_H4 , lcd_preheat_pla3 ) ;
# endif //4 extruder preheat
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 //all extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_PLA_ALL , lcd_preheat_pla0123 ) ;
# endif //all extruder preheat
# if TEMP_SENSOR_BED != 0
MENU_ITEM ( function , MSG_PREHEAT_PLA_BEDONLY , lcd_preheat_pla_bedonly ) ;
# endif
END_MENU ( ) ;
}
static void lcd_preheat_abs_menu ( )
{
static void lcd_preheat_abs_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_PREPARE , lcd_prepare_menu ) ;
MENU_ITEM ( function , MSG_PREHEAT_ABS_N " 1 " , lcd_preheat_abs0 ) ;
# if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N " 2 " , lcd_preheat_abs1 ) ;
# endif //2 extruder preheat
# if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N " 3 " , lcd_preheat_abs2 ) ;
# endif //3 extruder preheat
# if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N " 4 " , lcd_preheat_abs3 ) ;
# endif //4 extruder preheat
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 //all extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_ALL , lcd_preheat_abs0123 ) ;
# endif //all extruder preheat
# if TEMP_SENSOR_BED != 0
MENU_ITEM ( function , MSG_PREHEAT_ABS_BEDONLY , lcd_preheat_abs_bedonly ) ;
# endif
MENU_ITEM ( function , MSG_PREHEAT_ABS_N MSG_H1 , lcd_preheat_abs0 ) ;
# if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N MSG_H2 , lcd_preheat_abs1 ) ;
# endif //2 extruder preheat
# if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N MSG_H3 , lcd_preheat_abs2 ) ;
# endif //3 extruder preheat
# if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_N MSG_H4 , lcd_preheat_abs3 ) ;
# endif //4 extruder preheat
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 //all extruder preheat
MENU_ITEM ( function , MSG_PREHEAT_ABS_ALL , lcd_preheat_abs0123 ) ;
# endif //all extruder preheat
# if TEMP_SENSOR_BED != 0
MENU_ITEM ( function , MSG_PREHEAT_ABS_BEDONLY , lcd_preheat_abs_bedonly ) ;
# endif
END_MENU ( ) ;
}
void lcd_cooldown ( )
{
setTargetHotend0 ( 0 ) ;
setTargetHotend1 ( 0 ) ;
setTargetHotend2 ( 0 ) ;
setTargetHotend3 ( 0 ) ;
setTargetBed ( 0 ) ;
fanSpeed = 0 ;
lcd_return_to_status ( ) ;
void lcd_cooldown ( ) {
setTargetHotend0 ( 0 ) ;
setTargetHotend1 ( 0 ) ;
setTargetHotend2 ( 0 ) ;
setTargetHotend3 ( 0 ) ;
setTargetBed ( 0 ) ;
fanSpeed = 0 ;
lcd_return_to_status ( ) ;
}
static void lcd_prepare_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
# ifdef SDSUPPORT
static void lcd_prepare_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
# ifdef SDSUPPORT
# ifdef MENU_ADDAUTOSTART
MENU_ITEM ( function , MSG_AUTOSTART , lcd_autostart_sd ) ;
# endif
# endif
MENU_ITEM ( gcode , MSG_DISABLE_STEPPERS , PSTR ( " M84 " ) ) ;
MENU_ITEM ( gcode , MSG_AUTO_HOME , PSTR ( " G28 " ) ) ;
MENU_ITEM ( function , MSG_SET_HOME_OFFSETS , lcd_set_home_offsets ) ;
//MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0"));
# if TEMP_SENSOR_0 != 0
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_BED != 0
MENU_ITEM ( submenu , MSG_PREHEAT_PLA , lcd_preheat_pla_menu ) ;
MENU_ITEM ( submenu , MSG_PREHEAT_ABS , lcd_preheat_abs_menu ) ;
# else
MENU_ITEM ( function , MSG_PREHEAT_PLA , lcd_preheat_pla0 ) ;
MENU_ITEM ( function , MSG_PREHEAT_ABS , lcd_preheat_abs0 ) ;
# endif
# endif
MENU_ITEM ( function , MSG_COOLDOWN , lcd_cooldown ) ;
# if PS_ON_PIN > -1
if ( powersupply )
{
MENU_ITEM ( gcode , MSG_SWITCH_PS_OFF , PSTR ( " M81 " ) ) ;
} else {
MENU_ITEM ( gcode , MSG_SWITCH_PS_ON , PSTR ( " M80 " ) ) ;
MENU_ITEM ( gcode , MSG_DISABLE_STEPPERS , PSTR ( " M84 " ) ) ;
MENU_ITEM ( gcode , MSG_AUTO_HOME , PSTR ( " G28 " ) ) ;
MENU_ITEM ( function , MSG_SET_HOME_OFFSETS , lcd_set_home_offsets ) ;
//MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0"));
# if TEMP_SENSOR_0 != 0
# if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_BED != 0
MENU_ITEM ( submenu , MSG_PREHEAT_PLA , lcd_preheat_pla_menu ) ;
MENU_ITEM ( submenu , MSG_PREHEAT_ABS , lcd_preheat_abs_menu ) ;
# else
MENU_ITEM ( function , MSG_PREHEAT_PLA , lcd_preheat_pla0 ) ;
MENU_ITEM ( function , MSG_PREHEAT_ABS , lcd_preheat_abs0 ) ;
# endif
# endif
MENU_ITEM ( function , MSG_COOLDOWN , lcd_cooldown ) ;
# if defined(POWER_SUPPLY) && POWER_SUPPLY > 0 && defined(PS_ON_PIN) && PS_ON_PIN > -1
if ( powersupply ) {
MENU_ITEM ( gcode , MSG_SWITCH_PS_OFF , PSTR ( " M81 " ) ) ;
}
# endif
MENU_ITEM ( submenu , MSG_MOVE_AXIS , lcd_move_menu ) ;
// JFR for RMud delta printer
MENU_ITEM ( gcode , " Calibrate bed " , PSTR ( " M702 \n G28 \n G1 X-77.94 Y-45 Z36 F8000 \n G4 S3 \n M701 P0 \n G1 X77.94 Y-45 Z36 \n G4 S3 \n M701 P1 \n G1 X0 Y90 Z36 \n G4 S3 \n M701 P2 \n M700 \n G1 X0 Y0 Z100 F8000 " ) ) ;
MENU_ITEM ( gcode , " Check level " , PSTR ( " G28 \n G1 X0 Y0 Z1 F4000 \n G1 X-77.94 Y-45 Z1 \n G1 X77.94 Y-45 \n G1 X0 Y90 \n G1 X-77.94 Y-45 \n G4 S2 \n G1 X-77.94 Y-45 Z0.3 F2000 \n G1 X-77.94 Y-45 \n G1 X77.94 Y-45 \n G1 X0 Y90 \n G1 X-77.94 Y-45 \n G1 X0 Y0 Z0 " ) ) ;
MENU_ITEM ( gcode , " Retract filament " , PSTR ( " M302 \n M82 \n G92 E0 \n G1 F4000 E-800 " ) ) ;
MENU_ITEM ( gcode , " Insert filament " , PSTR ( " M302 \n M82 \n G92 E0 \n G1 F4000 E60 " ) ) ;
MENU_ITEM ( gcode , " Finalize filament " , PSTR ( " G1 F4000 E790 " ) ) ;
END_MENU ( ) ;
else {
MENU_ITEM ( gcode , MSG_SWITCH_PS_ON , PSTR ( " M80 " ) ) ;
}
# endif
MENU_ITEM ( submenu , MSG_MOVE_AXIS , lcd_move_menu ) ;
END_MENU ( ) ;
}
# ifdef DELTA_CALIBRATION_MENU
@ -755,89 +658,77 @@ static void lcd_move_x() { _lcd_move(PSTR("X"), X_AXIS, X_MIN_POS, X_MAX_POS); }
static void lcd_move_y ( ) { _lcd_move ( PSTR ( " Y " ) , Y_AXIS , Y_MIN_POS , Y_MAX_POS ) ; }
static void lcd_move_z ( ) { _lcd_move ( PSTR ( " Z " ) , Z_AXIS , Z_MIN_POS , Z_MAX_POS ) ; }
static void lcd_move_e ( )
{
if ( encoderPosition ! = 0 )
{
current_position [ E_AXIS ] + = float ( ( int ) encoderPosition ) * move_menu_scale ;
encoderPosition = 0 ;
# ifdef DELTA
calculate_delta ( current_position ) ;
plan_buffer_line ( delta [ X_AXIS ] , delta [ Y_AXIS ] , delta [ Z_AXIS ] , current_position [ E_AXIS ] , manual_feedrate [ E_AXIS ] / 60 , active_extruder ) ;
# else
plan_buffer_line ( current_position [ X_AXIS ] , current_position [ Y_AXIS ] , current_position [ Z_AXIS ] , current_position [ E_AXIS ] , manual_feedrate [ E_AXIS ] / 60 , active_extruder ) ;
# endif
lcdDrawUpdate = 1 ;
}
if ( lcdDrawUpdate )
{
lcd_implementation_drawedit ( PSTR ( " Extruder " ) , ftostr31 ( current_position [ E_AXIS ] ) ) ;
}
if ( LCD_CLICKED ) lcd_goto_menu ( lcd_move_menu_axis ) ;
static void lcd_move_e ( ) {
if ( encoderPosition ! = 0 ) {
current_position [ E_AXIS ] + = float ( ( int ) encoderPosition ) * move_menu_scale ;
encoderPosition = 0 ;
# ifdef DELTA
calculate_delta ( current_position ) ;
plan_buffer_line ( delta [ X_AXIS ] , delta [ Y_AXIS ] , delta [ Z_AXIS ] , current_position [ E_AXIS ] , manual_feedrate [ E_AXIS ] / 60 , active_extruder ) ;
# else
plan_buffer_line ( current_position [ X_AXIS ] , current_position [ Y_AXIS ] , current_position [ Z_AXIS ] , current_position [ E_AXIS ] , manual_feedrate [ E_AXIS ] / 60 , active_extruder ) ;
# endif
lcdDrawUpdate = 1 ;
}
if ( lcdDrawUpdate ) lcd_implementation_drawedit ( PSTR ( " Extruder " ) , ftostr31 ( current_position [ E_AXIS ] ) ) ;
if ( LCD_CLICKED ) lcd_goto_menu ( lcd_move_menu_axis ) ;
}
static void lcd_move_menu_axis ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MOVE_AXIS , lcd_move_menu ) ;
MENU_ITEM ( submenu , MSG_MOVE_X , lcd_move_x ) ;
MENU_ITEM ( submenu , MSG_MOVE_Y , lcd_move_y ) ;
if ( move_menu_scale < 10.0 )
{
MENU_ITEM ( submenu , MSG_MOVE_Z , lcd_move_z ) ;
MENU_ITEM ( submenu , MSG_MOVE_E , lcd_move_e ) ;
}
END_MENU ( ) ;
static void lcd_move_menu_axis ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MOVE_AXIS , lcd_move_menu ) ;
MENU_ITEM ( submenu , MSG_MOVE_X , lcd_move_x ) ;
MENU_ITEM ( submenu , MSG_MOVE_Y , lcd_move_y ) ;
if ( move_menu_scale < 10.0 ) {
MENU_ITEM ( submenu , MSG_MOVE_Z , lcd_move_z ) ;
MENU_ITEM ( submenu , MSG_MOVE_E , lcd_move_e ) ;
}
END_MENU ( ) ;
}
static void lcd_move_menu_10mm ( )
{
move_menu_scale = 10.0 ;
lcd_move_menu_axis ( ) ;
static void lcd_move_menu_10mm ( ) {
move_menu_scale = 10.0 ;
lcd_move_menu_axis ( ) ;
}
static void lcd_move_menu_1mm ( )
{
move_menu_scale = 1.0 ;
lcd_move_menu_axis ( ) ;
static void lcd_move_menu_1mm ( ) {
move_menu_scale = 1.0 ;
lcd_move_menu_axis ( ) ;
}
static void lcd_move_menu_01mm ( )
{
move_menu_scale = 0.1 ;
lcd_move_menu_axis ( ) ;
static void lcd_move_menu_01mm ( ) {
move_menu_scale = 0.1 ;
lcd_move_menu_axis ( ) ;
}
static void lcd_move_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_PREPARE , lcd_prepare_menu ) ;
MENU_ITEM ( submenu , MSG_MOVE_10MM , lcd_move_menu_10mm ) ;
MENU_ITEM ( submenu , MSG_MOVE_1MM , lcd_move_menu_1mm ) ;
MENU_ITEM ( submenu , MSG_MOVE_01MM , lcd_move_menu_01mm ) ;
//TODO:X,Y,Z,E
END_MENU ( ) ;
static void lcd_move_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_PREPARE , lcd_prepare_menu ) ;
MENU_ITEM ( submenu , MSG_MOVE_10MM , lcd_move_menu_10mm ) ;
MENU_ITEM ( submenu , MSG_MOVE_1MM , lcd_move_menu_1mm ) ;
MENU_ITEM ( submenu , MSG_MOVE_01MM , lcd_move_menu_01mm ) ;
//TODO:X,Y,Z,E
END_MENU ( ) ;
}
static void lcd_control_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
MENU_ITEM ( submenu , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM ( submenu , MSG_MOTION , lcd_control_motion_menu ) ;
MENU_ITEM ( submenu , MSG_VOLUMETRIC , lcd_control_volumetric_menu ) ;
static void lcd_control_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
MENU_ITEM ( submenu , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM ( submenu , MSG_MOTION , lcd_control_motion_menu ) ;
MENU_ITEM ( submenu , MSG_VOLUMETRIC , lcd_control_volumetric_menu ) ;
# ifdef DOGLCD
// MENU_ITEM_EDIT(int3, MSG_CONTRAST, &lcd_contrast, 0, 63);
# ifdef DOGLCD
// MENU_ITEM_EDIT(int3, MSG_CONTRAST, &lcd_contrast, 0, 63);
MENU_ITEM ( submenu , MSG_CONTRAST , lcd_set_contrast ) ;
# endif
# ifdef FWRETRACT
# endif
# ifdef FWRETRACT
MENU_ITEM ( submenu , MSG_RETRACT , lcd_control_retract_menu ) ;
# endif
# ifdef EEPROM_SETTINGS
# endif
# ifdef EEPROM_SETTINGS
MENU_ITEM ( function , MSG_STORE_EPROM , Config_StoreSettings ) ;
MENU_ITEM ( function , MSG_LOAD_EPROM , Config_RetrieveSettings ) ;
# endif
MENU_ITEM ( function , MSG_RESTORE_FAILSAFE , Config_ResetDefault ) ;
END_MENU ( ) ;
# endif
MENU_ITEM ( function , MSG_RESTORE_FAILSAFE , Config_ResetDefault ) ;
END_MENU ( ) ;
}
# ifdef PIDTEMP
@ -871,8 +762,7 @@ static void lcd_control_menu()
# endif //PIDTEMP
static void lcd_control_temperature_menu ( )
{
static void lcd_control_temperature_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
# if TEMP_SENSOR_0 != 0
@ -880,19 +770,19 @@ static void lcd_control_temperature_menu()
# endif
# if EXTRUDERS > 1
# if TEMP_SENSOR_1 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 2 " , & target_temperature [ 1 ] , 0 , HEATER_1_MAXTEMP - 15 ) ;
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N2 , & target_temperature [ 1 ] , 0 , HEATER_1_MAXTEMP - 15 ) ;
# endif
# if EXTRUDERS > 2
# if TEMP_SENSOR_2 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 3 " , & target_temperature [ 2 ] , 0 , HEATER_2_MAXTEMP - 15 ) ;
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N3 , & target_temperature [ 2 ] , 0 , HEATER_2_MAXTEMP - 15 ) ;
# endif
# if EXTRUDERS > 3
# if TEMP_SENSOR_3 != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE " 4 " , & target_temperature [ 3 ] , 0 , HEATER_3_MAXTEMP - 15 ) ;
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_NOZZLE MSG_N4 , & target_temperature [ 3 ] , 0 , HEATER_3_MAXTEMP - 15 ) ;
# endif
# endif
# endif
# endif
# endif // EXTRUDERS > 3
# endif // EXTRUDERS > 2
# endif // EXTRUDERS > 1
# if TEMP_SENSOR_BED != 0
MENU_MULTIPLIER_ITEM_EDIT ( int3 , MSG_BED , & target_temperature_bed , 0 , BED_MAXTEMP - 15 ) ;
# endif
@ -919,36 +809,36 @@ static void lcd_control_temperature_menu()
// set up temp variables - undo the default scaling
raw_Ki = unscalePID_i ( PID_PARAM ( Ki , 1 ) ) ;
raw_Kd = unscalePID_d ( PID_PARAM ( Kd , 1 ) ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P " E2 " , & PID_PARAM ( Kp , 1 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P MSG_E2 , & PID_PARAM ( Kp , 1 ) , 1 , 9990 ) ;
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I " E2 " , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E2 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D " E2 " , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E2 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I MSG_E2 , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E2 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D MSG_E2 , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E2 ) ;
# ifdef PID_ADD_EXTRUSION_RATE
MENU_ITEM_EDIT ( float3 , MSG_PID_C " E2 " , & PID_PARAM ( Kc , 1 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_PID_C MSG_E2 , & PID_PARAM ( Kc , 1 ) , 1 , 9990 ) ;
# endif //PID_ADD_EXTRUSION_RATE
# if EXTRUDERS > 2
// set up temp variables - undo the default scaling
raw_Ki = unscalePID_i ( PID_PARAM ( Ki , 2 ) ) ;
raw_Kd = unscalePID_d ( PID_PARAM ( Kd , 2 ) ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P " E3 " , & PID_PARAM ( Kp , 2 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P MSG_E3 , & PID_PARAM ( Kp , 2 ) , 1 , 9990 ) ;
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I " E3 " , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E3 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D " E3 " , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E3 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I MSG_E3 , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E3 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D MSG_E3 , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E3 ) ;
# ifdef PID_ADD_EXTRUSION_RATE
MENU_ITEM_EDIT ( float3 , MSG_PID_C " E3 " , & PID_PARAM ( Kc , 2 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_PID_C MSG_E3 , & PID_PARAM ( Kc , 2 ) , 1 , 9990 ) ;
# endif //PID_ADD_EXTRUSION_RATE
# if EXTRUDERS > 3
// set up temp variables - undo the default scaling
raw_Ki = unscalePID_i ( PID_PARAM ( Ki , 3 ) ) ;
raw_Kd = unscalePID_d ( PID_PARAM ( Kd , 3 ) ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P " E4 " , & PID_PARAM ( Kp , 3 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float52 , MSG_PID_P MSG_E4 , & PID_PARAM ( Kp , 3 ) , 1 , 9990 ) ;
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I " E4 " , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E4 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D " E4 " , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E4 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_I MSG_E4 , & raw_Ki , 0.01 , 9990 , copy_and_scalePID_i_E4 ) ;
MENU_ITEM_EDIT_CALLBACK ( float52 , MSG_PID_D MSG_E4 , & raw_Kd , 1 , 9990 , copy_and_scalePID_d_E4 ) ;
# ifdef PID_ADD_EXTRUSION_RATE
MENU_ITEM_EDIT ( float3 , MSG_PID_C " E4 " , & PID_PARAM ( Kc , 3 ) , 1 , 9990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_PID_C MSG_E4 , & PID_PARAM ( Kc , 3 ) , 1 , 9990 ) ;
# endif //PID_ADD_EXTRUSION_RATE
# endif //EXTRUDERS > 3
# endif //EXTRUDERS > 2
@ -960,84 +850,80 @@ static void lcd_control_temperature_menu()
END_MENU ( ) ;
}
static void lcd_control_temperature_preheat_pla_settings_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_FAN_SPEED , & plaPreheatFanSpeed , 0 , 255 ) ;
# if TEMP_SENSOR_0 != 0
static void lcd_control_temperature_preheat_pla_settings_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_FAN_SPEED , & plaPreheatFanSpeed , 0 , 255 ) ;
# if TEMP_SENSOR_0 != 0
MENU_ITEM_EDIT ( int3 , MSG_NOZZLE , & plaPreheatHotendTemp , 0 , HEATER_0_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_BED != 0
# endif
# if TEMP_SENSOR_BED != 0
MENU_ITEM_EDIT ( int3 , MSG_BED , & plaPreheatHPBTemp , 0 , BED_MAXTEMP - 15 ) ;
# endif
# ifdef EEPROM_SETTINGS
# endif
# ifdef EEPROM_SETTINGS
MENU_ITEM ( function , MSG_STORE_EPROM , Config_StoreSettings ) ;
# endif
END_MENU ( ) ;
# endif
END_MENU ( ) ;
}
static void lcd_control_temperature_preheat_abs_settings_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_FAN_SPEED , & absPreheatFanSpeed , 0 , 255 ) ;
# if TEMP_SENSOR_0 != 0
static void lcd_control_temperature_preheat_abs_settings_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_TEMPERATURE , lcd_control_temperature_menu ) ;
MENU_ITEM_EDIT ( int3 , MSG_FAN_SPEED , & absPreheatFanSpeed , 0 , 255 ) ;
# if TEMP_SENSOR_0 != 0
MENU_ITEM_EDIT ( int3 , MSG_NOZZLE , & absPreheatHotendTemp , 0 , HEATER_0_MAXTEMP - 15 ) ;
# endif
# if TEMP_SENSOR_BED != 0
# endif
# if TEMP_SENSOR_BED != 0
MENU_ITEM_EDIT ( int3 , MSG_BED , & absPreheatHPBTemp , 0 , BED_MAXTEMP - 15 ) ;
# endif
# ifdef EEPROM_SETTINGS
# endif
# ifdef EEPROM_SETTINGS
MENU_ITEM ( function , MSG_STORE_EPROM , Config_StoreSettings ) ;
# endif
END_MENU ( ) ;
# endif
END_MENU ( ) ;
}
static void lcd_control_motion_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
# ifdef ENABLE_AUTO_BED_LEVELING
static void lcd_control_motion_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
# ifdef ENABLE_AUTO_BED_LEVELING
MENU_ITEM_EDIT ( float32 , MSG_ZPROBE_ZOFFSET , & zprobe_zoffset , 0.5 , 50 ) ;
# endif
MENU_ITEM_EDIT ( float5 , MSG_ACC , & acceleration , 500 , 99000 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VXY_JERK , & max_xy_jerk , 1 , 990 ) ;
MENU_ITEM_EDIT ( float52 , MSG_VZ_JERK , & max_z_jerk , 0.1 , 990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VE_JERK , & max_e_jerk , 1 , 990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_X , & max_feedrate [ X_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_Y , & max_feedrate [ Y_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_Z , & max_feedrate [ Z_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_E , & max_feedrate [ E_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMIN , & minimumfeedrate , 0 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VTRAV_MIN , & mintravelfeedrate , 0 , 999 ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_X , & max_acceleration_units_per_sq_second [ X_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_Y , & max_acceleration_units_per_sq_second [ Y_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_Z , & max_acceleration_units_per_sq_second [ Z_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_E , & max_acceleration_units_per_sq_second [ E_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT ( float5 , MSG_A_RETRACT , & retract_acceleration , 100 , 99000 ) ;
MENU_ITEM_EDIT ( float52 , MSG_XSTEPS , & axis_steps_per_unit [ X_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_YSTEPS , & axis_steps_per_unit [ Y_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float51 , MSG_ZSTEPS , & axis_steps_per_unit [ Z_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float51 , MSG_ESTEPS , & axis_steps_per_unit [ E_AXIS ] , 5 , 9999 ) ;
# ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
# endif
MENU_ITEM_EDIT ( float5 , MSG_ACC , & acceleration , 500 , 99000 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VXY_JERK , & max_xy_jerk , 1 , 990 ) ;
MENU_ITEM_EDIT ( float52 , MSG_VZ_JERK , & max_z_jerk , 0.1 , 990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VE_JERK , & max_e_jerk , 1 , 990 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_X , & max_feedrate [ X_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_Y , & max_feedrate [ Y_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_Z , & max_feedrate [ Z_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMAX MSG_E , & max_feedrate [ E_AXIS ] , 1 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VMIN , & minimumfeedrate , 0 , 999 ) ;
MENU_ITEM_EDIT ( float3 , MSG_VTRAV_MIN , & mintravelfeedrate , 0 , 999 ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_X , & max_acceleration_units_per_sq_second [ X_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_Y , & max_acceleration_units_per_sq_second [ Y_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_Z , & max_acceleration_units_per_sq_second [ Z_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT_CALLBACK ( long5 , MSG_AMAX MSG_E , & max_acceleration_units_per_sq_second [ E_AXIS ] , 100 , 99000 , reset_acceleration_rates ) ;
MENU_ITEM_EDIT ( float5 , MSG_A_RETRACT , & retract_acceleration , 100 , 99000 ) ;
MENU_ITEM_EDIT ( float52 , MSG_XSTEPS , & axis_steps_per_unit [ X_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_YSTEPS , & axis_steps_per_unit [ Y_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float51 , MSG_ZSTEPS , & axis_steps_per_unit [ Z_AXIS ] , 5 , 9999 ) ;
MENU_ITEM_EDIT ( float51 , MSG_ESTEPS , & axis_steps_per_unit [ E_AXIS ] , 5 , 9999 ) ;
# ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
MENU_ITEM_EDIT ( bool , MSG_ENDSTOP_ABORT , & abort_on_endstop_hit ) ;
# endif
# ifdef SCARA
# endif
# ifdef SCARA
MENU_ITEM_EDIT ( float74 , MSG_XSCALE , & axis_scaling [ X_AXIS ] , 0.5 , 2 ) ;
MENU_ITEM_EDIT ( float74 , MSG_YSCALE , & axis_scaling [ Y_AXIS ] , 0.5 , 2 ) ;
# endif
END_MENU ( ) ;
# endif
END_MENU ( ) ;
}
static void lcd_control_volumetric_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
static void lcd_control_volumetric_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
MENU_ITEM_EDIT_CALLBACK ( bool , MSG_VOLUMETRIC_ENABLED , & volumetric_enabled , calculate_volumetric_multipliers ) ;
MENU_ITEM_EDIT_CALLBACK ( bool , MSG_VOLUMETRIC_ENABLED , & volumetric_enabled , calculate_volumetric_multipliers ) ;
if ( volumetric_enabled ) {
if ( volumetric_enabled ) {
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK ( float43 , MSG_FILAMENT_SIZE_EXTRUDER_0 , & filament_size [ 0 ] , 1.5 , 3.25 , calculate_volumetric_multipliers ) ;
# if EXTRUDERS > 1
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK ( float43 , MSG_FILAMENT_SIZE_EXTRUDER_1 , & filament_size [ 1 ] , 1.5 , 3.25 , calculate_volumetric_multipliers ) ;
@ -1048,149 +934,133 @@ static void lcd_control_volumetric_menu()
# endif //EXTRUDERS > 3
# endif //EXTRUDERS > 2
# endif //EXTRUDERS > 1
}
}
END_MENU ( ) ;
END_MENU ( ) ;
}
# ifdef DOGLCD
static void lcd_set_contrast ( )
{
if ( encoderPosition ! = 0 )
{
lcd_contrast - = encoderPosition ;
if ( lcd_contrast < 0 ) lcd_contrast = 0 ;
else if ( lcd_contrast > 63 ) lcd_contrast = 63 ;
encoderPosition = 0 ;
lcdDrawUpdate = 1 ;
u8g . setContrast ( lcd_contrast ) ;
}
if ( lcdDrawUpdate )
{
lcd_implementation_drawedit ( PSTR ( MSG_CONTRAST ) , itostr2 ( lcd_contrast ) ) ;
}
if ( LCD_CLICKED ) lcd_goto_menu ( lcd_control_menu ) ;
static void lcd_set_contrast ( ) {
if ( encoderPosition ! = 0 ) {
lcd_contrast - = encoderPosition ;
if ( lcd_contrast < 0 ) lcd_contrast = 0 ;
else if ( lcd_contrast > 63 ) lcd_contrast = 63 ;
encoderPosition = 0 ;
lcdDrawUpdate = 1 ;
u8g . setContrast ( lcd_contrast ) ;
}
if ( lcdDrawUpdate ) lcd_implementation_drawedit ( PSTR ( MSG_CONTRAST ) , itostr2 ( lcd_contrast ) ) ;
if ( LCD_CLICKED ) lcd_goto_menu ( lcd_control_menu ) ;
}
# endif
# endif //DOGLCD
# ifdef FWRETRACT
static void lcd_control_retract_menu ( )
{
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
MENU_ITEM_EDIT ( bool , MSG_AUTORETRACT , & autoretract_enabled ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT , & retract_length , 0 , 100 ) ;
# if EXTRUDERS > 1
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_SWAP , & retract_length_swap , 0 , 100 ) ;
# endif
MENU_ITEM_EDIT ( float3 , MSG_CONTROL_RETRACTF , & retract_feedrate , 1 , 999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_ZLIFT , & retract_zlift , 0 , 999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_RECOVER , & retract_recover_length , 0 , 100 ) ;
# if EXTRUDERS > 1
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_RECOVER_SWAP , & retract_recover_length_swap , 0 , 100 ) ;
# endif
MENU_ITEM_EDIT ( float3 , MSG_CONTROL_RETRACT_RECOVERF , & retract_recover_feedrate , 1 , 999 ) ;
END_MENU ( ) ;
static void lcd_control_retract_menu ( ) {
START_MENU ( ) ;
MENU_ITEM ( back , MSG_CONTROL , lcd_control_menu ) ;
MENU_ITEM_EDIT ( bool , MSG_AUTORETRACT , & autoretract_enabled ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT , & retract_length , 0 , 100 ) ;
# if EXTRUDERS > 1
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_SWAP , & retract_length_swap , 0 , 100 ) ;
# endif
MENU_ITEM_EDIT ( float3 , MSG_CONTROL_RETRACTF , & retract_feedrate , 1 , 999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_ZLIFT , & retract_zlift , 0 , 999 ) ;
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_RECOVER , & retract_recover_length , 0 , 100 ) ;
# if EXTRUDERS > 1
MENU_ITEM_EDIT ( float52 , MSG_CONTROL_RETRACT_RECOVER_SWAP , & retract_recover_length_swap , 0 , 100 ) ;
# endif
MENU_ITEM_EDIT ( float3 , MSG_CONTROL_RETRACT_RECOVERF , & retract_recover_feedrate , 1 , 999 ) ;
END_MENU ( ) ;
}
# endif //FWRETRACT
# if SDCARDDETECT == -1
static void lcd_sd_refresh ( )
{
static void lcd_sd_refresh ( ) {
card . initsd ( ) ;
currentMenuViewOffset = 0 ;
}
}
# endif
static void lcd_sd_updir ( )
{
card . updir ( ) ;
currentMenuViewOffset = 0 ;
static void lcd_sd_updir ( ) {
card . updir ( ) ;
currentMenuViewOffset = 0 ;
}
void lcd_sdcard_menu ( )
{
if ( lcdDrawUpdate = = 0 & & LCD_CLICKED = = 0 )
return ; // nothing to do (so don't thrash the SD card)
uint16_t fileCnt = card . getnrfilenames ( ) ;
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
card . getWorkDirName ( ) ;
if ( card . filename [ 0 ] = = ' / ' )
{
# if SDCARDDETECT == -1
MENU_ITEM ( function , LCD_STR_REFRESH MSG_REFRESH , lcd_sd_refresh ) ;
# endif
} else {
MENU_ITEM ( function , LCD_STR_FOLDER " .. " , lcd_sd_updir ) ;
}
void lcd_sdcard_menu ( ) {
if ( lcdDrawUpdate = = 0 & & LCD_CLICKED = = 0 ) return ; // nothing to do (so don't thrash the SD card)
uint16_t fileCnt = card . getnrfilenames ( ) ;
START_MENU ( ) ;
MENU_ITEM ( back , MSG_MAIN , lcd_main_menu ) ;
card . getWorkDirName ( ) ;
if ( card . filename [ 0 ] = = ' / ' ) {
# if SDCARDDETECT == -1
MENU_ITEM ( function , LCD_STR_REFRESH MSG_REFRESH , lcd_sd_refresh ) ;
# endif
}
else {
MENU_ITEM ( function , LCD_STR_FOLDER " .. " , lcd_sd_updir ) ;
}
for ( uint16_t i = 0 ; i < fileCnt ; i + + )
{
if ( _menuItemNr = = _lineNr )
{
# ifndef SDCARD_RATHERRECENTFIRST
card . getfilename ( i ) ;
# else
card . getfilename ( fileCnt - 1 - i ) ;
# endif
if ( card . filenameIsDir )
{
MENU_ITEM ( sddirectory , MSG_CARD_MENU , card . filename , card . longFilename ) ;
} else {
MENU_ITEM ( sdfile , MSG_CARD_MENU , card . filename , card . longFilename ) ;
}
} else {
MENU_ITEM_DUMMY ( ) ;
}
for ( uint16_t i = 0 ; i < fileCnt ; i + + ) {
if ( _menuItemNr = = _lineNr ) {
# ifndef SDCARD_RATHERRECENTFIRST
card . getfilename ( i ) ;
# else
card . getfilename ( fileCnt - 1 - i ) ;
# endif
if ( card . filenameIsDir )
MENU_ITEM ( sddirectory , MSG_CARD_MENU , card . filename , card . longFilename ) ;
else
MENU_ITEM ( sdfile , MSG_CARD_MENU , card . filename , card . longFilename ) ;
}
END_MENU ( ) ;
else {
MENU_ITEM_DUMMY ( ) ;
}
}
END_MENU ( ) ;
}
# define menu_edit_type(_type, _name, _strFunc, scale) \
void menu_edit_ # # _name ( ) \
{ \
if ( ( int32_t ) encoderPosition < 0 ) encoderPosition = 0 ; \
if ( ( int32_t ) encoderPosition > maxEditValue ) encoderPosition = maxEditValue ; \
if ( lcdDrawUpdate ) \
lcd_implementation_drawedit ( editLabel , _strFunc ( ( ( _type ) ( ( int32_t ) encoderPosition + minEditValue ) ) / scale ) ) ; \
if ( LCD_CLICKED ) \
{ \
* ( ( _type * ) editValue ) = ( ( _type ) ( ( int32_t ) encoderPosition + minEditValue ) ) / scale ; \
lcd_goto_menu ( prevMenu , prevEncoderPosition ) ; \
} \
} \
void menu_edit_callback_ # # _name ( ) { \
menu_edit_ # # _name ( ) ; \
if ( LCD_CLICKED ) ( * callbackFunc ) ( ) ; \
bool _menu_edit_ # # _name ( ) { \
bool isClicked = LCD_CLICKED ; \
if ( ( int32_t ) encoderPosition < 0 ) encoderPosition = 0 ; \
if ( ( int32_t ) encoderPosition > maxEditValue ) encoderPosition = maxEditValue ; \
if ( lcdDrawUpdate ) \
lcd_implementation_drawedit ( editLabel , _strFunc ( ( ( _type ) ( ( int32_t ) encoderPosition + minEditValue ) ) / scale ) ) ; \
if ( isClicked ) { \
* ( ( _type * ) editValue ) = ( ( _type ) ( ( int32_t ) encoderPosition + minEditValue ) ) / scale ; \
lcd_goto_menu ( prevMenu , prevEncoderPosition ) ; \
} \
static void menu_action_setting_edit_ # # _name ( const char * pstr , _type * ptr , _type minValue , _type maxValue ) \
{ \
prevMenu = currentMenu ; \
prevEncoderPosition = encoderPosition ; \
\
lcdDrawUpdate = 2 ; \
currentMenu = menu_edit_ # # _name ; \
\
editLabel = pstr ; \
editValue = ptr ; \
minEditValue = minValue * scale ; \
maxEditValue = maxValue * scale - minEditValue ; \
encoderPosition = ( * ptr ) * scale - minEditValue ; \
} \
static void menu_action_setting_edit_callback_ # # _name ( const char * pstr , _type * ptr , _type minValue , _type maxValue , menuFunc_t callback ) \
{ \
prevMenu = currentMenu ; \
prevEncoderPosition = encoderPosition ; \
\
lcdDrawUpdate = 2 ; \
currentMenu = menu_edit_callback_ # # _name ; \
\
editLabel = pstr ; \
editValue = ptr ; \
minEditValue = minValue * scale ; \
maxEditValue = maxValue * scale - minEditValue ; \
encoderPosition = ( * ptr ) * scale - minEditValue ; \
callbackFunc = callback ; \
}
return isClicked ; \
} \
void menu_edit_ # # _name ( ) { _menu_edit_ # # _name ( ) ; } \
void menu_edit_callback_ # # _name ( ) { if ( _menu_edit_ # # _name ( ) ) ( * callbackFunc ) ( ) ; } \
static void _menu_action_setting_edit_ # # _name ( const char * pstr , _type * ptr , _type minValue , _type maxValue ) { \
prevMenu = currentMenu ; \
prevEncoderPosition = encoderPosition ; \
\
lcdDrawUpdate = 2 ; \
currentMenu = menu_edit_ # # _name ; \
\
editLabel = pstr ; \
editValue = ptr ; \
minEditValue = minValue * scale ; \
maxEditValue = maxValue * scale - minEditValue ; \
encoderPosition = ( * ptr ) * scale - minEditValue ; \
} \
static void menu_action_setting_edit_ # # _name ( const char * pstr , _type * ptr , _type minValue , _type maxValue ) { \
_menu_action_setting_edit_ # # _name ( pstr , ptr , minValue , maxValue ) ; \
currentMenu = menu_edit_ # # _name ; \
} \
static void menu_action_setting_edit_callback_ # # _name ( const char * pstr , _type * ptr , _type minValue , _type maxValue , menuFunc_t callback ) { \
_menu_action_setting_edit_ # # _name ( pstr , ptr , minValue , maxValue ) ; \
currentMenu = menu_edit_callback_ # # _name ; \
callbackFunc = callback ; \
}
menu_edit_type ( int , int3 , itostr3 , 1 )
menu_edit_type ( float , float3 , ftostr3 , 1 )
menu_edit_type ( float , float32 , ftostr32 , 100 )
@ -1201,94 +1071,81 @@ menu_edit_type(float, float52, ftostr52, 100)
menu_edit_type ( unsigned long , long5 , ftostr5 , 0.01 )
# ifdef REPRAPWORLD_KEYPAD
static void reprapworld_keypad_move_z_up ( ) {
static void reprapworld_keypad_move_z_up ( ) {
encoderPosition = 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_z ( ) ;
lcd_move_z ( ) ;
}
static void reprapworld_keypad_move_z_down ( ) {
static void reprapworld_keypad_move_z_down ( ) {
encoderPosition = - 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_z ( ) ;
lcd_move_z ( ) ;
}
static void reprapworld_keypad_move_x_left ( ) {
static void reprapworld_keypad_move_x_left ( ) {
encoderPosition = - 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_x ( ) ;
lcd_move_x ( ) ;
}
static void reprapworld_keypad_move_x_right ( ) {
static void reprapworld_keypad_move_x_right ( ) {
encoderPosition = 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_x ( ) ;
}
static void reprapworld_keypad_move_y_down ( ) {
lcd_move_x ( ) ;
}
static void reprapworld_keypad_move_y_down ( ) {
encoderPosition = 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_y ( ) ;
}
static void reprapworld_keypad_move_y_up ( ) {
encoderPosition = - 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_y ( ) ;
}
static void reprapworld_keypad_move_home ( ) {
enquecommands_P ( ( PSTR ( " G28 " ) ) ) ; // move all axis home
}
# endif
}
static void reprapworld_keypad_move_y_up ( ) {
encoderPosition = - 1 ;
move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP ;
lcd_move_y ( ) ;
}
static void reprapworld_keypad_move_home ( ) {
enquecommands_P ( ( PSTR ( " G28 " ) ) ) ; // move all axis home
}
# endif //REPRAPWORLD_KEYPAD
/** End of menus **/
static void lcd_quick_feedback ( )
{
lcdDrawUpdate = 2 ;
blocking_enc = millis ( ) + 500 ;
lcd_implementation_quick_feedback ( ) ;
static void lcd_quick_feedback ( ) {
lcdDrawUpdate = 2 ;
blocking_enc = millis ( ) + 500 ;
lcd_implementation_quick_feedback ( ) ;
}
/** Menu action functions **/
static void menu_action_back ( menuFunc_t data ) { lcd_goto_menu ( data ) ; }
static void menu_action_submenu ( menuFunc_t data ) { lcd_goto_menu ( data ) ; }
static void menu_action_gcode ( const char * pgcode )
{
enquecommands_P ( pgcode ) ;
}
static void menu_action_gcode ( const char * pgcode ) { enquecommands_P ( pgcode ) ; }
static void menu_action_function ( menuFunc_t data ) { ( * data ) ( ) ; }
static void menu_action_sdfile ( const char * filename , char * longFilename )
{
char cmd [ 30 ] ;
char * c ;
sprintf_P ( cmd , PSTR ( " M23 %s " ) , filename ) ;
for ( c = & cmd [ 4 ] ; * c ; c + + )
* c = tolower ( * c ) ;
enquecommand ( cmd ) ;
enquecommands_P ( PSTR ( " M24 " ) ) ;
lcd_return_to_status ( ) ;
static void menu_action_sdfile ( const char * filename , char * longFilename ) {
char cmd [ 30 ] ;
char * c ;
sprintf_P ( cmd , PSTR ( " M23 %s " ) , filename ) ;
for ( c = & cmd [ 4 ] ; * c ; c + + ) * c = tolower ( * c ) ;
enquecommand ( cmd ) ;
enquecommands_P ( PSTR ( " M24 " ) ) ;
lcd_return_to_status ( ) ;
}
static void menu_action_sddirectory ( const char * filename , char * longFilename )
{
card . chdir ( filename ) ;
encoderPosition = 0 ;
static void menu_action_sddirectory ( const char * filename , char * longFilename ) {
card . chdir ( filename ) ;
encoderPosition = 0 ;
}
static void menu_action_setting_edit_bool ( const char * pstr , bool * ptr )
{
* ptr = ! ( * ptr ) ;
static void menu_action_setting_edit_bool ( const char * pstr , bool * ptr ) { * ptr = ! ( * ptr ) ; }
static void menu_action_setting_edit_callback_bool ( const char * pstr , bool * ptr , menuFunc_t callback ) {
menu_action_setting_edit_bool ( pstr , ptr ) ;
( * callback ) ( ) ;
}
static void menu_action_setting_edit_callback_bool ( const char * pstr , bool * ptr , menuFunc_t callback )
{
menu_action_setting_edit_bool ( pstr , ptr ) ;
( * callback ) ( ) ;
}
# endif //ULTIPANEL
# endif //ULTIPANEL
/** LCD API **/
void lcd_init ( )
{
lcd_implementation_init ( ) ;
void lcd_init ( ) {
lcd_implementation_init ( ) ;
# ifdef NEWPANEL
# ifdef NEWPANEL
SET_INPUT ( BTN_EN1 ) ;
SET_INPUT ( BTN_EN2 ) ;
WRITE ( BTN_EN1 , HIGH ) ;
@ -1323,182 +1180,166 @@ void lcd_init()
# endif // SR_LCD_2W_NL
# endif //!NEWPANEL
# if defined (SDSUPPORT) && defined(SDCARDDETECT) && (SDCARDDETECT > 0)
pinMode ( SDCARDDETECT , INPUT ) ;
# if defined (SDSUPPORT) && defined(SDCARDDETECT) && (SDCARDDETECT > 0)
pinMode ( SDCARDDETECT , INPUT ) ;
WRITE ( SDCARDDETECT , HIGH ) ;
lcd_oldcardstatus = IS_SD_INSERTED ;
# endif //(SDCARDDETECT > 0)
# ifdef LCD_HAS_SLOW_BUTTONS
# endif //(SDCARDDETECT > 0)
# ifdef LCD_HAS_SLOW_BUTTONS
slow_buttons = 0 ;
# endif
lcd_buttons_update ( ) ;
# ifdef ULTIPANEL
# endif
lcd_buttons_update ( ) ;
# ifdef ULTIPANEL
encoderDiff = 0 ;
# endif
# endif
}
int lcd_strlen ( char * s ) {
int i = 0 , j = 0 ;
while ( s [ i ] ) {
if ( ( s [ i ] & 0xc0 ) ! = 0x80 ) j + + ;
i + + ;
}
return j ;
int i = 0 , j = 0 ;
while ( s [ i ] ) {
if ( ( s [ i ] & 0xc0 ) ! = 0x80 ) j + + ;
i + + ;
}
return j ;
}
int lcd_strlen_P ( const char * s ) {
int j = 0 ;
while ( pgm_read_byte ( s ) ) {
if ( ( pgm_read_byte ( s ) & 0xc0 ) ! = 0x80 ) j + + ;
s + + ;
}
return j ;
int j = 0 ;
while ( pgm_read_byte ( s ) ) {
if ( ( pgm_read_byte ( s ) & 0xc0 ) ! = 0x80 ) j + + ;
s + + ;
}
return j ;
}
void lcd_update ( ) {
static unsigned long timeoutToStatus = 0 ;
void lcd_update ( )
{
static unsigned long timeoutToStatus = 0 ;
# ifdef LCD_HAS_SLOW_BUTTONS
# ifdef LCD_HAS_SLOW_BUTTONS
slow_buttons = lcd_implementation_read_slow_buttons ( ) ; // buttons which take too long to read in interrupt context
# endif
# endif
lcd_buttons_update ( ) ;
lcd_buttons_update ( ) ;
# if (SDCARDDETECT > 0)
if ( ( IS_SD_INSERTED ! = lcd_oldcardstatus & & lcd_detected ( ) ) )
{
lcdDrawUpdate = 2 ;
lcd_oldcardstatus = IS_SD_INSERTED ;
lcd_implementation_init ( // to maybe revive the LCD if static electricity killed it.
# if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD)
currentMenu = = lcd_status_screen
# endif
) ;
# if (SDCARDDETECT > 0)
if ( IS_SD_INSERTED ! = lcd_oldcardstatus & & lcd_detected ( ) ) {
lcdDrawUpdate = 2 ;
lcd_oldcardstatus = IS_SD_INSERTED ;
lcd_implementation_init ( // to maybe revive the LCD if static electricity killed it.
# if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD)
currentMenu = = lcd_status_screen
# endif
) ;
if ( lcd_oldcardstatus )
{
card . initsd ( ) ;
LCD_MESSAGEPGM ( MSG_SD_INSERTED ) ;
}
else
{
card . release ( ) ;
LCD_MESSAGEPGM ( MSG_SD_REMOVED ) ;
}
if ( lcd_oldcardstatus ) {
card . initsd ( ) ;
LCD_MESSAGEPGM ( MSG_SD_INSERTED ) ;
}
else {
card . release ( ) ;
LCD_MESSAGEPGM ( MSG_SD_REMOVED ) ;
}
}
# endif //CARDINSERTED
# endif //CARDINSERTED
if ( lcd_next_update_millis < millis ( ) )
{
# ifdef ULTIPANEL
# ifdef REPRAPWORLD_KEYPAD
if ( REPRAPWORLD_KEYPAD_MOVE_Z_UP ) {
reprapworld_keypad_move_z_up ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_Z_DOWN ) {
reprapworld_keypad_move_z_down ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_X_LEFT ) {
reprapworld_keypad_move_x_left ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_X_RIGHT ) {
reprapworld_keypad_move_x_right ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_Y_DOWN ) {
reprapworld_keypad_move_y_down ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_Y_UP ) {
reprapworld_keypad_move_y_up ( ) ;
}
if ( REPRAPWORLD_KEYPAD_MOVE_HOME ) {
reprapworld_keypad_move_home ( ) ;
}
# endif
if ( abs ( encoderDiff ) > = ENCODER_PULSES_PER_STEP )
{
int32_t encoderMultiplier = 1 ;
# ifdef ENCODER_RATE_MULTIPLIER
if ( encoderRateMultiplierEnabled ) {
int32_t encoderMovementSteps = abs ( encoderDiff ) / ENCODER_PULSES_PER_STEP ;
if ( lastEncoderMovementMillis ! = 0 ) {
// Note that the rate is always calculated between to passes through the
// loop and that the abs of the encoderDiff value is tracked.
float encoderStepRate =
( float ) ( encoderMovementSteps ) / ( ( float ) ( millis ( ) - lastEncoderMovementMillis ) ) * 1000.0 ;
if ( encoderStepRate > = ENCODER_100X_STEPS_PER_SEC ) encoderMultiplier = 100 ;
else if ( encoderStepRate > = ENCODER_10X_STEPS_PER_SEC ) encoderMultiplier = 10 ;
# ifdef ENCODER_RATE_MULTIPLIER_DEBUG
SERIAL_ECHO_START ;
SERIAL_ECHO ( " Enc Step Rate: " ) ;
SERIAL_ECHO ( encoderStepRate ) ;
SERIAL_ECHO ( " Multiplier: " ) ;
SERIAL_ECHO ( encoderMultiplier ) ;
SERIAL_ECHO ( " ENCODER_10X_STEPS_PER_SEC: " ) ;
SERIAL_ECHO ( ENCODER_10X_STEPS_PER_SEC ) ;
SERIAL_ECHO ( " ENCODER_100X_STEPS_PER_SEC: " ) ;
SERIAL_ECHOLN ( ENCODER_100X_STEPS_PER_SEC ) ;
# endif //ENCODER_RATE_MULTIPLIER_DEBUG
}
long ms = millis ( ) ;
if ( ms > lcd_next_update_millis ) {
lastEncoderMovementMillis = millis ( ) ;
}
# endif //ENCODER_RATE_MULTIPLIER
# ifdef ULTIPANEL
# ifdef REPRAPWORLD_KEYPAD
if ( REPRAPWORLD_KEYPAD_MOVE_Z_UP ) reprapworld_keypad_move_z_up ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_Z_DOWN ) reprapworld_keypad_move_z_down ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_X_LEFT ) reprapworld_keypad_move_x_left ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_X_RIGHT ) reprapworld_keypad_move_x_right ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_Y_DOWN ) reprapworld_keypad_move_y_down ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_Y_UP ) reprapworld_keypad_move_y_up ( ) ;
if ( REPRAPWORLD_KEYPAD_MOVE_HOME ) reprapworld_keypad_move_home ( ) ;
# endif
lcdDrawUpdate = 1 ;
encoderPosition + = ( encoderDiff * encoderMultiplier ) / ENCODER_PULSES_PER_STEP ;
encoderDiff = 0 ;
timeoutToStatus = millis ( ) + LCD_TIMEOUT_TO_STATUS ;
bool encoderPastThreshold = ( abs ( encoderDiff ) > = ENCODER_PULSES_PER_STEP ) ;
if ( encoderPastThreshold | | LCD_CLICKED ) {
if ( encoderPastThreshold ) {
int32_t encoderMultiplier = 1 ;
# ifdef ENCODER_RATE_MULTIPLIER
if ( encoderRateMultiplierEnabled ) {
int32_t encoderMovementSteps = abs ( encoderDiff ) / ENCODER_PULSES_PER_STEP ;
if ( lastEncoderMovementMillis ! = 0 ) {
// Note that the rate is always calculated between to passes through the
// loop and that the abs of the encoderDiff value is tracked.
float encoderStepRate = ( float ) ( encoderMovementSteps ) / ( ( float ) ( ms - lastEncoderMovementMillis ) ) * 1000.0 ;
if ( encoderStepRate > = ENCODER_100X_STEPS_PER_SEC ) encoderMultiplier = 100 ;
else if ( encoderStepRate > = ENCODER_10X_STEPS_PER_SEC ) encoderMultiplier = 10 ;
# ifdef ENCODER_RATE_MULTIPLIER_DEBUG
SERIAL_ECHO_START ;
SERIAL_ECHO ( " Enc Step Rate: " ) ;
SERIAL_ECHO ( encoderStepRate ) ;
SERIAL_ECHO ( " Multiplier: " ) ;
SERIAL_ECHO ( encoderMultiplier ) ;
SERIAL_ECHO ( " ENCODER_10X_STEPS_PER_SEC: " ) ;
SERIAL_ECHO ( ENCODER_10X_STEPS_PER_SEC ) ;
SERIAL_ECHO ( " ENCODER_100X_STEPS_PER_SEC: " ) ;
SERIAL_ECHOLN ( ENCODER_100X_STEPS_PER_SEC ) ;
# endif //ENCODER_RATE_MULTIPLIER_DEBUG
}
lastEncoderMovementMillis = ms ;
}
# endif //ENCODER_RATE_MULTIPLIER
lcdDrawUpdate = 1 ;
encoderPosition + = ( encoderDiff * encoderMultiplier ) / ENCODER_PULSES_PER_STEP ;
encoderDiff = 0 ;
}
if ( LCD_CLICKED )
timeoutToStatus = millis ( ) + LCD_TIMEOUT_TO_STATUS ;
# endif //ULTIPANEL
# ifdef DOGLCD // Changes due to different driver architecture of the DOGM display
blink + + ; // Variable for fan animation and alive dot
u8g . firstPage ( ) ;
do
{
u8g . setFont ( FONT_MENU ) ;
u8g . setPrintPos ( 125 , 0 ) ;
if ( blink % 2 ) u8g . setColorIndex ( 1 ) ; else u8g . setColorIndex ( 0 ) ; // Set color for the alive dot
u8g . drawPixel ( 127 , 63 ) ; // draw alive dot
u8g . setColorIndex ( 1 ) ; // black on white
( * currentMenu ) ( ) ;
if ( ! lcdDrawUpdate ) break ; // Terminate display update, when nothing new to draw. This must be done before the last dogm.next()
} while ( u8g . nextPage ( ) ) ;
# else
timeoutToStatus = ms + LCD_TIMEOUT_TO_STATUS ;
}
# endif //ULTIPANEL
# ifdef DOGLCD // Changes due to different driver architecture of the DOGM display
blink + + ; // Variable for fan animation and alive dot
u8g . firstPage ( ) ;
do {
u8g . setFont ( FONT_MENU ) ;
u8g . setPrintPos ( 125 , 0 ) ;
if ( blink % 2 ) u8g . setColorIndex ( 1 ) ; else u8g . setColorIndex ( 0 ) ; // Set color for the alive dot
u8g . drawPixel ( 127 , 63 ) ; // draw alive dot
u8g . setColorIndex ( 1 ) ; // black on white
( * currentMenu ) ( ) ;
# endif
if ( ! lcdDrawUpdate ) break ; // Terminate display update, when nothing new to draw. This must be done before the last dogm.next()
} while ( u8g . nextPage ( ) ) ;
# else
( * currentMenu ) ( ) ;
# endif
# ifdef LCD_HAS_STATUS_INDICATORS
lcd_implementation_update_indicators ( ) ;
# endif
# ifdef LCD_HAS_STATUS_INDICATORS
lcd_implementation_update_indicators ( ) ;
# endif
# ifdef ULTIPANEL
if ( timeoutToStatus < millis ( ) & & currentMenu ! = lcd_status_screen )
{
lcd_return_to_status ( ) ;
lcdDrawUpdate = 2 ;
}
# endif //ULTIPANEL
if ( lcdDrawUpdate = = 2 ) lcd_implementation_clear ( ) ;
if ( lcdDrawUpdate ) lcdDrawUpdate - - ;
lcd_next_update_millis = millis ( ) + LCD_UPDATE_INTERVAL ;
}
# ifdef ULTIPANEL
if ( currentMenu ! = lcd_status_screen & & millis ( ) > timeoutToStatus ) {
lcd_return_to_status ( ) ;
lcdDrawUpdate = 2 ;
}
# endif //ULTIPANEL
if ( lcdDrawUpdate = = 2 ) lcd_implementation_clear ( ) ;
if ( lcdDrawUpdate ) lcdDrawUpdate - - ;
lcd_next_update_millis = millis ( ) + LCD_UPDATE_INTERVAL ;
}
}
void lcd_ignore_click ( bool b )
{
ignore_click = b ;
wait_for_unclick = false ;
void lcd_ignore_click ( bool b ) {
ignore_click = b ;
wait_for_unclick = false ;
}
void lcd_finishstatus ( ) {
@ -1521,145 +1362,122 @@ void lcd_finishstatus() {
message_millis = millis ( ) ; //get status message to show up for a while
# endif
}
void lcd_setstatus ( const char * message )
{
if ( lcd_status_message_level > 0 )
return ;
strncpy ( lcd_status_message , message , LCD_WIDTH ) ;
lcd_finishstatus ( ) ;
void lcd_setstatus ( const char * message ) {
if ( lcd_status_message_level > 0 ) return ;
strncpy ( lcd_status_message , message , LCD_WIDTH ) ;
lcd_finishstatus ( ) ;
}
void lcd_setstatuspgm ( const char * message )
{
if ( lcd_status_message_level > 0 )
return ;
strncpy_P ( lcd_status_message , message , LCD_WIDTH ) ;
lcd_finishstatus ( ) ;
void lcd_setstatuspgm ( const char * message ) {
if ( lcd_status_message_level > 0 ) return ;
strncpy_P ( lcd_status_message , message , LCD_WIDTH ) ;
lcd_finishstatus ( ) ;
}
void lcd_setalertstatuspgm ( const char * message )
{
lcd_setstatuspgm ( message ) ;
lcd_status_message_level = 1 ;
# ifdef ULTIPANEL
void lcd_setalertstatuspgm ( const char * message ) {
lcd_setstatuspgm ( message ) ;
lcd_status_message_level = 1 ;
# ifdef ULTIPANEL
lcd_return_to_status ( ) ;
# endif //ULTIPANEL
}
void lcd_reset_alert_level ( )
{
lcd_status_message_level = 0 ;
# endif
}
void lcd_reset_alert_level ( ) { lcd_status_message_level = 0 ; }
# ifdef DOGLCD
void lcd_setcontrast ( uint8_t value )
{
void lcd_setcontrast ( uint8_t value ) {
lcd_contrast = value & 63 ;
u8g . setContrast ( lcd_contrast ) ;
}
}
# endif
# ifdef ULTIPANEL
/* Warning: This function is called from interrupt context */
void lcd_buttons_update ( )
{
# ifdef NEWPANEL
uint8_t newbutton = 0 ;
if ( READ ( BTN_EN1 ) = = 0 ) newbutton | = EN_A ;
if ( READ ( BTN_EN2 ) = = 0 ) newbutton | = EN_B ;
# if BTN_ENC > 0
if ( ( blocking_enc < millis ( ) ) & & ( READ ( BTN_ENC ) = = 0 ) )
newbutton | = EN_C ;
# endif
void lcd_buttons_update ( ) {
# ifdef NEWPANEL
uint8_t newbutton = 0 ;
if ( READ ( BTN_EN1 ) = = 0 ) newbutton | = EN_A ;
if ( READ ( BTN_EN2 ) = = 0 ) newbutton | = EN_B ;
# if BTN_ENC > 0
if ( millis ( ) > blocking_enc & & READ ( BTN_ENC ) = = 0 ) newbutton | = EN_C ;
# endif
buttons = newbutton ;
# ifdef LCD_HAS_SLOW_BUTTONS
buttons | = slow_buttons ;
buttons | = slow_buttons ;
# endif
# ifdef REPRAPWORLD_KEYPAD
// for the reprapworld_keypad
uint8_t newbutton_reprapworld_keypad = 0 ;
WRITE ( SHIFT_LD , LOW ) ;
WRITE ( SHIFT_LD , HIGH ) ;
for ( int8_t i = 0 ; i < 8 ; i + + ) {
newbutton_reprapworld_keypad = newbutton_reprapworld_keypad > > 1 ;
if ( READ ( SHIFT_OUT ) )
newbutton_reprapworld_keypad | = ( 1 < < 7 ) ;
WRITE ( SHIFT_CLK , HIGH ) ;
WRITE ( SHIFT_CLK , LOW ) ;
WRITE ( SHIFT_LD , LOW ) ;
WRITE ( SHIFT_LD , HIGH ) ;
for ( int8_t i = 0 ; i < 8 ; i + + ) {
newbutton_reprapworld_keypad > > = 1 ;
if ( READ ( SHIFT_OUT ) ) newbutton_reprapworld_keypad | = ( 1 < < 7 ) ;
WRITE ( SHIFT_CLK , HIGH ) ;
WRITE ( SHIFT_CLK , LOW ) ;
}
buttons_reprapworld_keypad = ~ newbutton_reprapworld_keypad ; //invert it, because a pressed switch produces a logical 0
# endif
# else //read it from the shift register
uint8_t newbutton = 0 ;
WRITE ( SHIFT_LD , LOW ) ;
WRITE ( SHIFT_LD , HIGH ) ;
unsigned char tmp_buttons = 0 ;
for ( int8_t i = 0 ; i < 8 ; i + + )
{
newbutton = newbutton > > 1 ;
if ( READ ( SHIFT_OUT ) )
newbutton | = ( 1 < < 7 ) ;
WRITE ( SHIFT_CLK , HIGH ) ;
WRITE ( SHIFT_CLK , LOW ) ;
# endif
# else //read it from the shift register
uint8_t newbutton = 0 ;
WRITE ( SHIFT_LD , LOW ) ;
WRITE ( SHIFT_LD , HIGH ) ;
unsigned char tmp_buttons = 0 ;
for ( int8_t i = 0 ; i < 8 ; i + + ) {
newbutton > > = 1 ;
if ( READ ( SHIFT_OUT ) ) newbutton | = ( 1 < < 7 ) ;
WRITE ( SHIFT_CLK , HIGH ) ;
WRITE ( SHIFT_CLK , LOW ) ;
}
buttons = ~ newbutton ; //invert it, because a pressed switch produces a logical 0
# endif //!NEWPANEL
//manage encoder rotation
uint8_t enc = 0 ;
if ( buttons & EN_A ) enc | = B01 ;
if ( buttons & EN_B ) enc | = B10 ;
if ( enc ! = lastEncoderBits )
{
switch ( enc )
{
case encrot0 :
if ( lastEncoderBits = = encrot3 )
encoderDiff + + ;
else if ( lastEncoderBits = = encrot1 )
encoderDiff - - ;
break ;
case encrot1 :
if ( lastEncoderBits = = encrot0 )
encoderDiff + + ;
else if ( lastEncoderBits = = encrot2 )
encoderDiff - - ;
break ;
case encrot2 :
if ( lastEncoderBits = = encrot1 )
encoderDiff + + ;
else if ( lastEncoderBits = = encrot3 )
encoderDiff - - ;
break ;
case encrot3 :
if ( lastEncoderBits = = encrot2 )
encoderDiff + + ;
else if ( lastEncoderBits = = encrot0 )
encoderDiff - - ;
break ;
}
buttons = ~ newbutton ; //invert it, because a pressed switch produces a logical 0
# endif //!NEWPANEL
//manage encoder rotation
uint8_t enc = 0 ;
if ( buttons & EN_A ) enc | = B01 ;
if ( buttons & EN_B ) enc | = B10 ;
if ( enc ! = lastEncoderBits ) {
switch ( enc ) {
case encrot0 :
if ( lastEncoderBits = = encrot3 ) encoderDiff + + ;
else if ( lastEncoderBits = = encrot1 ) encoderDiff - - ;
break ;
case encrot1 :
if ( lastEncoderBits = = encrot0 ) encoderDiff + + ;
else if ( lastEncoderBits = = encrot2 ) encoderDiff - - ;
break ;
case encrot2 :
if ( lastEncoderBits = = encrot1 ) encoderDiff + + ;
else if ( lastEncoderBits = = encrot3 ) encoderDiff - - ;
break ;
case encrot3 :
if ( lastEncoderBits = = encrot2 ) encoderDiff + + ;
else if ( lastEncoderBits = = encrot0 ) encoderDiff - - ;
break ;
}
lastEncoderBits = enc ;
}
lastEncoderBits = enc ;
}
bool lcd_detected ( void )
{
# if (defined(LCD_I2C_TYPE_MCP23017) || defined(LCD_I2C_TYPE_MCP23008)) && defined(DETECT_DEVICE)
return lcd . LcdDetected ( ) = = 1 ;
# else
return true ;
# endif
bool lcd_detected ( void ) {
# if (defined(LCD_I2C_TYPE_MCP23017) || defined(LCD_I2C_TYPE_MCP23008)) && defined(DETECT_DEVICE)
return lcd . LcdDetected ( ) = = 1 ;
# else
return true ;
# endif
}
void lcd_buzz ( long duration , uint16_t freq )
{
# ifdef LCD_USE_I2C_BUZZER
lcd . buzz ( duration , freq ) ;
# endif
void lcd_buzz ( long duration , uint16_t freq ) {
# ifdef LCD_USE_I2C_BUZZER
lcd . buzz ( duration , freq ) ;
# endif
}
bool lcd_clicked ( )
{
return LCD_CLICKED ;
}
# endif //ULTIPANEL
bool lcd_clicked ( ) { return LCD_CLICKED ; }
# endif //ULTIPANEL
/********************************/
/** Float conversion utilities **/