печать — (C ++) Нужна помощь в создании заставки для интеллектуального контроллера reprapdiscount 4×20 ЖК-дисплей — РЕДАКТИРОВАНИЕ

Недавно я приобрел набор Delta 3D-принтеров, в котором используется программное обеспечение marlin, основная плата MKS mini (kossel) (используется загрузчик Arduino). & Прошивка Marlin), и перепрограммируйте ЖК-дисплей интеллектуального контроллера (4 строки по 20 символов).

У меня почти нулевой опыт программирования, и я хотел бы получить некоторую помощь в создании «заставки», которая вызывается только при загрузке, а затем через некоторое время возвращается к экрану состояния. Я уже искал в интернете, как это сделать, но единственные, у которых были какие-либо жизнеспособные варианты, были для ЖК-дисплея версии FULL GRAPHICS — что не то, что я имею. Я обнаружил файл .cpp, используемый для этого конкретного ЖК-дисплея — однако, обладая ограниченными знаниями в области программирования, я не могу понять, как добавить заставку при запуске.

Я уверен, что мне нужно создать функцию void в начале реализации меню (см. Ниже), но я не уверен, как / как вызвать ее, чтобы она сначала запускалась, а затем переключалась на экран состояния , Я могу написать псевдокод для него, но не знаю полный код …

примечание: я только что понял, что в пунктах меню отображается ссылочная переменная текста, которая на самом деле содержится в другом файле с именем language.h

КОД PSEUDO того, что я хотел бы сделать:

//start->boot printer
static void splashscreen()
{
/*splashlines are defined in language.h file*/
static void splashline1(); // hello
static void splashline2(); // world
static void splashline3(); // i'm
static void splashline4(); // here!
wait 3 seconds;
switch to -> static void lcd_status_screen();
}

Любая помощь будет принята с благодарностью!

К сожалению, пост ограничен 30 000 символов, а публикация исходного кода поставит меня на более чем 50 000 … поэтому я постараюсь опубликовать

соответствующие фрагменты кода:

ЗАРАНЕЕ СПАСИБО!!


РЕДАКТИРОВАНИЕ


Код состояния ЖК-экрана

#ifdef ULTIPANEL
static float manual_feedrate[] = MANUAL_FEEDRATE;
#endif // ULTIPANEL

/* !Configuration settings */

//Function pointer to menu functions.
typedef void (*menuFunc_t)();

uint8_t lcd_status_message_level;
char lcd_status_message[LCD_WIDTH+1] = WELCOME_MSG;

/** forward declerations **/

void copy_and_scalePID_i();
void copy_and_scalePID_d();

/* Different menus */
static void lcd_status_screen();
#ifdef ULTIPANEL
extern bool powersupply;
static void lcd_main_menu();
static void lcd_tune_menu();
static void lcd_prepare_menu();
static void lcd_move_menu();
static void lcd_control_menu();
static void lcd_control_temperature_menu();
static void lcd_control_temperature_preheat_pla_settings_menu();
static void lcd_control_temperature_preheat_abs_settings_menu();
static void lcd_control_motion_menu();

~ РЕДАКТИРОВАНИЕ Начало кодирования ~

menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */
uint32_t lcd_next_update_millis;
uint8_t lcd_status_update_delay;
uint8_t lcdDrawUpdate = 2;                  /* Set to none-zero when the LCD needs to draw, decreased after every draw. Set to 2 in LCD routines so the LCD gets atleast 1 full redraw (first redraw is partial) */

//prevMenu and prevEncoderPosition are used to store the previous menu location when editing settings.
menuFunc_t prevMenu = NULL;
uint16_t prevEncoderPosition;
//Variables used when editing values.
const char* editLabel;
void* editValue;
int32_t minEditValue, maxEditValue;
menuFunc_t callbackFunc;

// placeholders for Ki and Kd edits
float raw_Ki, raw_Kd;

/* Main status screen. It's up to the implementation specific part to show what is needed. As this is very display dependend */
static void lcd_status_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
if (LCD_CLICKED)
{
currentMenu = lcd_main_menu;
encoderPosition = 0;
lcd_quick_feedback();
}

// Dead zone at 100% feedrate
if ((feedmultiply < 100 && (feedmultiply + int(encoderPosition)) > 100) ||
(feedmultiply > 100 && (feedmultiply + int(encoderPosition)) < 100))
{
encoderPosition = 0;
feedmultiply = 100;
}

if (feedmultiply == 100 && int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE)
{
feedmultiply += int(encoderPosition) - ENCODER_FEEDRATE_DEADZONE;
encoderPosition = 0;
}
else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE)
{
feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE;
encoderPosition = 0;
}
else if (feedmultiply != 100)
{
feedmultiply += int(encoderPosition);
encoderPosition = 0;
}

if (feedmultiply < 10)
feedmultiply = 10;
if (feedmultiply > 999)
feedmultiply = 999;
#endif//ULTIPANEL
}

0

Решение

Как предложил Джоэл Корнетт, посмотрите на пробелы в знаниях и спросите конкретно об этих пробелах. В этом случае кажется, что вам нужно следующее:

  1. Как кодировать временную паузу для отображения «всплеска».
  2. Где инициализировать код, который вы хотите (я думаю, что вы, возможно, пропустили его, так как я не думаю, чтобы увидеть его в коде, который вы опубликовали).
  3. Как заставить код перейти на экран состояния, не зацикливаясь на себе.

Попробуйте отредактировать свое сообщение / разбить свои вопросы на отдельные сообщения. Вы можете получить лучший ответ от этого.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]