#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Bounce2.h>
#include <Mouse.h>
#include <HID-Project.h>
#define TFT_CS 5
#define TFT_DC 4
#define TFT_RST -1 // Reset non utilizzato su ESP32
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
const int NUM_ROWS = 5;
const int NUM_COLS = 3;
const int pinTasti[NUM_ROWS][NUM_COLS] = {
{2, 3, 4},
{5, 6, 7},
{8, 9, 10},
{11, 12, 13},
{14, 15, 16}
};
const int pinPotenziometri[3] = {34, 35, 32}; // Utilizza i numeri dei pin analogici corrispondenti
int potVal[3];
int volume;
Bounce debouncer[NUM_ROWS][NUM_COLS];
bool inMainMenu = true; // Dichiarazione della variabile e inizializzazione a "true"
void displayMainMenu() {
tft.fillScreen(ILI9341_BLACK);
// Disegna le icone a forma di quadrato
int iconSize = 60;
int startX = 10;
int startY = 10;
for (int i = 0; i < 4; i++) {
tft.drawRect(startX, startY, iconSize, iconSize, ILI9341_WHITE);
startX += iconSize + 20;
}
// Puoi aggiungere qui eventuali etichette o testo per ciascuna icona
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
tft.setCursor(10, 100);
tft.print("Volume: ");
tft.println(volume);
// Puoi aggiungere qui eventuali informazioni aggiuntive nel menu principale
}
void setup() {
Serial.begin(115200);
tft.begin();
displayMainMenu(); // Mostra il menu principale all'accensione
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
pinMode(pinTasti[i][j], INPUT_PULLUP);
debouncer[i][j] = Bounce();
debouncer[i][j].attach(pinTasti[i][j]);
debouncer[i][j].interval(5);
}
}
for (int i = 0; i < 3; i++) {
pinMode(pinPotenziometri[i], INPUT);
}
Mouse.begin();
}
void loop() {
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
debouncer[i][j].update();
if (debouncer[i][j].fell()) {
// Azione quando il tasto è premuto
Serial.print("Tasto (");
Serial.print(i + 1);
Serial.print(",");
Serial.print(j + 1);
Serial.println(") premuto");
// Puoi aggiungere qui le azioni desiderate per i tasti
inMainMenu = !inMainMenu; // Cambia il valore di inMainMenu
if (inMainMenu) {
displayMainMenu(); // Torna al menu principale
}
else {
// Esempio: Emula il pulsante multimediale per aumentare il volume
Consumer.write(MEDIA_VOLUME_UP);
}
}
}
}
for (int i = 0; i < 3; i++) {
potVal[i] = analogRead(pinPotenziometri[i]);
// Normalizza i valori analogici da 0 a 1023 a un intervallo da 1 a 100
volume = map(potVal[i], 0, 1023, 1, 100);
// Aggiorna il display con le informazioni dei potenziometri solo se non si trova nel menu principale
if (!inMainMenu) {
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
tft.setCursor(10, 10);
tft.print("Volume: ");
tft.println(volume);
}
}
delay(500); // Opzionale: aggiungi una piccola pausa per una migliore leggibilità
}