""" BEHOLD!!! A 'SCALE-Y' solution for the Python tinkerer masses! This should work on any Pi model with a little bit of tweaking to the GPIO pins. Read comments below for more information. Feel free to fork and contribute! """ from machine import Timer, Pin, PWM, UART, ADC from time import sleep # On Board LED Blink to show script activity led = Pin(25, Pin.OUT) # These GPIOs are wired to a Storm Interfaces 4 BUTTON SWITCH KEYPAD # https://www.storm-interface.com/pub/media/productattachments/files/File-1396359302.pdf btn_1_up = Pin(1, Pin.IN, Pin.PULL_UP) btn_2_down = Pin(5, Pin.IN, Pin.PULL_UP) btn_3_left = Pin(9, Pin.IN, Pin.PULL_UP) btn_4_right = Pin(13, Pin.IN, Pin.PULL_UP) timer = Timer() # Separate UART GPIO wired into a potentiometer to act as the scale's base. uart = UART(1,115200) adc = ADC(Pin(26)) def blink(timer): led.toggle() timer.init(freq=1, mode=Timer.PERIODIC, callback=blink) # Checks button state for each GPIO using ternary condition statements def button_pressed(btn_1_up, btn_2_down, btn_3_left, btn_4_right): b_list = [] UP = b_list.append("UP") if btn_1_up == 0 else None DOWN = b_list.append("DOWN") if btn_2_down == 0 else None LEFT = b_list.append("LEFT") if btn_3_left == 0 else None RIGHT = b_list.append("RIGHT") if btn_4_right == 0 else None if len(b_list) > 0: return b_list # Starts loop while True: button_state = button_pressed(btn_1_up.value(), btn_2_down.value(), btn_3_left.value(), btn_4_right.value()) if button_state != None: tare = -0.05 net = round((float(adc.read_u16()/65535))*100,2) gross = round(net + tare,2) data_str = f'[{{"tare":{tare},"net":{net},"gross":{gross},"actions":{button_state}}}]' uart.write(data_str) print(data_str) sleep(1) else: tare = -0.05 net = round((float(adc.read_u16()/65535))*100,2) gross = round(net + tare,2) data_str = f'[{{"tare":{tare},"net":{net},"gross":{gross},"actions":[]}}]' uart.write(data_str) print(data_str) sleep(1)