#include <stdio.h>
#include <stdlib.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <string>
#include "my_menu.h"
#include "class_event_manager.h"
#include "my_class_btn.h"
#ifndef events_list_h
#define events_list_h
#include "events_list.h"
#endif
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
class_event_manager event_manager;
class_my_menu main_menu ("MAIN MENU", SETTINGS_MENU_SHOW);
class_my_menu settings_menu("SETTINGS", MAIN_MENU_SHOW);
// this function must be here... dont know how to make
// pointer to the class method. if known then
void add_to_queue(int event_id){
if (event_id != 0) event_manager.add_to_queue(event_id);
}
//class_my_button my_button_2(2, &add_to_queue, EV_RED_SHORT, EV_RED_LONG);
class_my_button my_button_up (18, BUTTON_UP_SHORT, BUTTON_UP_LONG);
class_my_button my_button_down (5, BUTTON_DOWN_SHORT, BUTTON_DOWN_LONG);
class_my_button my_button_left (23, BUTTON_LEFT_SHORT, BUTTON_LEFT_LONG);
class_my_button my_button_right(19, BUTTON_RIGHT_SHORT,BUTTON_RIGHT_LONG);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// TBD
main_menu.display = &display;
settings_menu.display = &display;
// menu definition
main_menu.add_item_struct({"Mode", SEL_MODE});
main_menu.add_item_struct({"Settings", SETTINGS_MENU_SHOW});
main_menu.add_item_struct({"GREEN On", EV_GREEN_ON});
main_menu.add_item_struct({"GREEN Off", EV_GREEN_OFF});
//settings_menu.add_item_struct({"Increase Delay", DUMMY_EVENT});
//settings_menu.add_item_struct({"Decrease Delay", DUMMY_EVENT});
//settings_menu.add_item_struct({"Increase sth", DUMMY_EVENT});
//settings_menu.add_item_struct({"Decrease sth", DUMMY_EVENT});
// show menu
pinMode(2,OUTPUT);
//add_to_queue(MAIN_MENU_SHOW);
main_menu.show();
}
int menu_return;
int current_event;
event_txx event_struct;
void loop() {
// reading button states
add_to_queue(my_button_up.f_check_my_button());
add_to_queue(my_button_down.f_check_my_button());
add_to_queue(my_button_left.f_check_my_button());
add_to_queue(my_button_right.f_check_my_button());
// main events loop
//int current_event = event_manager.get_first_event();
event_manager.get_first_event_tx(&event_struct);
current_event = event_struct.event_id;
//if (current_event != NULL) {
if (event_struct.event_id != NULL) {
Serial.print("Event : ");
Serial.println(event_struct.event_id);
switch (event_struct.event_id) {
case BUTTON_UP_SHORT:
digitalWrite(2, HIGH);
break;
case BUTTON_DOWN_SHORT:
digitalWrite(2, LOW);
break;
case MAIN_MENU_SHOW:
main_menu.show();
break;
//case SETTINGS_MENU_SHOW:
// settings_menu.show();
// break;
}
// reading menu events TBD
menu_return = settings_menu.event_handler(current_event);
if (menu_return != NULL) add_to_queue(menu_return); // not good, menu may return more events,
//menu_return = settings_menu.event_handler(event_struct.event_id);
//if (menu_return != NULL) add_to_queue(menu_return); // not good, menu may return more events,
// should be done directly in menu ?
}
}