#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
int progress = 0;
int i = 0;
// Buttons for Reed Slots
#define button_1_pin 4
#define button_2_pin 8
//Buttons for arrow keys
#define button_up_pin 2
#define button_down_pin 3
#define button_right_pin 7
#define button_left_pin 13
#define button_select_pin 12
//defining the number of times reed used
int reed_1_usage = 0;
int reed_2_usage = 0;
//Strings to display
String reed_1;
String reed_2;
//Debounces
int reed_1_clicked = 1;
int reed_2_clicked = 1;
int button_up_clicked = 0;
int button_down_clicked = 0;
int button_left_clicked = 0;
int button_right_clicked = 0;
int button_select_clicked = 0;
//Variable for which Menu I am on
// 0 === MAIN MENU
// 1 === REED RESET
// 2 === REED TOTALS
// 3 ==== EDIT SLOT
int current_menu = 0;
// Main Menu items
const int NUM_ITEMS = 3; //Number of items in the main menu
char main_menu_items[NUM_ITEMS][20] ={
{"Reset a Slot"},
{"Current Totals"},
{"Edit a Slot"}
};
int main_menu_debounce = 1;
//Main Menu Item Selected
int main_menu_item_selected;
int main_menu_item_previous;
int main_menu_item_next;
//Reset a slot Items
int reset_slot_sel = 1;
int reset_total_slots = 2;
int reset_debounce = 0;
int reset_loop_cnt = 0; //This is super hacky... But just putting a counter in here to try and fix bug of just going right back to main screen
int reset_box_start_pos;
int reset_flg;
int reset_mm_selected; //Variable to indicate when the user moves cursor over to main menu button
// Edit a slot Items
int edit_box_start_pos;
int edit_menu_select; //Menu select is 0 = Selector, 1 = main menu, 2 = editing reed
int edit_loop_cnt;
int edit_flg;
int edit_debounce;
int edit_total_sel = 2;
int edit_slot_sel;
String reed_1_edit;
String reed_2_edit;
String edit_edit_reed;
String edit_reed_count_str;
// Current Totals Page
int current_loop_cnt;
int current_debounce;
String current_debug;
void setup() {
pinMode(button_1_pin, INPUT_PULLUP);
pinMode(button_2_pin, INPUT_PULLUP);
pinMode(button_up_pin,INPUT_PULLUP);
pinMode(button_down_pin, INPUT_PULLUP);
pinMode(button_left_pin, INPUT_PULLUP);
pinMode(button_right_pin, INPUT_PULLUP);
pinMode(button_select_pin, INPUT_PULLUP);
//u8g.setFont(u8g_font_tpssb);
u8g.setFont(u8g_font_fixed_v0);
u8g.setColorIndex(1);
}
void loop() {
//Counters for Main Menu
main_menu_item_previous = main_menu_item_selected - 1;
if(main_menu_item_previous < 0)
{
main_menu_item_previous = NUM_ITEMS -1;
}
main_menu_item_next = main_menu_item_selected + 1;
if(main_menu_item_next >= NUM_ITEMS)
{
main_menu_item_next = 0;
}
// Counting for Reed Usage
if(digitalRead(button_1_pin) == HIGH && reed_1_clicked == 0)
{
reed_1_usage = reed_1_usage +1;
reed_1_clicked = 1;
}
if(digitalRead(button_2_pin) == HIGH && reed_2_clicked == 0)
{
reed_2_usage = reed_2_usage + 1;
reed_2_clicked = 1;
}
// Counting Reed Usage debounce
if(digitalRead(button_1_pin)== LOW && reed_1_clicked == 1)
{
reed_1_clicked = 0;
}
if(digitalRead(button_2_pin) == LOW && reed_2_clicked == 1)
{
reed_2_clicked = 0;
}
//Button Clicks for Arrows
if(digitalRead(button_up_pin) == LOW && button_up_clicked == 0)
{
button_up_clicked = 1;
}
if(digitalRead(button_down_pin) == LOW && button_down_clicked == 0)
{
button_down_clicked = 1;
}
if(digitalRead(button_right_pin) == LOW && button_right_clicked == 0)
{
button_right_clicked = 1;
}
if(digitalRead(button_left_pin) == LOW && button_left_clicked == 0)
{
button_left_clicked = 1;
}
if(digitalRead(button_select_pin) == LOW && button_select_clicked == 0)
{
button_select_clicked = 1;
}
//Button click debounce for arrows
if(digitalRead(button_up_pin) == HIGH && button_up_clicked == 1)
{
button_up_clicked = 0;
}
if(digitalRead(button_down_pin) == HIGH && button_down_clicked == 1)
{
button_down_clicked = 0;
}
if(digitalRead(button_right_pin) == HIGH && button_right_clicked == 1)
{
button_right_clicked = 0;
}
if(digitalRead(button_left_pin) == HIGH && button_left_clicked == 1)
{
button_left_clicked = 0;
}
if(digitalRead(button_select_pin) == HIGH && button_select_clicked == 1)
{
button_select_clicked = 0;
}
//MAIN MENU LOGIC
if(current_menu == 0)
{
//BUTTON CLICKS
if(button_up_clicked == 1 && main_menu_debounce == 1)
{
main_menu_item_selected = main_menu_item_selected - 1;
if(main_menu_item_selected < 0)
{
main_menu_item_selected = NUM_ITEMS - 1;
}
main_menu_debounce = 0;
}
if(button_down_clicked == 1 && main_menu_debounce == 1)
{
main_menu_item_selected = main_menu_item_selected + 1;
if(main_menu_item_selected >= NUM_ITEMS)
{
main_menu_item_selected = 0;
}
main_menu_debounce = 0;
}
if(button_select_clicked == 1 && main_menu_debounce == 1)
{
if(main_menu_item_selected == 0)
{
reset_loop_cnt = 0;
current_menu = 1;
}
else if(main_menu_item_selected == 1)
{
current_menu = 2;
current_loop_cnt = 0;
current_debounce = 0;
}
else if(main_menu_item_selected == 2)
{
edit_loop_cnt = 0;
current_menu = 3;
}
}
//Main Scroll Debounce
if(button_up_clicked ==0 && button_down_clicked == 0&& button_select_clicked == 0)
{
main_menu_debounce = 1;
}
}
// RESET PAGE LOGIC
if(current_menu == 1)
{
if (reset_loop_cnt < 100) // Put this in due to bug in jumping right back to main menu
{
reset_flg = 0;
reset_debounce = 0;
reset_mm_selected = 0;
}
if (reset_mm_selected == 0)
{
if(button_down_clicked == 0 && button_up_clicked == 0 && button_select_clicked == 0)
{
reset_debounce = 1;
}
if (reset_slot_sel == 1)
{
reset_box_start_pos = 5;
}
else if (reset_slot_sel == 2)
{
reset_box_start_pos = 35;
}
if(button_up_clicked == 1 && reset_debounce == 1)
{
if(reset_slot_sel > 1)
{
reset_slot_sel = reset_slot_sel - 1;
}
reset_debounce = 0;
}
if(button_down_clicked == 1 && reset_debounce ==1)
{
if(reset_slot_sel < reset_total_slots)
{
reset_slot_sel = reset_slot_sel + 1;
}
}
if(button_select_clicked == 1 && reset_debounce ==1)
{
if(reset_slot_sel == 1)
{
reset_flg = 1;
reed_1_usage = 0;
main_menu_debounce = 0;
current_menu = 0;
}
if(reset_slot_sel == 2)
{
reset_flg = 1;
reed_2_usage = 0;
main_menu_debounce = 0;
current_menu = 0;
}
}
}
//Adding main menu selection
if(button_right_clicked == 1 && reset_debounce == 1 && reset_mm_selected == 0)
{
reset_mm_selected = 1;
}
if(reset_mm_selected == 1)
{
if(button_select_clicked == 1 && reset_debounce == 1)
{
main_menu_debounce = 0;
current_menu = 0;
}
if(button_left_clicked == 1 && reset_debounce == 1)
{
reset_mm_selected = 0;
}
}
if(button_up_clicked ==0 && button_down_clicked == 0)
{
reset_debounce = 1;
}
reset_loop_cnt = reset_loop_cnt + 1;
}
// REED EDIT COUNT PAGE!
if(current_menu == 3)
{
if (edit_loop_cnt < 20) // Put this in due to bug in jumping right back to main menu
{
edit_flg = 0;
edit_debounce = 0;
edit_menu_select = 0;
edit_slot_sel = 1;
}
if(edit_menu_select == 0) // EDIT Reed slots
{
if(edit_slot_sel == 1)
{
edit_box_start_pos = 5;
}
else if(edit_slot_sel == 2)
{
edit_box_start_pos = 35;
}
if(button_up_clicked == 1 && edit_debounce == 1)
{
if(edit_slot_sel > 1)
{
edit_slot_sel = edit_slot_sel - 1;
}
edit_debounce = 0;
}
if(button_down_clicked == 1 && edit_debounce == 1)
{
if(edit_slot_sel < edit_total_sel)
{
edit_slot_sel = edit_slot_sel + 1;
}
edit_debounce = 0;
}
if(button_right_clicked == 1 && edit_debounce == 1)
{
edit_menu_select = 1;
edit_debounce = 0;
}
if(button_select_clicked == 1 && edit_debounce == 1)
{
edit_menu_select = 2; // Going to the special edit Menu!
edit_debounce = 0;
}
}
else if(edit_menu_select == 1) // EDIT main menu
{
if(button_select_clicked == 1 && edit_debounce == 1)
{
main_menu_debounce = 0;
current_menu = 0;
}
if(button_left_clicked == 1 && edit_debounce == 1)
{
edit_menu_select = 0;
}
}
else if(edit_menu_select == 2) // Specific selector
{
if(button_right_clicked == 1 && edit_debounce ==1)
{
if(edit_slot_sel == 1)
{
reed_1_usage = reed_1_usage + 1;
}
else if(edit_slot_sel == 2)
{
reed_2_usage = reed_2_usage + 1;
}
edit_debounce = 0;
}
if(button_left_clicked == 1 && edit_debounce ==1)
{
if(edit_slot_sel == 1)
{
reed_1_usage = reed_1_usage - 1;
}
else if(edit_slot_sel == 2)
{
reed_2_usage = reed_2_usage - 1;
}
edit_debounce = 0;
}
if(button_select_clicked == 1 && edit_debounce == 1)
{
main_menu_debounce = 0;
current_menu = 0;
}
//Debounce reset
if(button_up_clicked ==0 && button_down_clicked == 0 && button_select_clicked == 0 && button_left_clicked == 0 && button_right_clicked == 0)
{
edit_debounce = 1;
}
edit_loop_cnt = edit_loop_cnt +1;
}
// Current totals
if(current_menu == 2)
{
//if(current_loop_cnt < 20)
//{
// current_debounce = 0;
//}
if(button_select_clicked == 1 && current_debounce == 1)
{
current_debounce = 0;
main_menu_debounce = 0;
current_menu = 0;
}
if(button_select_clicked == 0)
{
current_debounce = 1;
}
current_loop_cnt = current_loop_cnt + 1;
}
}
u8g.firstPage();
do {
// Main Menu
if(current_menu == 0)
{
//DISPLAY
u8g.drawFrame(10,21.3,108,21.3); // Selection in Center of screen
//Previous Item
u8g.drawStr(15, 15, main_menu_items[main_menu_item_previous]);
//Selected Item
u8g.drawStr(15, 37, main_menu_items[main_menu_item_selected]);
//Next Item
u8g.drawStr(15,59, main_menu_items[main_menu_item_next]);
}
//Reed Reset PAGE
if(current_menu == 1)
{
if(reset_mm_selected == 0)
{
u8g.drawFrame(2.5,reset_box_start_pos,80,21.3); //Drawing Box
}
if(reset_mm_selected == 1)
{
u8g.drawFrame(95,5,32,21.3); //main menu box
}
u8g.drawStr(5, 50, "Slot 1");
u8g.drawStr(5, 20, "Slot 2");
u8g.drawStr(100,20,"Main Menu");
if(reset_flg == 1)
{
u8g.drawStr(5, 50, "Slot Rest");
}
}
//Reed Totals Page
if(current_menu == 2)
{
reed_1 = "Reed 1: " + String(reed_1_usage);
reed_2 = "Reed 2: " + String(reed_2_usage);
u8g.drawStr(5, 20, reed_1.c_str());
u8g.drawStr(5, 50, reed_2.c_str());
//main menu return stuff
u8g.drawFrame(95,5,32,21.3); //main menu box
u8g.drawStr(100,20,"Main Menu");
current_debug = String(current_loop_cnt); //Debugging
u8g.drawStr(100,40,current_debug.c_str()); //Debugging
}
//Reed EDIT SLOT PAGE
if(current_menu == 3)
{
reed_1_edit = "edit R1: " + String(reed_1_usage);
reed_2_edit = "edit R2: " + String(reed_2_usage);
if(edit_menu_select == 0) // Selector on Reeds
{
u8g.drawFrame(2.5,edit_box_start_pos,80,21.3); //Drawing Box
}
else if(edit_menu_select == 1) // Selector on Main Menu
{
u8g.drawFrame(95,5,32,21.3); //main menu box
}
else if (edit_menu_select == 2) // Within Editor
{
edit_edit_reed = "Reed " + String(edit_slot_sel);
u8g.drawStr(50,15,edit_edit_reed.c_str());
u8g.drawStr(15, 40, "-");
u8g.drawStr(115, 40,"+");
if(edit_slot_sel == 1)
{
edit_reed_count_str = String(reed_1_usage);
}
else if(edit_slot_sel == 2)
{
edit_reed_count_str = String(reed_2_usage);
}
u8g.drawStr(50,50,edit_reed_count_str.c_str());
}
if(edit_menu_select == 0 || edit_menu_select == 1)
{
u8g.drawStr(100,20,"Main Menu");
u8g.drawStr(5, 20, reed_1_edit.c_str());
u8g.drawStr(5, 50, reed_2_edit.c_str());
}
}
} while ( u8g.nextPage() );
}