import time
import sys

EMULATE_HX711 = False

referenceUnit = 1

if not EMULATE_HX711:
    from machine import Pin
    from hx711 import HX711
else:
    from emulated_hx711 import HX711

def cleanAndExit():
    print("Cleaning...")

    if not EMULATE_HX711:
        # Realizar limpieza de pines en MicroPython
        hx.dt_pin(5, Pin.IN)
        hx.sck_pin(6, Pin.IN)

    print("Bye!")
    sys.exit()

hx = HX711(5, 6)

# He descubierto que, por alguna razón, el orden de los bytes no siempre es el mismo entre las versiones de Python, NumPy y el HX711 en sí.
# Aún necesito averiguar por qué cambia.
# Si estás experimentando valores superaleatorios, cambia estos valores a MSB o LSB hasta obtener valores más estables.
# Hay un código a continuación para depurar y registrar el orden de los bits y los bytes.
# El primer parámetro es el orden en el que se utilizan los bytes para construir el valor "long".
# El segundo parámetro es el orden de los bits dentro de cada byte.
# Según la hoja de datos del HX711, el segundo parámetro es MSB, por lo que no deberías necesitar modificarlo.
hx.set_reading_format("MSB", "MSB")

# CÓMO CALCULAR LA UNIDAD DE REFERENCIA
# Para establecer la unidad de referencia en 1, coloca 1 kg en tu sensor o cualquier cosa que tengas y sepas exactamente cuánto pesa.
# En este caso, 92 es 1 gramo porque, con 1 como unidad de referencia, obtuve números cercanos a 0 sin peso alguno
# y obtuve números alrededor de 184000 cuando agregué 2 kg. Por lo tanto, según la regla de los tercios:
# Si 2000 gramos son 184000, entonces 1000 gramos son 184000 / 2000 = 92.
#hx.set_reference_unit(113)
hx.set_reference_unit(referenceUnit)

hx.reset()

hx.tare()

print("Tare done! Add weight now...")

while True:
    try:
        # Estas tres líneas son útiles para depurar si se debe usar MSB o LSB en los formatos de lectura
        # para el primer parámetro de "hx.set_reading_format("LSB", "MSB")".
        # Comenta las dos líneas "val = hx.get_weight(5)" y "print(val)" y descomenta estas tres líneas para ver qué imprime.
        
        # np_arr8_string = hx.get_np_arr8_string()
        # binary_string = hx.get_binary_string()
        # print(binary_string + " " + np_arr8_string)
        
        # Imprime el peso. Comenta si estás depurando el problema de MSB y LSB.
        val = hx.get_weight(5)
        print(val)

        hx.power_down()
        hx.power_up()
        time.sleep(0.1)

    except (KeyboardInterrupt, SystemExit):
        cleanAndExit()
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT