//Librerías
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//Inicialización de la pantalla OLED
#define ANCHO 128
#define ALTO 64
#define OLED_RESET 4
Adafruit_SSD1306 oled(ANCHO, ALTO, &Wire, OLED_RESET);
//Pines
#define JSV_pin 36 //Pin del eje vertical del joystick
#define JSH_pin 39 //Pin del eje horizontal del joystick
#define JSS_pin 34 //Pin pulsador del joystick
int Contador_desplazamiento = 0; //Contador de desplazamiento en el menú
int ID = 0; //Variable global de ID de menú
void Menu (String lista[], int n, int JS_Vertical) {
oled.setCursor(0, 5);
for (int i = Contador_desplazamiento; i < n; i++) {
if (i == Contador_desplazamiento) {
oled.setTextSize(2);
} else {
oled.setTextSize(1);
}
oled.println(lista[i]);
}
if (JS_Vertical == -1 && Contador_desplazamiento < n - 1) {
Contador_desplazamiento++;
} else if (JS_Vertical == 1 && Contador_desplazamiento > 0) {
Contador_desplazamiento--;
}
}
void setup() {
Serial.begin(9600); //Inicialización de la comunicación Serial
Wire.begin(); //Inicialización de la comunicación con la pantalla OLED
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Inicialización de la pantalla OLED
pinMode(JSS_pin, INPUT); //Pin del pulsador del joystick como entrada
}
void loop() {
String Menu_Principal[] = {"Monitoreo", "Salidas", "Reloj", "Memoria"};
String Menu_Monitoreo[] = {"Luz", "Temperatura", "Humedad", "Sonido", "Movimiento"};
String Menu_Salidas[] = {"Servo", "Rele", "Motor"};
String Menu_Servo[] = {"+10", "-10"};
String Menu_Rele[] = {"ON", "OFF"};
String Menu_Motor[] = {"ON", "OFF", "Giro R", "Giro L"};
int JS_Vertical = map(analogRead(JSV_pin), 0, 4095, -1, 1);
int JS_Horizontal = map(analogRead(JSH_pin), 0, 4095, -1, 1);
int JS_Switch = digitalRead(JSS_pin);
oled.clearDisplay(); //Limpia la pantalla
oled.setTextColor(WHITE); //Color de la pantalla monocromática
if (JS_Switch == 1 && ID%10 == 0) {
if (ID == 0) {
ID = 10*(Contador_desplazamiento + 1);
} else {
ID = ID + Contador_desplazamiento + 1;
}
Contador_desplazamiento = 0;
}
if (JS_Horizontal == 1) {
if (ID%10 == 0) {
ID = 0;
} else {
ID = ID - (ID%10);
}
Contador_desplazamiento = 0;
}
if (ID == 0) {
Menu(Menu_Principal, 4, JS_Vertical);
} else if (ID == 10) {
Menu(Menu_Monitoreo, 5, JS_Vertical);
} else if (ID == 20) {
Menu(Menu_Salidas, 3, JS_Vertical);
} else if (ID == 21) {
Menu(Menu_Servo, 2, JS_Vertical);
} else if (ID == 22) {
Menu(Menu_Rele, 2, JS_Vertical);
} else if (ID == 23) {
Menu(Menu_Motor, 4, JS_Vertical);
}
Serial.println(JS_Vertical);
Serial.println(JS_Switch);
oled.display();
delay(200);
}