#include <U8g2lib.h>
#include <Bounce2.h>
const int joyXPin = A0; // Pin analogowy X joysticka
const int joyYPin = A1; // Pin analogowy Y joysticka
const int joyButtonPin = 6; // Pin przycisku joysticka
Bounce joyButton = Bounce(); // Obiekt do obsługi debouncingu przycisku
U8X8_SSD1306_128X64_NONAME_HW_I2C display(U8X8_PIN_NONE);
#define MENU_SIZE 5
#define OPTION_SIZE 5
char *menu[MENU_SIZE] = {"Menu 1", "Menu 2", "Menu 3", "Menu 4", "Menu 5"};
char *option[OPTION_SIZE] = {"Option 1", "Option 2", "Option 3", "Option 4", "Option 5"};
int cursorVert = 1;
int cursorHor = 1;
void setup() {
//Serial.begin(9600);
pinMode(joyButtonPin, INPUT_PULLUP);
joyButton.attach(joyButtonPin);
joyButton.interval(25);
display.begin();
display.setPowerSave(0);
// Wyświetlenie napisu "Philips" przez 2 sekundy
display.setFont(u8x8_font_chroma48medium8_r); // Przykładowa większa czcionka
display.clearDisplay();
display.setCursor(5, 3); // Ustawienie kursora w środku ekranu
display.print("Philips");
delay(2000); // Czekaj 2 sekundy
display.clearDisplay(); // Wyczyść ekran
display.setFont(u8x8_font_pxplusibmcgathin_f); // Powrót do poprzedniej czcionki
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
delay(1000);
}
void loop() {
joyButton.update();
// Odczytywanie wartości z joysticka
int joyXValue = analogRead(joyXPin);
int joyYValue = analogRead(joyYPin);
// Obsługa ruchu kursorem na podstawie wartości z joysticka
if (joyXValue >= 900) {
// Serial.println("gora");
cursorVert++;
if (cursorVert > MENU_SIZE) cursorVert = 1;
delay(100);
cursorHor=1;
showMenu();
} else if (joyXValue <= 100) {
// Serial.println("dol");
cursorVert--;
if (cursorVert <= 0) cursorVert = MENU_SIZE;
delay(100);
cursorHor=1;
showMenu();
}
// Obsługa ruchu kursorem na podstawie wartości z joysticka
if (joyYValue <= 100) {
//Serial.println("prawo");
cursorHor++;
if (cursorHor > OPTION_SIZE) cursorHor = 1;
delay(300);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
} else if (joyYValue >= 900) {
//Serial.println("lewo");
cursorHor--;
if (cursorHor <= 0) cursorHor = OPTION_SIZE;
delay(300);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
}
}
void showMenu() {
switch(cursorVert)
{
case 1:
display.clearDisplay();
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
break;
case 2:
display.clearDisplay();
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
break;
case 3:
display.clearDisplay();
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
break;
case 4:
display.clearDisplay();
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
break;
case 5:
display.clearDisplay();
display.setCursor(0, 0);
display.print(menu[cursorVert-1]);
display.setCursor(7, 0);
display.print(option[cursorHor-1]);
break;
default:
Serial.println("Nie ma takiego case'a");
}
}