#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27);
int Valor_ADC;
float Voltaje; // Variable para almacenar el cálculo con decimales
void setup() {
lcd.begin(20, 4);
delay(200);
lcd.setBacklight(255);
// Etiquetas fijas
lcd.setCursor(0, 0);
lcd.print("ADC: Voltios");
lcd.setCursor(0, 1);
lcd.print("DEC:");
lcd.setCursor(0, 2);
lcd.print("HEX: 0x");
lcd.setCursor(0, 3);
lcd.print("BIN: 0b");
}
void loop() {
Valor_ADC = analogRead(36); // GPIO 36 (VP) Lee el valor análogo: 0V a 3.3V
// Ecuación para convertir a voltaje
// Usamos 4095.0 (con el .0) para que el ESP32 entienda que es una operación decimal
Voltaje = (Valor_ADC * 3.3) / 4095.0;
// 0. Mostrar Voltaje DC (Línea 0)
lcd.setCursor(7, 0);
lcd.print(Voltaje, 2); // Imprime el voltaje con 2 decimales
// 1. Mostrar Decimal (Línea 1)
lcd.setCursor(7, 1);
lcd.print(Valor_ADC);
lcd.print(" "); // Limpia dígitos anteriores
// 2. Mostrar Hexadecimal (Línea 2)
lcd.setCursor(7, 2);
String valorHex = String(Valor_ADC, HEX); // Convierte a hexadecimal
valorHex.toUpperCase(); // Convierte letras a mayúsculas (ej: 3FF)
lcd.print(valorHex);
lcd.print(" "); // Limpia dígitos anteriores (máximo 3 caracteres para 4095)
// 3. Mostrar Binario (Línea 3 - 12 Bits)
lcd.setCursor(7, 3);
for (int i = 11; i >= 0; i--) {
lcd.print(bitRead(Valor_ADC, i));
}
delay(200);
}
/*
En el ESP32, casi todos los pines del lado izquierdo y varios del lado derecho tienen capacidades
ADC (Conversor Analógico a Digital). El ESP32 tiene 18 canales ADC repartidos en dos controladores (ADC1 y ADC2).
Lista detallada:
1. ADC1 (8 Canales) - RECOMENDADOS
Estos son los mejores para usar porque funcionan siempre, incluso si estás usando Wi-Fi.
GPIO 32 (ADC1_CH4)
GPIO 33 (ADC1_CH5)
GPIO 34 (ADC1_CH6)
GPIO 35 (ADC1_CH7)
GPIO 36 (ADC1_CH0 - Pin VP)
GPIO 37 (ADC1_CH1 - No siempre disponible en placas de desarrollo)
GPIO 38 (ADC1_CH2 - No siempre disponible en placas de desarrollo)
GPIO 39 (ADC1_CH3 - Pin VN)
2. ADC2 (10 Canales) - CON RESTRICCIONES
Estos pines pueden leer señales analógicas, pero tienen un gran inconveniente: No funcionan cuando el Wi-Fi
está encendido. Si tu proyecto usa Wi-Fi, evita estos pines para lecturas analógicas.
GPIO 0 (ADC2_CH1)
GPIO 2 (ADC2_CH2)
GPIO 4 (ADC2_CH0)
GPIO 12 (ADC2_CH5)
GPIO 13 (ADC2_CH4)
GPIO 14 (ADC2_CH6)
GPIO 15 (ADC2_CH3)
GPIO 25 (ADC2_CH8)
GPIO 26 (ADC2_CH9)
GPIO 27 (ADC2_CH7)
Resumen rápido para elegir:
Si vas a usar... usa estos pines ADC
Solo Sensores (Sin Wi-Fi) Cualquiera de los 18 canales.
Sensores + Wi-Fi Solo ADC1 (32, 33, 34, 35, 36, 39).
Sensores de solo entrada 34, 35, 36, 39 (Son muy estables para ADC).
Datos importantes sobre el ADC del ESP32:
Resolución: Por defecto es de 12 bits, lo que significa que el valor que leerás en el código
(usando analogRead) irá de 0 a 4095.
Voltaje máximo: El ADC solo mide entre 0V y 3.3V. Si le metes 5V, podrías dañar el pin o el chip.
No es lineal: El ADC del ESP32 tiene fama de no ser muy preciso cerca de los 0V y cerca de los
3.3V (tiene una pequeña "curva" en los extremos). Para proyectos que requieren precisión médica
o científica, suele ser necesario calibrarlo por software.
Mi recomendación: Usa siempre los pines 34, 35, 36 y 39 para tus sensores analógicos (como potenciómetros,
sensores de luz, etc.), ya que no se ven afectados por el Wi-Fi y no tienen otras funciones digitales
que puedan interferir.
*/