#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char *SetupItems[] = {">Back","PV", "Battery", "Load",
"Infor", "Config"};
const char *NoiDungMenu1[] = {">Back", "Set","Calib"};
#define UpPin 5
#define DownPin 6
#define SetPin 7
boolean statusUp = false;
boolean statusDown = false;
boolean statusEnter = false;
boolean PreviousUp = false;
boolean PreviousEnter = false;
boolean PreviousDown = false;
int PressTime,PressTime1,PressTime2, PressTime3;
int select=0;
byte MenuLayer=1; //0: HomeScreen; 1: Menu Tổng; 2: Menu con1
byte MenuItems1=0; // Di chuyển con trỏ trong menu
byte ChonMenuItems, ChonMenuItems1;
boolean UP = false;
boolean ENTER= false;
boolean DOWN = false;
boolean back=0;
byte MenuItems = 0;
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
pinMode(UpPin, INPUT_PULLUP);
pinMode(DownPin, INPUT_PULLUP);
pinMode(SetPin, INPUT_PULLUP);
Serial.begin(9600);
}
void HamUp() {
if (millis()-PressTime3 > 30)
{
if (statusUp != PreviousUp)
{
if (statusUp == 0)
{
UP = true;
}
}
PressTime3 = millis();
PreviousUp = statusUp;
}
}
void HamOk()
{
if (millis()-PressTime > 30)
{
if (statusEnter != PreviousEnter)
{
if (statusEnter == 0)
{
ENTER = true;
}
}
PreviousEnter = statusEnter;
PressTime = millis();
}
}
void HamDown()
{
if (millis()-PressTime1 > 30)
{
if (statusDown != PreviousDown)
{
if (statusDown == 0)
{
DOWN = true;
}
}
PressTime1 = millis();
PreviousDown = statusDown;
}
}
void HienThiMenu(int ViTriChon)
{
int ViTriChonTruoc;
if (ViTriChon<4)
{
if (ViTriChon==0)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,0);
display.print(SetupItems[0]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print(SetupItems[0]);
display.display();
}
if (ViTriChon==1)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,16);
display.print(SetupItems[1]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,16);
display.print(SetupItems[1]);
display.display();
}
if (ViTriChon==2)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,32);
display.print(SetupItems[2]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,32);
display.print(SetupItems[2]);
display.display();
}
if (ViTriChon==3)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,48);
display.print(SetupItems[3]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,48);
display.print(SetupItems[3]);
display.display();
}
// display.setTextSize(2);
// display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
// display.setCursor(0,16);
// display.print(SetupItems[MenuItems]);
// display.setCursor(0,32);
// display.print(SetupItems[MenuItems]);
// display.setCursor(0,48);
// display.print(SetupItems[MenuItems]);
// display.display();
}
else if (ViTriChon>3)
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print(SetupItems[MenuItems-3]);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,16);
display.print(SetupItems[MenuItems-2]);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,32);
display.print(SetupItems[MenuItems-1]);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,48);
display.print(SetupItems[MenuItems]);
display.display();
}
}
void MenuConCap1() //
{
switch (MenuItems)
{
case 0:
//BACK
break;
case 1:
HienThiMenu1();
break;
case 2:
//MENU 2
break;
case 3:
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(5,0);
display.print("MENU 3");
display.setCursor(0,16);
display.print("NOI DUNG MENU 3.");
display.display();
break;
case 4:
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(5,0);
display.print("MENU 4");
display.setCursor(0,16);
display.print("NOI DUNG MENU 4.");
display.display();
break;
case 5:
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(5,0);
display.print("MENU 5");
display.setCursor(0,16);
display.print("NOI DUNG MENU 5.");
display.display();
break;
}
}
void HienThiMenu1()
{
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(20,0);
display.print(SetupItems[MenuItems]);// In Menu vừa chọn vào
if (MenuItems1==0)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,16);
display.print(NoiDungMenu1[0]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,16);
display.print(NoiDungMenu1[0]);
display.display();
}
if (MenuItems1==1)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,32);
display.print(NoiDungMenu1[1]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,32);
display.print(NoiDungMenu1[1]);
display.display();
}
if (MenuItems1==2)
{
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
display.setCursor(0,48);
display.print(NoiDungMenu1[2]);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,48);
display.print(NoiDungMenu1[2]);
display.display();
}
}
void loop()
{
statusUp = digitalRead(UpPin);
statusDown = digitalRead(DownPin);
statusEnter = digitalRead(SetPin);
HamUp();
HamDown();
HamOk();
if(UP)
{
UP = false;
if(MenuLayer==1)
{
MenuItems ++;
back=0;
}
if(MenuLayer==2)
{
MenuItems1 ++;
}
display.clearDisplay();
}
if(DOWN)
{
DOWN = false;
if(MenuLayer==1)
{
MenuItems --;
back=0;
}
if(MenuLayer==2)
{
MenuItems1 --;
}
display.clearDisplay();
}
MenuItems = constrain(MenuItems, 0, sizeof(SetupItems));
if(ENTER)
{
ENTER = false;
if(MenuLayer==2 && MenuItems1==0)
{
MenuLayer=1;
back=1;
HienThiMenu(MenuItems);
}
if(MenuLayer==1 && back==0)
{
MenuLayer=2;
}
display.clearDisplay();
}
//Menu Page//
if(MenuLayer==1)
{
HienThiMenu(MenuItems);
}
if(MenuLayer==2)
{
MenuConCap1();
}
// display.setTextSize(2);
// display.setTextColor(SSD1306_BLACK,SSD1306_WHITE);
// display.setCursor(0,0);
// display.print(SetupItems[MenuItems]);
// display.setCursor(0,16);
// display.print(SetupItems[MenuItems]);
// display.setCursor(0,32);
// display.print(SetupItems[MenuItems]);
// display.setCursor(0,48);
// display.print(SetupItems[MenuItems]);
// display.display();
// delay(100);
// display.clearDisplay();
//Serial.print(MenuLayer);
}