Hi Oliver,
today after hours of I've build the menu ... I've understood how to use x,y list ... but now there is a little problem ... so I've available a lcd 20x4 ... well with my sketch i need more over di 4 rows ... with the sketch that I've did I've note that if i add more of 4 columns the display start to have some issues ... below reported the code ... so from my understating the code is correct: the problem is that with 20 character available, what I've understand is that i cannot put time and date only one rows ...because using x,y in cannot format the field ...then If not wrong this is the calculation :
start date: [000][000][000][000][000] --> totally characters used: 27 (without label and separator) then i need to split on more rows ... do you know If id possible fix it ?
if try to copy and paste the code you should understand perfectly what I mean in attachment screenshoot also ... thansk for the support ... now i start to understand better also the tutorial is more clear now ...
see in the timer menu
Thanks for the support
#include <LiquidCrystal.h> // ensure that the include path is set
#include "M2tk.h"
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
// Forward declaration of the toplevel element
M2_EXTERN_HLIST(top_el_expandable_menu);
/* SetDate 1-1 */
uint8_t dt_day = 1;
uint8_t dt_month = 1;
uint8_t dt_year = 12;
uint8_t dt_min = 1;
uint8_t dt_hour = 1;
void dt_current(void)
{
}
void dt_get_from_RTC(void)
{
}
void dt_put_to_RTC(void)
{
}
void dt_ok_date(m2_el_fnarg_p fnarg)
{
dt_put_to_RTC();
m2_SetRoot(&top_el_expandable_menu);
}
void time_ok_button(m2_el_fnarg_p fnarg)
{
dt_put_to_RTC();
m2_SetRoot(&top_el_expandable_menu);
}
void view_ok_button(m2_el_fnarg_p fnarg)
{
dt_current();
m2_SetRoot(&top_el_expandable_menu);
}
M2_U8NUM(el_dt_year, "c2", 0,99,&dt_year);
M2_LABEL(el_dt_sep1, "b1", "-");
M2_U8NUM(el_dt_month, "c2", 1,12,&dt_month);
M2_LABEL(el_dt_sep2, "b1", "-");
M2_U8NUM(el_dt_day, "c2", 1,31,&dt_day);
M2_LIST(list_date) = { &el_dt_year, &el_dt_sep1, &el_dt_month, &el_dt_sep2, &el_dt_day };
M2_HLIST(el_date, NULL, list_date);
M2_ROOT(el_dt_cancel, NULL, "cancel", &top_el_expandable_menu);
M2_BUTTON(el_dt_ok, NULL, "ok", dt_ok_date);
M2_LIST(list_dt_buttons) = {&el_dt_cancel, &el_dt_ok };
M2_HLIST(el_dt_buttons, NULL, list_dt_buttons);
M2_LIST(list_dt) = {&el_date, &el_dt_buttons };
M2_VLIST(el_top_dt, NULL, list_dt);
/* Set time 1-2 ---------------------------------------------------------------------*/
M2_U8NUM(el_dt_hour, "c2", 0,23,&dt_hour);
M2_LABEL(el_dt_c, "b1", ":");
M2_U8NUM(el_dt_min, "c2", 0,59,&dt_min);
M2_LIST(list_time) = { &el_dt_hour, &el_dt_c, &el_dt_min};
M2_HLIST(el_time, NULL, list_time);
M2_ROOT(el_time_cancel, NULL, "cancel", &top_el_expandable_menu);
M2_BUTTON(el_time_ok, NULL, "ok", time_ok_button);
M2_LIST(list_time_buttons) = {&el_time_cancel, &el_time_ok };
M2_HLIST(el_time_buttons, NULL, list_time_buttons);
M2_LIST(list_t) = {&el_time, &el_time_buttons};
M2_VLIST(el_top_time, NULL, list_t);
/* View DateTime 1-3 */
// M2_LABEL(el_dt_view, "b1", "DateTimeNow");
//M2_LIST(list_view) = {&el_dt_view};
//M2_HLIST(el_view, NULL, list_view);
// M2_ROOT(el_view_cancel, NULL, "cancel", &top_el_expandable_menu);
M2_BUTTON(el_view_ok, NULL, "ok", view_ok_button);
M2_LIST(list_view_buttons) = {&el_view_ok };
M2_HLIST(el_view_buttons, NULL, list_view_buttons);
M2_LIST(list_v) = {&el_view_buttons};
M2_VLIST(el_top_view, NULL, list_v);
/* -------------- DEVICE 2 ----------------------*/
uint8_t u8dev = 0;
uint8_t u8stato = 0;
void fn_clean_dev(m2_el_fnarg_p fnarg) {
u8dev = 0;
}
void dev_ok_button(m2_el_fnarg_p fnarg) {
m2_SetRoot(&top_el_expandable_menu);
}
void dev_stato_button(m2_el_fnarg_p fnarg) {
// procedura per recuperare lo stato della periferica
}
M2_LABEL(el_num_label1, NULL, "Select Dev:");
M2_U8NUM(el_num_1, NULL, 0, 64, &u8dev);
M2_LABEL(el_num_label2,NULL, "Turn Off/On:");
M2_U8NUM(el_num_2, NULL, 0, 1, &u8stato);
M2_BUTTON(el_num_zero, NULL, "Zero", fn_clean_dev);
M2_BUTTON(el_dev_ok, NULL, "Ok", dev_ok_button);
M2_BUTTON(el_dev_stato, NULL, "State", dev_stato_button);
//M2_ROOT(el_num_goto_top, "f4", "back", &top_el_expandable_menu);
M2_LIST(num_list) = {
&el_num_label1, &el_num_1,
&el_num_label2, &el_num_2,
&el_num_zero, &el_dev_stato, &el_dev_ok
};
M2_GRIDLIST(el_num_menu, "c2", num_list);
/* --------------------------- TIMER 3-------------------------- */
uint8_t u8devTimer = 0; // used for select the devices
uint8_t IsTimerEnable = 0; // used for say if enable or disable 0 disable 1 enable
// set start date time
uint8_t dt_day_start = 1;
uint8_t dt_month_start = 1;
uint8_t dt_year_start = 13;
uint8_t dt_min_start = 1;
uint8_t dt_hour_start = 1;
// set stop date time
uint8_t dt_day_stop = 1;
uint8_t dt_month_stop = 1;
uint8_t dt_year_stop = 13;
uint8_t dt_min_stop = 1;
uint8_t dt_hour_stop = 1;
void fn_clean_dev_timer(m2_el_fnarg_p fnarg) {
u8devTimer = 0;
}
void dev_ok_button_timer(m2_el_fnarg_p fnarg) {
m2_SetRoot(&top_el_expandable_menu);
}
M2_LABEL(el_num_timer1, "x0y5", "Dev:");
M2_U8NUM(el_num_t1, "x4y5",0, 64, &u8devTimer);
M2_LABEL(el_num_timer2,"x11y5", "E/D:");
M2_U8NUM(el_num_t2, "x14y5", 0, 1, &IsTimerEnable);
M2_LABEL(el_num_timer3,"x0y4", "Start Time:");
M2_U8NUM(el_dt_hour_t1start,"x10y4", 0,23,&dt_hour_start);
M2_U8NUM(el_dt_min_t1start, "x14y4", 0,59,&dt_min_start);
// DATE
M2_LABEL(el_num_timer4,"x0y3", "S.D.:");
M2_U8NUM(dt_day_t1start, "x5y3", 0,99,&dt_day_start);
M2_U8NUM(dt_month_t1start, "x9y3", 1,12,&dt_month_start);
M2_U8NUM(dt_year_t1start, "x13y3", 1,12,&dt_year_start);
// Stop Timer
M2_LABEL(el_num_timer5,"x0y2", "Stop Time:");
M2_U8NUM(el_dt_hour_t1stop,"x10y2", 0,23,&dt_hour_stop);
M2_U8NUM(el_dt_min_t1stop, "x14y2", 0,59,&dt_min_stop);
M2_LABEL(el_num_timer6,"x0y1", "E.D.:");
M2_U8NUM(dt_day_t1stop, "x5y1", 0,99,&dt_day_stop);
M2_U8NUM(dt_month_t1stop, "x9y1", 1,12,&dt_month_stop);
M2_U8NUM(dt_year_t1stop, "x13y1", 1,12,&dt_year_stop);
// pulsanti
M2_BUTTON(el_num_zero_timer, "x0y0", "Zero", fn_clean_dev_timer);
M2_BUTTON(el_dev_ok_timer, "x8y0", "ok", dev_ok_button_timer);
M2_ROOT(el_num_goto_top_timer, "x13y0", "back", &top_el_expandable_menu);
M2_LIST(num_list_timer) = { &el_num_timer1, &el_num_t1,
&el_num_timer2,&el_num_t2,
&el_num_timer3,&el_dt_hour_t1start,&el_dt_min_t1start,
&el_num_timer4,&dt_day_t1start,&dt_month_t1start,&dt_year_t1start,
&el_num_timer5,&el_dt_hour_t1stop, &el_dt_min_t1stop,
&el_num_timer6,&dt_day_t1stop,&dt_month_t1stop,&dt_year_t1stop,
&el_num_zero_timer,&el_dev_ok_timer,&el_num_goto_top_timer,
};
M2_XYLIST(el_num_menu_timer, NULL,num_list_timer);
/* --------------------------- main menu-------------------------- */
m2_menu_entry m2_2lmenu_data[] =
{
{ "DATE/TIME 1", NULL },
{ ". SetDate 1-1", &el_top_dt },
{ ". SetTime 1-2", &el_top_time},
{ ". View DateTime 1-3", &el_top_view},
{ "DEVICES 2", NULL},
{ ". Manage 2-1", &el_num_menu},
{ "TIMER 3", NULL},
{ ". SetTimer 3-1", &el_num_menu_timer},
{ ". ViewTimer 3-2", &el_top_view},
{ NULL, NULL },
};
uint8_t m2_2lmenu_first;
uint8_t m2_2lmenu_cnt;
M2_2LMENU(el_2lmenu,"l4e1w12",&m2_2lmenu_first,&m2_2lmenu_cnt, m2_2lmenu_data,'+','-','\0');
M2_VSB(el_vsb, "l4w1r1", &m2_2lmenu_first, &m2_2lmenu_cnt);
M2_LIST(list_2lmenu) = { &el_2lmenu, &el_vsb };
M2_HLIST(top_el_expandable_menu, NULL, list_2lmenu);
// m2 object and constructor
M2tk m2(&top_el_expandable_menu, m2_es_arduino_serial, m2_eh_2bs, m2_gh_arduino_serial);
/* --------------------------- end menu-------------------------- */
void setup()
{
}
void loop() {
// Timer();
m2.checkKey();
m2.checkKey();
if ( m2.handleKey() )
m2.draw();
m2.checkKey();
}