#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <XPT2046_Touchscreen.h>
#include <WiFi.h>
#define TFT_CS 5
#define TFT_RST -1
#define TFT_DC 4
#define TOUCH_CS 13
#define ILI9341_MINPRESSURE 100
#define ILI9341_MAXPRESSURE 1000
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
XPT2046_Touchscreen ts(TOUCH_CS);
void setup() {
Serial.begin(115200);
tft.begin();
ts.begin();
// Mostrar el menú de selección
showMenu();
}
void showMenu() {
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
tft.println("Menu:");
tft.println("1. Volumen");
tft.println("2. WiFi");
tft.println("3. Reset");
tft.println("4. Configuracion");
tft.println("Seleccione una opcion:");
}
/*Este código escanea las redes WiFi disponibles y muestra sus SSID en el display ILI9341. Luego,
espera a que el usuario toque la pantalla para seleccionar una red y se conecta a ella. Asegúrate
de adaptar el código según las características de tu pantalla táctil y las necesidades de tu proyecto.
Además, no olvides manejar los casos de error y las situaciones de desconexión de la red WiFi.
*/
void showAvailableNetworks() {
int numNetworks = WiFi.scanNetworks();
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
if (numNetworks == 0) {
tft.println("No redes WiFi disponibles.");
} else {
tft.println("Redes WiFi disponibles:");
for (int i = 0; i < numNetworks; i++) {
tft.print(i + 1);
tft.print(": ");
tft.println(WiFi.SSID(i));
}
tft.println("Seleccione una red:");
tft.drawRect(0, 200, 160, 40, ILI9341_WHITE);
tft.setCursor(10, 210);
tft.println("Conectar");
}
}
void connectToWiFi() {
int selectedNetwork = -1;
int numNetworks = WiFi.scanNetworks();
TS_Point p;
do {
p = ts.getPoint();
int x = p.x;
int y = p.y;
if (p.z > ILI9341_MINPRESSURE && p.z < ILI9341_MAXPRESSURE) {
if (x > 0 && x < 160 && y > 0 && y < 240) {
selectedNetwork = y / 20; // Calcula el índice de la red seleccionada
}
}
} while (selectedNetwork < 0 || selectedNetwork >= numNetworks);
String ssid = WiFi.SSID(selectedNetwork);
Serial.print("Conectando a ");
Serial.println(ssid);
// Aquí deberías agregar la lógica para conectar a la red WiFi seleccionada
}
void loop() {
TS_Point p = ts.getPoint();
int x = p.x;
int y = p.y;
if (p.z > ILI9341_MINPRESSURE && p.z < ILI9341_MAXPRESSURE) {
// Se ha detectado un toque en la pantalla
if (x > 0 && x < 160 && y > 40 && y < 60) {
// Opción 1 seleccionada (Volumen)
// Aquí puedes poner el código para manejar la selección de Volumen
} else if (x > 0 && x < 160 && y > 80 && y < 100) {
// Opción 2 seleccionada (WiFi)
connectToWiFi(); // Esta función deberá definirse para conectarse a la red WiFi
} else if (x > 0 && x < 160 && y > 120 && y < 140) {
// Opción 3 seleccionada (Reset)
ESP.restart(); // Reiniciar el ESP32
} else if (x > 0 && x < 160 && y > 160 && y < 180) {
// Opción 4 seleccionada (Configuración)
// Aquí puedes poner el código para manejar la selección de Configuración
}
}
}