// Definir nombre de pins
#define PinAnalogo 35 //Pin de ESP32 donde se lee el voltaje analógico
#define a 23 //Pin 23 del ESP32 estará conectado al segmento "a" de los display de 7 segmentos
#define b 22 //Pin 22 del ESP32 estará conectado al segmento "b" de los display de 7 segmentos
#define c 21 //Pin 21 del ESP32 estará conectado al segmento "c" de los display de 7 segmentos
#define d 19 //Pin 19 del ESP32 estará conectado al segmento "d" de los display de 7 segmentos
#define e 18 //Pin 18 del ESP32 estará conectado al segmento "e" de los display de 7 segmentos
#define f 5 //Pin 5 del ESP32 estará conectado al segmento "f" de los display de 7 segmentos
#define g 4 //Pin 4 del ESP32 estará conectado al segmento "g" de los display de 7 segmentos
#define T1 26 // Pin para encender o apagar transistor que alimenta a display de millar
#define T2 27 // Pin para encender o apagar transistor que alimenta a display de centena
#define T3 14 // Pin para encender o apagar transistor que alimenta a display de decena
#define T4 12 // Pin para encender o apagar transistor que alimenta a display de unidad
#define led 33
#define boton 15
// Declarar variables
int Valor, ValorDigital, display1, display2, display3, nivel; // Variable que obtendrá el valor digital después de la conversión
float volts; // Valor equivalente en volts que se convirtieron a digital
// Arreglo variable tipo byte (8 bits) para los dígitos 0-9 en el display, donde 1 = HIGH y 0 = LOW
// B0 1 1 0 0 0 0 = número 1 en display de 7 segmentos
// 6 5 4 3 2 1 0 -> orden de los bits declarados en la variable digitos abajo
//# posición de segmentos del display
//# a
//# ---
//# f | g | b
//# ---
//# e | | c
//# ---
//# d
byte digitos[13] = {
B1111110, //0
B0110000, //1
B1101101, //2
B1111001, //3
B0110011, //4
B1011011, //5
B1011111, //6
B1110000, //7
B1111111, //8
B1111011,//9
B1000111,//F=10
B1110110,//N=11
B0000000,//apagado=12
};
void setup() {
// Configuración para desplegar mensaje durante simulación:
Serial.begin(115200);
// Establecer resolución de 12 bits (0-4095 -> 4096), 10 bits (0-1023 -> 1024), 8 bits (0-255 -> 256)
analogReadResolution(8);
// Configurar como salidas los pins conectados al display de 7 segmentos
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
// Configurar como salidas los pins para habilitar los transistores
pinMode(T1, OUTPUT);
pinMode(T2, OUTPUT);
pinMode(T3, OUTPUT);
pinMode(T4, OUTPUT);
pinMode(led, OUTPUT);
pinMode(boton,INPUT);
}
void loop() {
// Leer el valor de voltaje en el PinAnalogo
ValorDigital = analogRead(PinAnalogo);
Valor = ValorDigital;
// Convertir el equivalente en volts que se convirtieron
volts = ValorDigital * (3.3/255);
// Separar digitos en millar, centena, decenas y unidades
for (nivel=0; Valor>0; nivel++, Valor-=28.33); //nivel
display1=0;
if (nivel!=9 && digitalRead(boton)==HIGH){
display2=11;
display3=12;
digitalWrite(led,HIGH);
}else{
display2=10;
display3=10;
digitalWrite(led,LOW);
}
// Desplegar valor de conversión que obtuvo el microcontrolador (digital)
// y también desplegar el valor equivalente en volts que fue convertido
//Serial.printf("ADC Value: %d, Voltage: %0.4fV, Millar: %d, Centena: %d, Decena: %d, Unidad %d \n", ValorDigital, volts, millar, centena, decena, unidad);
// Desplegar en display de 7 segmentos el valor de millar
mostrarDigito(digitos[display1]); //cargar valores correspondientes al valor del millar en a, b, c, d, e, f y g
digitalWrite(T1, HIGH); //encender transitor que alimenta el display del millar
delay(1); // mostrar por 10 milisegundos el valor del millar
digitalWrite(T1, LOW); //apagar transistor que alimenta el display del millar
// Desplegar en display de 7 segmentos el valor de centena
mostrarDigito(digitos[display2]); //cargar valores correspondientes al valor de la centena en a, b, c, d, e, f y g
digitalWrite(T2, HIGH); //encender transitor que alimenta el display de centena
delay(1); // mostrar por 10 milisegundos el valor de la centena
digitalWrite(T2, LOW); //apagar transistor que alimenta el display de centena
// Desplegar en display de 7 segmentos el valor de decena
mostrarDigito(digitos[display3]); //cargar valores correspondientes al valor de la decena en a, b, c, d, e, f y g
digitalWrite(T3, HIGH); //encender transitor que alimenta el display de decena
delay(1); // mostrar por 10 milisegundos el valor de la decena
digitalWrite(T3, LOW); //apagar transistor que alimenta el display de decena
// Desplegar en display de 7 segmentos el valor de unidad
mostrarDigito(digitos[nivel]); //cargar valores correspondientes al valor de la unidad en a, b, c, d, e, f y g
digitalWrite(T4, HIGH); //encender transitor que alimenta el display de unidad
delay(1); // mostrar por 10 milisegundos el valor de la unidad
digitalWrite(T4, LOW); //apagar transistor que alimenta el display de unidad
}
// Definir función para mostrar un dígito
void mostrarDigito(byte digito){
// Escribe el patrón de bits en los pines
digitalWrite(a, bitRead(digito, 6));
digitalWrite(b, bitRead(digito, 5));
digitalWrite(c, bitRead(digito, 4));
digitalWrite(d, bitRead(digito, 3));
digitalWrite(e, bitRead(digito, 2));
digitalWrite(f, bitRead(digito, 1));
digitalWrite(g, bitRead(digito, 0));
}