Second Part:
void DefinizionePin()
{
//Piedini Utilizzati per Gestire LCD
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
pinMode(13, OUTPUT);
}
void Comunicazione()
{
Wire.begin(); // Inizializzo la Comunicazione I2C
Serial.begin(9600); // Inizializzo la Seriale
vw_setup(1200); // Inizializzo al Comunicazione TTL su Virtual Wire
vw_rx_start(); // Start the receiver PLL running
RTC.start(); // Fai partire il clock
}
void TxMsg(char buffer[15])
{
vw_send((uint8_t *)buffer, strlen(buffer));
vw_wait_tx(); // Wait until the whole message is gone
Serial.println(buffer);
buffer[0]='\0';
Serial.println("Comando Inviato");
}
// 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)
{
Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print(" "); // some space for a more happy life
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println();
Serial.print(hour());
Serial.print(minute());
Serial.print(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void dt_get_from_RTC(void)
{
dt_day = RTC.get(DS1307_DATE,false);
dt_month = RTC.get(DS1307_MTH,false);
dt_year = (RTC.get(DS1307_YR,false)-2000);
dt_min = RTC.get(DS1307_MIN,false);
dt_hour = RTC.get(DS1307_HR,true);
}
void dt_put_to_RTC(void)
{
RTC.stop();
RTC.set(DS1307_DATE,dt_day);
RTC.set(DS1307_MTH,dt_month);
RTC.set(DS1307_YR,dt_year);
RTC.set(DS1307_HR,dt_hour);
RTC.set(DS1307_MIN,dt_min);
RTC.start();
setTime(RTC.get(DS1307_HR,true),RTC.get(DS1307_MIN,false),RTC.get(DS1307_SEC,false),RTC.get(DS1307_DATE,false),RTC.get(DS1307_MTH,false),(RTC.get(DS1307_YR,false)-2000));
}
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_cancel, &el_view_ok };
M2_HLIST(el_view_buttons, NULL, list_view_buttons);
M2_LIST(list_v) = {&el_view, &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) {
if (u8dev <= 9)
{
messaggio[1] = u8dev + 48;
messaggio[2] = '#';
messaggio[3] = '\0';
}
if (u8dev > 9)
{
int x,y;
y = u8dev/10;
messaggio[1] = y + 48;
x = u8dev % 10;
messaggio[2] = x + 48;
messaggio[3] = '#';
messaggio[4] = '\0';
}
if (u8stato == 0)
{
messaggio[0] ='*';
}
if (u8stato == 1)
{
messaggio[0] ='1';
}
TxMsg(messaggio);
messaggio[0] = '\0';
}
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, "f4", "zero", fn_clean_dev);
M2_BUTTON(el_dev_ok, NULL, "ok", dev_ok_button);
M2_BUTTON(el_dev_stato, NULL, "stato", 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_dev_ok, &el_num_zero, &el_num_goto_top,&el_dev_stato
};
M2_GRIDLIST(el_num_menu, "c2", num_list);
/* --------------------------- 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},
{ 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()
{
Comunicazione();
LeggiEeprom();
}
void loop() {
Timer();
// Alarm.triggerOnce(makeTime(tm0stop), StopTimer0);
m2.checkKey();
m2.checkKey();
if ( m2.handleKey() )
m2.draw();
m2.checkKey();
Alarm.delay(1);
}
Now just past the 2 in only one sketch,
regards,
gnux