#include <U8g2lib.h>
#include "bitmaps.h"
#define FontS u8g2_font_helvB12_tr
#define FontL u8g2_font_inb16_mr
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, 5, 4); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7
enum menu_states{
MAIN,
STATS,
SPEED,
SETTINGS,
};
menu_states active_menu = MAIN;
void setup() { // put your setup code here, to run once:
u8g2.begin();
Serial.begin(9600);
u8g2.clearBuffer();
u8g2.setDrawColor(1);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
}
const char* combStr(String text, float val){
if(floor(val) == val){
text = text + String(int(val));
} else {
text = text + String(val);
}
return text.c_str();
}
menu_states selection = STATS;
void mainMenu(){
u8g2.drawXBMP( 0, 16, 128, 48, main_menu_xbm);
switch(selection) {
case STATS:
u8g2.drawFrame(4,22,40,15);
if (digitalRead(3) == LOW){
active_menu = STATS;
while(digitalRead(3) == LOW){}
}
break;
case SPEED:
u8g2.drawFrame(4,45,40,15);
if (digitalRead(3) == LOW){
active_menu = SPEED;
while(digitalRead(3) == LOW){}
}
break;
case SETTINGS:
u8g2.drawFrame(83,33,40,16);
if (digitalRead(3) == LOW){
active_menu = SETTINGS;
while(digitalRead(3) == LOW){}
}
break;
}
if (digitalRead(2) == LOW){
if (selection == STATS){
selection = SPEED;
} else if (selection == SPEED){
selection = SETTINGS;
} else if (selection == SETTINGS){
selection = STATS;
}
while (digitalRead(2) == LOW){}
}
}
int clip = 30;
int kills = 6;
int deaths = 2;
int tot = 128;
void statMenu(){
u8g2.setFont(FontS);
u8g2.drawXBMP( 3, 0, 35, 11, gun_icon_xbm);
u8g2.drawStr(2, 32, combStr("Clip: ", clip));
u8g2.drawStr(60, 32, combStr("Deaths: ", deaths));
u8g2.drawStr(2, 52, combStr("Kills: ", kills));
u8g2.drawStr(60, 52, combStr("Total: ", tot));
if (digitalRead(2) == LOW){
active_menu = MAIN;
while(digitalRead(2) == LOW){}
}
if (digitalRead(3) == LOW and clip){
clip -= 1;
while(digitalRead(3) == LOW){}
} else if (digitalRead(4) == LOW){
clip = 30;
}
}
void clipMenu(){
u8g2.setFont(FontL);
u8g2.drawXBMP( 3, 0, 35, 11, gun_icon_xbm);
u8g2.drawStr(2, 42, combStr("Clip: ", clip));
if (digitalRead(2) == LOW){
active_menu = MAIN;
while(digitalRead(2) == LOW){}
}
if (digitalRead(3) == LOW and clip){
clip -= 1;
while(digitalRead(3) == LOW){}
} else if (digitalRead(4) == LOW){
clip = 30;
}
}
float projectileSpeed = 260.25;
void speedMenu(){
u8g2.drawXBMP( 0, 0, 35, 11, speed_icon_xbm);
u8g2.drawStr(2, 32, combStr("FPS: ", projectileSpeed));
if (digitalRead(2) == LOW){
active_menu = MAIN;
while(digitalRead(2) == LOW){}
}
}
void settingsMenu(){
u8g2.drawStr(2, 36, "In Development");
if (digitalRead(2) == LOW){
active_menu = MAIN;
while(digitalRead(2) == LOW){}
}
}
void loop() { // put your main code here, to run repeatedly:
u8g2.firstPage();
do
{
switch(active_menu) {
case MAIN:
mainMenu();
break;
case STATS:
statMenu();
break;
case SPEED:
speedMenu();
break;
case SETTINGS:
clipMenu();
break;
}
}
while ( u8g2.nextPage() );
}