# librerias
from machine import SoftI2C, Pin, PWM, ADC
import utime
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
from time import sleep
# Direccion I2C de la pantalla LCD
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2 # Numero de filas del LCD
I2C_NUM_COLS = 16 # Numero de columnas del LCD
# Configuracion I2C
i2c = SoftI2C(scl = Pin(22),sda = Pin(21)) # Pines del ESP32 para el LCD I2C
lcd = I2cLcd(i2c, 0x27, 2, 16)
# Pines de entrada para lectura digital del sensor IR TCRT5000
pin_a0 = Pin(34, Pin.IN) # Para la lectura de las monedas de mil pesos
pin_a1 = Pin(35, Pin.IN) # Para la lectura de las monedas de quinientos pesos
pin_a2 = Pin(32, Pin.IN) # Para la lectura de las monedas de doscientos pesos
pin_a3 = Pin(33, Pin.IN) # Para la lectura de las monedas de cien pesos
pin_a4 = Pin(25, Pin.IN) # Para la lectura de las monedas de cincuenta pesos
Boton1 = Pin(19,Pin.IN) # Para la lectura del valor logico del pulsador (0 ó 1)
# Contadores
m = 0 # Contador monedas de mil
q = 0 # Contador monedas de quinientos
d = 0 # Contador monedas de doscientos
c = 0 # Contador monedas de cien
cc= 0 # Contador monedas de cincuenta pesos
while True:
r=Boton1.value() # Boton para visualizar el total en pesos de la suma de las monedas
lcd.move_to(0, 0) # Para que los valores de la pantalla no comiencen a moverse a la loca
lcd.putstr("M :") # Muestra la M (mil), en el LCD
lcd.putstr("%1d" % (m)) # Para mostrar la cantidad de monedas de mil ingresadas
lcd.putstr(" Q :") # Muestra la Q (quinientos), en el LCD
lcd.putstr("%1d" % (q)) # Para mostrar la cantidad de monedas de quinientos ingresadas
lcd.putstr(" D :") # Muestra la D (doscientos), en el LCD
lcd.putstr("%1d" % (d)) # Para mostrar la cantidad de monedas de doscientos ingresadas
lcd.putstr(" C :") # Muestra la C (cien), en el LCD
lcd.putstr("%1d" % (c)) # Para mostrar la cantidad de monedas de cien ingresadas
lcd.putstr(" c :") # Muestra la c (cincuenta), en el LCD
lcd.putstr("%1d" % (cc))# Para mostrar la cantidad de monedas de cincuenta ingresadas
sleep(0.2) # Para que la toma de datos no sea tan rapida
if pin_a0.value() == 1: # Toma de lectura cantidad de monedas de 1000
m += 1
if pin_a1.value() == 1: # Toma de lectura cantidad de monedas de 500
q += 1
if pin_a2.value() == 1: # Toma de lectura cantidad de monedas de 200
d += 1
if pin_a3.value() == 1: # Toma de lectura cantidad de monedas de 100
c += 1
if pin_a4.value() == 1: # Toma de lectura cantidad de monedas de 50
cc += 1
result = (m * 1000)+(q*500)+(d*200)+(c*100)+(cc*50) # Sumatoria de las monedas
if Boton1.value() == 1: # Condicional ligado a si se presiona el pulsador
y=0 # Contador auxiliar para el ciclo while que mostrara el total
sleep (0.1) # Para que pueda leer de a un dato recibido al presionar el pulsador
lcd.clear() # Para limpiar la pantalla del LCD antes de mostrar el total de monedas
while y != 2: # Ciclo while con la variable auxiliar, con un valor maximo de y = 2 para romper el ciclo
lcd.move_to(0, 0) # Iniciar la muestra del total al comienzo de la pantalla del LCD
lcd.putstr("TOTAL:$") # Indica que el valor corresponde al total
lcd.putstr("{:3d}".format(result)) # Muestra el valor total en la pantalla LCD
if Boton1.value() == 1 : # Condicional ligado a si se presiona nuevamente el pulsador
sleep(0.1) #tiempo de espera antes de incrementar el contador
y+=1 #incremento del contador
sleep(0.1) # Tiempo de espera antes de la nueva toma de datos por parte de los sensores