from utime import sleep, ticks_ms
from machine import Pin, Timer
import util
from segment import SegmentDisplay
#######################################
# Pin and constant definitions
#######################################
BTN_ID = 16
DGT_START = 8
DGT_COUNT = 4
SEG_START = 0
SEG_COUNT = 7
DOT_ID = 7
ADC_ID = 26
#######################################
# Global variables
#######################################
display_value = 0
last_btn_timestamp = 0
segment_display = None
adc_reader = None
def update_analogue_voltage():
global display_value
readings = []
for _ in range(16): # read 16 times
readings.append(adc_reader.read_voltage())
display_value = round(sum(readings) / len(readings), 4) # average
print(f"Voltage: {display_value*1000} mV")
def scan_display(timer_id):
segment_display.scan(display_value)
def btn_interrupt(pin):
global last_btn_timestamp
timestamp = ticks_ms()
if timestamp - last_btn_timestamp > 200:
update_analogue_voltage()
last_btn_timestamp = timestamp
# print(f"Temp: {adc_reader.read_temp()}°C")
# Try uncommenting the above line
def setup():
global segment_display
global adc_reader
print("Starting...")
adc_reader = util.ADCReader(ADC_ID)
segment_display = SegmentDisplay(
digits = util.init_pins(DGT_START, DGT_COUNT, mode=Pin.OUT),
segments = util.init_pins(SEG_START, SEG_COUNT, reverse=True, mode=Pin.OUT),
dot = Pin(DOT_ID, mode=Pin.OUT)
)
btn = Pin(BTN_ID, Pin.IN, Pin.PULL_DOWN)
btn.irq(handler=btn_interrupt, trigger=Pin.IRQ_FALLING)
display_timer = Timer()
display_timer.init(mode=Timer.PERIODIC, period=100, callback=scan_display)
if __name__ == '__main__':
setup()