use timer class
This commit is contained in:
parent
5b6fb9e49b
commit
565a6db3e4
|
|
@ -979,7 +979,7 @@ void CardReader::presort() {
|
||||||
#endif
|
#endif
|
||||||
lcd_update(2);
|
lcd_update(2);
|
||||||
KEEPALIVE_STATE(NOT_BUSY);
|
KEEPALIVE_STATE(NOT_BUSY);
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardReader::flush_presort() {
|
void CardReader::flush_presort() {
|
||||||
|
|
|
||||||
|
|
@ -662,7 +662,7 @@ int8_t lcd_encoder_diff = 0;
|
||||||
uint8_t lcd_buttons = 0;
|
uint8_t lcd_buttons = 0;
|
||||||
uint8_t lcd_button_pressed = 0;
|
uint8_t lcd_button_pressed = 0;
|
||||||
uint8_t lcd_update_enabled = 1;
|
uint8_t lcd_update_enabled = 1;
|
||||||
uint32_t lcd_timeoutToStatus = 0;
|
LongTimer lcd_timeoutToStatus;
|
||||||
|
|
||||||
uint32_t lcd_next_update_millis = 0;
|
uint32_t lcd_next_update_millis = 0;
|
||||||
uint8_t lcd_status_update_delay = 0;
|
uint8_t lcd_status_update_delay = 0;
|
||||||
|
|
@ -712,7 +712,6 @@ void lcd_quick_feedback(void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void lcd_update(uint8_t lcdDrawUpdateOverride)
|
void lcd_update(uint8_t lcdDrawUpdateOverride)
|
||||||
{
|
{
|
||||||
if (lcd_draw_update < lcdDrawUpdateOverride)
|
if (lcd_draw_update < lcdDrawUpdateOverride)
|
||||||
|
|
@ -735,7 +734,7 @@ void lcd_update_enable(uint8_t enabled)
|
||||||
lcd_encoder_diff = 0;
|
lcd_encoder_diff = 0;
|
||||||
// Enabling the normal LCD update procedure.
|
// Enabling the normal LCD update procedure.
|
||||||
// Reset the timeout interval.
|
// Reset the timeout interval.
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
// Force the keypad update now.
|
// Force the keypad update now.
|
||||||
lcd_next_update_millis = millis() - 1;
|
lcd_next_update_millis = millis() - 1;
|
||||||
// Full update.
|
// Full update.
|
||||||
|
|
@ -762,7 +761,7 @@ void lcd_buttons_update(void)
|
||||||
{ //if we are in non-modal mode, long press can be used and short press triggers with button release
|
{ //if we are in non-modal mode, long press can be used and short press triggers with button release
|
||||||
if (READ(BTN_ENC) == 0)
|
if (READ(BTN_ENC) == 0)
|
||||||
{ //button is pressed
|
{ //button is pressed
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
if (!buttonBlanking.running() || buttonBlanking.expired(BUTTON_BLANKING_TIME)) {
|
if (!buttonBlanking.running() || buttonBlanking.expired(BUTTON_BLANKING_TIME)) {
|
||||||
buttonBlanking.start();
|
buttonBlanking.start();
|
||||||
if ((lcd_button_pressed == 0) && (lcd_long_press_active == 0))
|
if ((lcd_button_pressed == 0) && (lcd_long_press_active == 0))
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,9 @@ extern void lcd_print(double, int = 2);
|
||||||
|
|
||||||
|
|
||||||
#define LCD_UPDATE_INTERVAL 100
|
#define LCD_UPDATE_INTERVAL 100
|
||||||
#define LCD_TIMEOUT_TO_STATUS 30000
|
#define LCD_TIMEOUT_TO_STATUS 30000ul //!< Generic timeout to status screen in ms, when no user action.
|
||||||
|
#define LCD_TIMEOUT_TO_STATUS_BABYSTEP_Z 90000ul //!< Specific timeout for lcd_babystep_z screen in ms.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef void (*lcd_longpress_func_t)(void);
|
typedef void (*lcd_longpress_func_t)(void);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
#include "stepper.h"
|
#include "stepper.h"
|
||||||
#include "ConfigurationStore.h"
|
#include "ConfigurationStore.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "Timer.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
|
|
@ -176,7 +175,7 @@ bool printer_connected = true;
|
||||||
unsigned long display_time; //just timer for showing pid finished message on lcd;
|
unsigned long display_time; //just timer for showing pid finished message on lcd;
|
||||||
float pid_temp = DEFAULT_PID_TEMP;
|
float pid_temp = DEFAULT_PID_TEMP;
|
||||||
|
|
||||||
|
static bool forceMenuExpire = false;
|
||||||
bool menuExiting = false;
|
bool menuExiting = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1186,7 +1185,7 @@ void lcd_commands()
|
||||||
float extr = count_e(0.2, width, length);
|
float extr = count_e(0.2, width, length);
|
||||||
float extr_short_segment = count_e(0.2, width, width);
|
float extr_short_segment = count_e(0.2, width, width);
|
||||||
|
|
||||||
if (lcd_commands_step>1) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
if (lcd_commands_step>1) lcd_timeoutToStatus.start(); //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
||||||
if (lcd_commands_step == 0)
|
if (lcd_commands_step == 0)
|
||||||
{
|
{
|
||||||
lcd_commands_step = 10;
|
lcd_commands_step = 10;
|
||||||
|
|
@ -1212,7 +1211,7 @@ void lcd_commands()
|
||||||
}
|
}
|
||||||
if (lcd_commands_step == 9 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 9 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
enquecommand_P(PSTR("G1 Z0.250 F7200.000"));
|
enquecommand_P(PSTR("G1 Z0.250 F7200.000"));
|
||||||
enquecommand_P(PSTR("G1 X50.0 E80.0 F1000.0"));
|
enquecommand_P(PSTR("G1 X50.0 E80.0 F1000.0"));
|
||||||
enquecommand_P(PSTR("G1 X160.0 E20.0 F1000.0"));
|
enquecommand_P(PSTR("G1 X160.0 E20.0 F1000.0"));
|
||||||
|
|
@ -1236,7 +1235,7 @@ void lcd_commands()
|
||||||
}
|
}
|
||||||
if (lcd_commands_step == 8 && !blocks_queued() && cmd_buffer_empty()) //draw meander
|
if (lcd_commands_step == 8 && !blocks_queued() && cmd_buffer_empty()) //draw meander
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
|
|
||||||
|
|
||||||
enquecommand_P(PSTR("G1 X50 Y155"));
|
enquecommand_P(PSTR("G1 X50 Y155"));
|
||||||
|
|
@ -1261,7 +1260,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 7 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 7 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
strcpy(cmd1, "G1 X50 Y35 E");
|
strcpy(cmd1, "G1 X50 Y35 E");
|
||||||
strcat(cmd1, ftostr43(extr));
|
strcat(cmd1, ftostr43(extr));
|
||||||
enquecommand(cmd1);
|
enquecommand(cmd1);
|
||||||
|
|
@ -1294,7 +1293,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 6 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 6 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 4; i < 8; i++) {
|
for (int i = 4; i < 8; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1323,7 +1322,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 5 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 5 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 8; i < 12; i++) {
|
for (int i = 8; i < 12; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1352,7 +1351,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 4 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 4 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 12; i < 16; i++) {
|
for (int i = 12; i < 16; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1381,7 +1380,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 3 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 3 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
enquecommand_P(PSTR("G1 E-0.07500 F2100.00000"));
|
enquecommand_P(PSTR("G1 E-0.07500 F2100.00000"));
|
||||||
enquecommand_P(PSTR("G4 S0"));
|
enquecommand_P(PSTR("G4 S0"));
|
||||||
enquecommand_P(PSTR("G1 E-4 F2100.00000"));
|
enquecommand_P(PSTR("G1 E-4 F2100.00000"));
|
||||||
|
|
@ -1404,7 +1403,7 @@ void lcd_commands()
|
||||||
}
|
}
|
||||||
if (lcd_commands_step == 2 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 2 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
|
|
||||||
enquecommand_P(PSTR("G1 X0 Y1 E3.0000"));
|
enquecommand_P(PSTR("G1 X0 Y1 E3.0000"));
|
||||||
enquecommand_P(PSTR("G1 X50 Y1 E-5.0000"));
|
enquecommand_P(PSTR("G1 X50 Y1 E-5.0000"));
|
||||||
|
|
@ -1450,7 +1449,7 @@ void lcd_commands()
|
||||||
float length = 20 - width;
|
float length = 20 - width;
|
||||||
float extr = count_e(0.2, width, length);
|
float extr = count_e(0.2, width, length);
|
||||||
float extr_short_segment = count_e(0.2, width, width);
|
float extr_short_segment = count_e(0.2, width, width);
|
||||||
if(lcd_commands_step>1) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
if(lcd_commands_step>1) lcd_timeoutToStatus.start(); //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
||||||
if (lcd_commands_step == 0)
|
if (lcd_commands_step == 0)
|
||||||
{
|
{
|
||||||
lcd_commands_step = 9;
|
lcd_commands_step = 9;
|
||||||
|
|
@ -1490,7 +1489,7 @@ void lcd_commands()
|
||||||
}
|
}
|
||||||
if (lcd_commands_step == 7 && !blocks_queued() && cmd_buffer_empty()) //draw meander
|
if (lcd_commands_step == 7 && !blocks_queued() && cmd_buffer_empty()) //draw meander
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
|
|
||||||
|
|
||||||
//just opposite direction
|
//just opposite direction
|
||||||
|
|
@ -1538,7 +1537,7 @@ void lcd_commands()
|
||||||
if (lcd_commands_step == 6 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 6 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
|
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
|
|
@ -1568,7 +1567,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 5 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 5 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 4; i < 8; i++) {
|
for (int i = 4; i < 8; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1597,7 +1596,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 4 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 4 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 8; i < 12; i++) {
|
for (int i = 8; i < 12; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1626,7 +1625,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 3 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 3 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
for (int i = 12; i < 16; i++) {
|
for (int i = 12; i < 16; i++) {
|
||||||
strcpy(cmd1, "G1 X70 Y");
|
strcpy(cmd1, "G1 X70 Y");
|
||||||
strcat(cmd1, ftostr32(35 - i*width * 2));
|
strcat(cmd1, ftostr32(35 - i*width * 2));
|
||||||
|
|
@ -1655,7 +1654,7 @@ void lcd_commands()
|
||||||
|
|
||||||
if (lcd_commands_step == 2 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 2 && !blocks_queued() && cmd_buffer_empty())
|
||||||
{
|
{
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
enquecommand_P(PSTR("M107")); //turn off printer fan
|
enquecommand_P(PSTR("M107")); //turn off printer fan
|
||||||
#ifdef SNMM_V2
|
#ifdef SNMM_V2
|
||||||
enquecommand_P(PSTR("M702 C"));
|
enquecommand_P(PSTR("M702 C"));
|
||||||
|
|
@ -1667,7 +1666,7 @@ void lcd_commands()
|
||||||
enquecommand_P(PSTR("G1 Z10 F1300.000"));
|
enquecommand_P(PSTR("G1 Z10 F1300.000"));
|
||||||
enquecommand_P(PSTR("G1 X10 Y180 F4000")); //home X axis
|
enquecommand_P(PSTR("G1 X10 Y180 F4000")); //home X axis
|
||||||
enquecommand_P(PSTR("M84"));// disable motors
|
enquecommand_P(PSTR("M84"));// disable motors
|
||||||
lcd_timeoutToStatus = millis() - 1; //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
forceMenuExpire = true; //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
|
||||||
lcd_commands_step = 1;
|
lcd_commands_step = 1;
|
||||||
}
|
}
|
||||||
if (lcd_commands_step == 1 && !blocks_queued() && cmd_buffer_empty())
|
if (lcd_commands_step == 1 && !blocks_queued() && cmd_buffer_empty())
|
||||||
|
|
@ -4145,7 +4144,7 @@ void menu_setlang(unsigned char lang)
|
||||||
lcd_update_enable(true);
|
lcd_update_enable(true);
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
menu_goto(lcd_language_menu, 0, true, true);
|
menu_goto(lcd_language_menu, 0, true, true);
|
||||||
lcd_timeoutToStatus = -1; //infinite timeout
|
lcd_timeoutToStatus.stop(); //infinite timeout
|
||||||
lcd_draw_update = 2;
|
lcd_draw_update = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4380,7 +4379,7 @@ void lcd_language()
|
||||||
lcd_update_enable(true);
|
lcd_update_enable(true);
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
menu_goto(lcd_language_menu, 0, true, true);
|
menu_goto(lcd_language_menu, 0, true, true);
|
||||||
lcd_timeoutToStatus = -1; //infinite timeout
|
lcd_timeoutToStatus.stop(); //infinite timeout
|
||||||
lcd_draw_update = 2;
|
lcd_draw_update = 2;
|
||||||
while ((menu_menu != lcd_status_screen) && (!lang_is_selected()))
|
while ((menu_menu != lcd_status_screen) && (!lang_is_selected()))
|
||||||
{
|
{
|
||||||
|
|
@ -7532,6 +7531,25 @@ void menu_lcd_charsetup_func(void)
|
||||||
lcd_set_custom_characters_arrows();
|
lcd_set_custom_characters_arrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool z_menu_expired()
|
||||||
|
{
|
||||||
|
return (currentMenu == lcd_babystep_z
|
||||||
|
&& lcd_timeoutToStatus.expired(LCD_TIMEOUT_TO_STATUS_BABYSTEP_Z));
|
||||||
|
}
|
||||||
|
static inline bool other_menu_expired()
|
||||||
|
{
|
||||||
|
return (currentMenu != lcd_status_screen
|
||||||
|
&& currentMenu != lcd_babystep_z
|
||||||
|
&& lcd_timeoutToStatus.expired(LCD_TIMEOUT_TO_STATUS));
|
||||||
|
}
|
||||||
|
static inline bool forced_menu_expire()
|
||||||
|
{
|
||||||
|
bool retval = (currentMenu != lcd_status_screen
|
||||||
|
&& forceMenuExpire);
|
||||||
|
forceMenuExpire = false;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
void menu_lcd_lcdupdate_func(void)
|
void menu_lcd_lcdupdate_func(void)
|
||||||
{
|
{
|
||||||
#if (SDCARDDETECT > 0)
|
#if (SDCARDDETECT > 0)
|
||||||
|
|
@ -7561,14 +7579,14 @@ void menu_lcd_lcdupdate_func(void)
|
||||||
lcd_draw_update = 1;
|
lcd_draw_update = 1;
|
||||||
lcd_encoder += lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
|
lcd_encoder += lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
|
||||||
lcd_encoder_diff = 0;
|
lcd_encoder_diff = 0;
|
||||||
lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
lcd_timeoutToStatus.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LCD_CLICKED) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
|
if (LCD_CLICKED) lcd_timeoutToStatus.start();
|
||||||
|
|
||||||
(*menu_menu)();
|
(*menu_menu)();
|
||||||
|
|
||||||
if (lcd_timeoutToStatus < millis() && menu_menu != lcd_status_screen)
|
if (z_menu_expired() || other_menu_expired() || forced_menu_expire())
|
||||||
{
|
{
|
||||||
// Exiting a menu. Let's call the menu function the last time with menuExiting flag set to true
|
// Exiting a menu. Let's call the menu function the last time with menuExiting flag set to true
|
||||||
// to give it a chance to save its state.
|
// to give it a chance to save its state.
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "conv2str.h"
|
#include "conv2str.h"
|
||||||
|
#include "Timer.h"
|
||||||
|
|
||||||
extern int lcd_puts_P(const char* str);
|
extern int lcd_puts_P(const char* str);
|
||||||
extern int lcd_printf_P(const char* format, ...);
|
extern int lcd_printf_P(const char* format, ...);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue