import machine
import utime
RS_PIN = 0
E_PIN = 1
D4_PIN = 2
D5_PIN = 3
D6_PIN = 4
D7_PIN = 5
voltage = 0
BUTTON_INC_PIN = 7
BUTTON_DEC_PIN = 8
POTENTIOMETER_PIN = 26
LCD_WIDTH = 16
LCD_LINES = 2
LCD_CLEAR = 0x01
LCD_HOME = 0x02
LCD_CURSOR_ON = 0x0E
LCD_CURSOR_OFF = 0x0C
LCD_CURSOR_BLINK = 0x0D
LCD_CURSOR_BACK = 0x10
LCD_CURSOR_FORWARD = 0x14
def lcd_init():
lcd_command(0x33)
lcd_command(0x32)
lcd_command(0x28)
lcd_command(0x0C)
lcd_command(0x06)
lcd_command(LCD_CLEAR)
utime.sleep_ms(1)
def lcd_command(cmd):
lcd_rs.value(0)
lcd_data_pins(cmd >> 4)
lcd_enable_pulse()
lcd_data_pins(cmd & 0x0F)
lcd_enable_pulse()
def lcd_putc(data):
lcd_rs.value(1)
lcd_data_pins(data >> 4)
lcd_enable_pulse()
lcd_data_pins(data & 0x0F)
lcd_enable_pulse()
def lcd_enable_pulse():
lcd_enable.value(1)
utime.sleep_us(1)
lcd_enable.value(0)
utime.sleep_us(100)
def lcd_data_pins(value):
lcd_d4.value(value & 0x01)
lcd_d5.value(value & 0x02)
lcd_d6.value(value & 0x04)
lcd_d7.value(value & 0x08)
def read_potentiometer_voltage(v):
raw_value = potentiometer.read_u16()
voltage = (raw_value / 65535.0) * 3.3
voltage_cal = (voltage+v)
if voltage_cal < 0:
voltage_cal = 0
return voltage_cal
lcd_rs = machine.Pin(RS_PIN)
lcd_enable = machine.Pin(E_PIN)
lcd_d4 = machine.Pin(D4_PIN)
lcd_d5 = machine.Pin(D5_PIN)
lcd_d6 = machine.Pin(D6_PIN)
lcd_d7 = machine.Pin(D7_PIN)
potentiometer = machine.ADC(POTENTIOMETER_PIN)
lcd_rs.init(machine.Pin.OUT)
lcd_enable.init(machine.Pin.OUT)
lcd_d4.init(machine.Pin.OUT)
lcd_d5.init(machine.Pin.OUT)
lcd_d6.init(machine.Pin.OUT)
lcd_d7.init(machine.Pin.OUT)
lcd_init()
v = 0.0
while True:
if machine.Pin(BUTTON_INC_PIN, machine.Pin.IN).value() ==1:
v +=0.1
print("Button Increase Pressed. Voltage:", voltage)
machine.Pin(BUTTON_INC_PIN, machine.Pin.OUT).value()
if machine.Pin(BUTTON_DEC_PIN, machine.Pin.IN).value() == 1:
v -=0.1
print("Button Decrease Pressed. Voltage:", voltage)
machine.Pin(BUTTON_DEC_PIN, machine.Pin.OUT).value()
voltage = read_potentiometer_voltage(v)
lcd_command(LCD_CLEAR)
lcd_putc(ord("V"))
lcd_putc(ord("o"))
lcd_putc(ord("l"))
lcd_putc(ord("t"))
lcd_putc(ord("a"))
lcd_putc(ord("g"))
lcd_putc(ord("e"))
lcd_putc(ord(":"))
lcd_command(LCD_CURSOR_BACK)
voltage_str = "{:.2f} V".format(voltage)
for char in voltage_str:
lcd_putc(ord(char))
utime.sleep(0.1)