Go Down

Topic: Menu for Display (Read 17 times) previous topic - next topic

UKHeliBob


I can set up timer for the devices from 0 to 7 ...

TimeAlarms only normally allows up to 6 alarms to be set concurrently.  You can change a line in TimeAlarms.h to increase the limit.
Code: [Select]
#define dtNBR_ALARMS 6   // max is 255
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

gnusso

Thanks to you guys :-) I will read the documentation for the menu :-) and I will try your suggest ...

So thanks also for the allarm is important Know how many alarms is possible set ...

warms regards,
gnux

gnusso

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 :-)

Code: [Select]

#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();
}


olikraus

#53
Jan 27, 2013, 10:37 am Last Edit: Jan 27, 2013, 10:41 am by olikraus Reason: 1
Hi
All number fields have a format option to limit the number of digits which are displayed.

See here: http://code.google.com/p/m2tklib/wiki/elref#U8NUM

The relevant part is this:
Format Options
    c: Number of digits, e.g. "c2" allows numbers between "00" and "99". Note, that this setting must fit to the min and max value.

This means you get the following results
Code: [Select]

M2_U8NUM(el,"c3",0,255,&number) --> "[000]"
M2_U8NUM(el,"c2",0,31,&number) --> "[00]"
M2_U8NUM(el,"c1",0,9,&number) --> "[0]"

The "c" format option is the key to format the output.
For your xy-grid you need to combine everything:
M2_U8NUM(el,"x0y1c2",0,31,&number) --> "[00]" at position (0,1)

Hope this helps,
Oliver

Edit: Added "code" section

gnusso

Hi Oliver :-), thanks for the useful information ,

i was see the tutorial :-) but and I was guess that was possible combine the value :-)

but I was pass the value into the wrong way :-) thanks in this way  I think I can stay with the four row :-)

The concept to mix the format is always good ? thanks gnux ;-)

Go Up