#include <ESP32Servo.h>
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 2
#define TFT_CS 15
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define buttonPin 4
#define buttonPin2 33
#define pinLedSup 27
#define pinLedInf 26
#define servoPin 21
bool Estado1 = false;
bool Estado2 = false;
bool enable = true;
bool enable2 = true;
int num = 0;
Servo servo;
void setup() {
Serial.begin(115200);
pinMode(buttonPin,INPUT);
pinMode(buttonPin2,INPUT);
pinMode(pinLedSup, OUTPUT);
pinMode(pinLedInf, OUTPUT);
servo.attach(servoPin);
tft.begin(); // inicializa pantalla
tft.setRotation(0); // establece posicion vertical con pines hacia abajo
tft.fillScreen(ILI9341_BLACK); // fondo de pantalla de color negro
tft.fillRect(0, 0, 240, 30, ILI9341_NAVY); // rectangulo azul naval a modo de fondo de titulo
tft.setTextColor(ILI9341_WHITE); // color de texto en blanco
tft.setTextSize(2); // escala de texto en 2
tft.setCursor(25,6); // ubica cursor
tft.print("Panel de control"); // imprime texto
tft.setCursor(24, 50);
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(2);
tft.println("GRADOS DEL SERVO:");
tft.setCursor(50, 150);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(8);
tft.println(String(0));
}
void loop() {
Estado1 = digitalRead(buttonPin);
Estado2 = digitalRead(buttonPin2);
if (!Estado1 && enable){
enable = false;
//=== Acción para hacerla 1 sola vez ===
if (num == 180){
Serial.println("Límite de 180 alcanzado 😈😈");
}else{
num += 45;
servo.write(num);
Serial.println("El servo se encuentra en " + String(num) + " grados.");
}
//======================================
}
if (Estado1){
enable = true;
delay(100);
}
if (!Estado2 && enable2){
enable2 = false;
//=== Acción para hacerla 1 sola vez ===
if (num == 0){
Serial.println("Límite de 0 alcanzado 🔥🔥");
}else{
num -= 45;
servo.write(num);
Serial.println("El servo se encuentra en " + String(num) + " grados.");
}
//======================================
}
if (Estado2){
enable2 = (Estado2) ? true : enable2;
delay(100);
}
if(num == 180){
digitalWrite(pinLedSup, HIGH);
}else if(num == 0){
digitalWrite(pinLedInf, HIGH);
} else{
digitalWrite(pinLedInf, LOW);
digitalWrite(pinLedSup, LOW);
}
imprimirPantalla(num);
}
void imprimirPantalla(int a){
tft.fillRect(50, 150, 240, 180, ILI9341_BLACK); // rectangulo azul naval a modo de fondo de titulo
tft.setCursor(50, 150);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(8);
tft.println(String(a));
}
/*
1.- Identificar las conexiones de los pines.
2.- Crear una variable que controle el estado del servo, considerando sus limites
3,. Realizar la lectura de los botones
4.- Con los botones, modificar la variable del estado del servo, acorde a las especificaciones
5.- Implementar lógica para que el mensaje se imprima una sola vez.
6.- Con la misma lógica del mensaje una sola vez, encedner los leds.
*/