//Librerias
#include <Adafruit_SH110X.h>
#include <Wire.h>
#include <DHT.h>
//variables locales
const byte LED = 27;
const int POTE = 14;
const short SENSOR_H = 25;
bool corte = true;
bool bandera = false;
int opcion = Serial.parseInt();
//no hay que declarar los pines 21 y 22 porque estan ya declarados en la libreria
// se declara un objeto display Adafruit_SH1106G
// (128,64) es la resolucion del display
// el & es para decirle que se manda la direccion del objeto y no el objeto en si
// el -1 es porque no tenemos un reset
Adafruit_SH1106G LCD = Adafruit_SH1106G(128, 64, &Wire, -1);
DHT sensorH (SENSOR_H, DHT22);
// Set up ( esto se corre automaticamente cuando inicia)
void setup()
{
Serial.begin(115200);
pinMode(LED, OUTPUT);
// las entradas no hace falta aclararlas porque estan por defecto
pinMode(POTE, INPUT);
sensorH.begin();
LCD.begin(0x3c);
LCD.setTextSize(1.3);
mostrarMenuPrincipal(0);
}
// este es el main del programa
void loop() {
while(true)
{if (Serial.available()) {
int opcion = Serial.parseInt();
Serial.read(); // Leer el carácter de nueva línea
mostrarMenuPrincipal(opcion);
}}
}
void limpiarPantalla()
{
LCD.clearDisplay();
LCD.setCursor(0, 0);
LCD.setTextColor(SH110X_WHITE);
}
void mostrarPantalla(String texto)
{
limpiarPantalla();
LCD.println(texto);
LCD.display();
}
void mostrarMenuPrincipal(int opcion)
{
limpiarPantalla();
LCD.println("Menu de opciones:");
LCD.println("1.Encender/Apagar LED");
LCD.println("2.Sensor de Humedad/ Temperatura");
LCD.println("3.Potenciometro");
LCD.display();
switch (opcion)
{
corte = true;
case 1:
while (corte) {
if (Serial.available())
{
int opcionLed = Serial.parseInt();
Serial.read();
switch (opcionLed)
{
case 1:
{
delay(500);
digitalWrite(LED, HIGH);
mostrarPantalla("LED Encendido");
break;
}
case 2:
{
mostrarPantalla("Apagando LED");
delay(500);
digitalWrite(LED, LOW);
mostrarPantalla("LED Apagado");
break;
}
case 3:
corte = false;
break;
}
LCD.println("1.Encender LED");
LCD.println("2.Apagar LED");
LCD.println("3.Volver al menu anterior");
LCD.display();
}
}
case 2:
{
int valorP = analogRead(POTE);
LCD.print("El valor del potenciometro es:"); LCD.print(valorP); LCD.print("v");
break;
}
case 3:
{
float temperatura = sensorH.readTemperature();
float humedad = sensorH.readHumidity();
LCD.print("El valor de la temperatura es:"); LCD.print(temperatura); LCD.print("°");
LCD.print("El valor de la humedad es:"); LCD.print(humedad);
break;
}
default:
LCD.print("CHAU");
break;
}
}