#include "U8g2lib.h"
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 12, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Software SPI
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // initialization for the used OLED display
//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, 10, 9, 8, 11); //Enable, RW, RS, RESET (langsung di LCD ST7920 tidak bisa di wokwi)
//U8GLIB_ST7920_128X64 u8g(10,9,8, U8G_PIN_NONE);
//U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
#define BUTTON_UP_PIN 12 // PIN for UP button / Right Butotn
#define BUTTON_SELECT_PIN 8 // PIN for SELECT button
#define BUTTON_DOWN_PIN 4 // PIN for DOWN button / Left Button
#define BUTTON_MENU 2 // PIN for DOWN button / Left Button
int button_up_clicked = 0; // only perform action when button is clicked, and wait until another press
int button_select_clicked = 0; // same as above
int button_down_clicked = 0; // same as above
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); // [full framebuffer, size = 1024 bytes]
const int NUM_ITEMS = 4; // Jumlah Menu
const int MAX_ITEM_LENGTH = 20; // Batas jumlah karakter nama menu
int current_screen = 0; // Layar yang dipilih (Layar Menu/Layar Info)
int item_selected = 0; // Menu yang diplih
int current_page = 0;
char menu_items[NUM_ITEMS][MAX_ITEM_LENGTH] = {
{"1. INFO SSID"},
{"2. CONNECT SSID"},
{"3. KIRIM HP"},
{"4. SIMPAN SD CARD"}};
void frame1() // Frame Kotak
{
u8g2.drawFrame(3, 3, 120, 13);
}
void frame2()
{
u8g2.drawFrame(3, 18, 120, 13);
}
void frame3()
{
u8g2.drawFrame(3, 33, 120, 13);
}
void frame4()
{
u8g2.drawFrame(3, 48, 120, 13);
}
void displayNPKC()
{
int nf = 255;
int pf = 255;
int ptf = 255;
int ecf = 100;
String infoNitro;
String infoPhos;
String infoPotas;
if (nf < 50)
{
infoNitro = "K";
}
else if (nf >= 50 && nf <= 200)
{
infoNitro = "I";
}
else
{
infoNitro = "B";
}
if (pf < 4)
{
infoPhos = "K";
}
else if (pf >= 4 && pf <= 14)
{
infoPhos = "I";
}
else
{
infoPhos = "B";
}
if (ptf < 50)
{
infoPotas = "K";
}
else if (ptf >= 50 && ptf <= 200)
{
infoPotas = "I";
}
else
{
infoPotas = "B";
}
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_5x7_tr); // Menggunakan jenis font 8x13 dengan bold rendering
u8g2.drawStr(3, 10, "Nitrogen: ");
u8g2.drawStr(3, 19, "Phosphorus: ");
u8g2.drawStr(3, 28, "Potasium(K): ");
u8g2.drawStr(3, 37, "EC: ");
u8g2.setCursor(65, 10);
u8g2.print(nf);
u8g2.setCursor(65, 19);
u8g2.print(pf);
u8g2.setCursor(65, 28);
u8g2.print(ptf);
u8g2.setCursor(55, 37);
u8g2.print(ecf);
u8g2.drawStr(85, 10, "ppm");
u8g2.drawStr(85, 19, "ppm");
u8g2.drawStr(85, 28, "ppm");
u8g2.drawStr(80, 37, "1/(Ohm.m)");
u8g2.drawRFrame(10, 45, 106, 13, 5);
u8g2.drawStr(16, 54, "N: ");
u8g2.setCursor(26, 54);
u8g2.print(infoNitro);
u8g2.drawStr(46, 54, "P: ");
u8g2.setCursor(66, 54);
u8g2.print(infoPhos);
u8g2.drawStr(86, 54, "K: ");
u8g2.setCursor(106, 54);
u8g2.print(infoPotas);
} while (u8g2.nextPage());
}
void displayHumiTemp()
{
int suhu = 18;
int humid = 90;
int ph = 14;
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_6x13_tr); // Menggunakan jenis font 8x13 dengan bold rendering
u8g2.drawStr(18, 20, "Suhu: ");
u8g2.drawStr(18, 34, "Kelembaban: ");
u8g2.drawStr(18, 48, "pH: ");
u8g2.setCursor(85, 20);
u8g2.print(suhu);
u8g2.setCursor(85, 34);
u8g2.print(humid);
u8g2.setCursor(85, 48);
u8g2.print(ph);
u8g2.drawStr(100, 20, "C");
u8g2.drawStr(100, 34, "%");
} while (u8g2.nextPage());
}
void (*frames[])() = {frame1, frame2, frame3, frame4}; // Array Frame
void infoSSID() // Fungsi Info SSID
{
u8g2.setFont(u8g_font_6x13Br);
u8g2.drawStr(7, 16, "Info SSID Perangkat");
u8g2.setFont(u8g_font_6x12r);
u8g2.drawStr(5, 37, "SSID: WIFIKU ");
u8g2.setFont(u8g_font_6x12r);
u8g2.drawStr(5, 53, "PASSWORD: IYAWIFIKU ");
}
void connectSSID() // Fungsi menghubungkan SSID
{
u8g2.setFont(u8g_font_6x13Br);
u8g2.drawStr(7, 37, "Connecting SSID");
}
void kirimHP() // Fungsi mengirimkan data ke HP
{
u8g2.setFont(u8g_font_6x13Br);
u8g2.drawStr(7, 37, "Mengirim Data");
}
void saveSD() // Fungsi menyimpan data ke SD Card
{
u8g2.setFont(u8g_font_6x13Br);
u8g2.drawStr(7, 37, "Menyimpan Data");
}
void (*selectMenu[])() = {displayNPKC, displayHumiTemp, menu};
void setup()
{
u8g2.setColorIndex(1); // set the color to white
u8g2.begin();
u8g2.setBitmapMode(1);
u8g2.setContrast(30); // Mengatur Kontras
pinMode(BUTTON_UP_PIN, INPUT_PULLUP); // up button
pinMode(BUTTON_SELECT_PIN, INPUT_PULLUP); // select button
pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP); // down button
pinMode(BUTTON_MENU, INPUT_PULLUP); // down button
attachInterrupt(digitalPinToInterrupt(BUTTON_MENU), menuHandle, FALLING);
}
void loop()
{
if ((digitalRead(BUTTON_DOWN_PIN) == LOW) && (button_down_clicked == 0))
{
current_page += 1;
button_down_clicked = 1;
if (current_page > 1)
{
current_page = 0;
}
}
if ((digitalRead(BUTTON_UP_PIN) == LOW) && (button_up_clicked == 0))
{
current_page -= 1;
button_up_clicked = 1;
if (current_page < 0)
{
current_page = 1;
}
}
if ((digitalRead(BUTTON_DOWN_PIN) == HIGH) && (button_down_clicked == 1))
{ // unclick
button_down_clicked = 0;
}
if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (button_up_clicked == 1))
{ // unclick
button_up_clicked = 0;
}
if (current_page == 0){
displayNPKC();
} else if (current_page == 1){
displayHumiTemp();
} else{
if ((digitalRead(BUTTON_MENU) == LOW))
{
current_page = 0;
}
menu();
}
}
void menuHandle(){
current_page == 2;
}
void menu()
{
if (current_screen == 0)
{
if ((digitalRead(BUTTON_DOWN_PIN) == LOW) && (button_down_clicked == 0))
{
item_selected += 1;
button_down_clicked = 1;
if (item_selected > 3)
{
item_selected = 0;
}
}
if ((digitalRead(BUTTON_UP_PIN) == LOW) && (button_up_clicked == 0))
{
item_selected -= 1;
button_up_clicked = 1;
if (item_selected < 0)
{
item_selected = 3;
}
}
if ((digitalRead(BUTTON_DOWN_PIN) == HIGH) && (button_down_clicked == 1))
{ // unclick
button_down_clicked = 0;
}
if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (button_up_clicked == 1))
{ // unclick
button_up_clicked = 0;
}
}
if ((digitalRead(BUTTON_SELECT_PIN) == LOW) && (button_select_clicked == 0))
{ // select button clicked, jump between screens
button_select_clicked = 1; // set button to clicked to only perform the action once
if (current_screen == 0)
{
current_screen = 1;
} // menu items screen --> screenshots screen
else
{
current_screen = 0;
} // qr codes screen --> menu items screen
}
if ((digitalRead(BUTTON_SELECT_PIN) == HIGH) && (button_select_clicked == 1))
{ // unclick
button_select_clicked = 0;
}
u8g2.firstPage();
do
{
if (current_screen == 0)
{
frames[item_selected]();
u8g2.setFont(u8g2_font_5x7_tr);
u8g2.drawStr(5, 12, menu_items[0]);
u8g2.setFont(u8g2_font_5x7_tr);
u8g2.drawStr(5, 27, menu_items[1]);
u8g2.setFont(u8g2_font_5x7_tr);
u8g2.drawStr(5, 42, menu_items[2]);
u8g2.setFont(u8g2_font_5x7_tr);
u8g2.drawStr(5, 57, menu_items[3]);
}
else if (current_screen == 1)
{ // SCREENSHOTS SCREEN
if (item_selected == 0)
{
infoSSID();
}
else if (item_selected == 1)
{
connectSSID();
}
else if (item_selected == 2)
{
//displayHumiTemp();
kirimHP();
}
else
{
saveSD();
//displayNPKC();
}
}
} while (u8g2.nextPage());
}