from machine import Pin,I2C,Timer
import time
from pico_i2c_lcd import I2cLcd
sda=Pin(0)
scl = Pin(1)
i2c = I2C(0, sda=sda , scl=scl ,freq = 400000)
devices = i2c.scan()
if len(devices)<=0:
print("No devices found!")
else :
print(hex(devices[0]))
i2c_addr = devices[0]
lcd=I2cLcd(i2c,i2c_addr,2,16)
R1 = [Pin(i+2,Pin.OUT) for i in range(4)]
R2 = [Pin(i+10,Pin.OUT) for i in range(4)]
R3 = [Pin(i+18,Pin.OUT) for i in range(4)]
carry = Pin(22,Pin.OUT)
for led in R1:
led.low()
for led in R2:
led.low()
for led in R3:
led.low()
carry.low()
n=4
def fn(timer) :
for i in range(2**n):
for j in range(2**n):
k=0
delay=0.25
a=bin(i)[2:]
b=bin(j)[2:]
c=bin(i+j)[2:]
ex=0
s=""
while(ex+len(a)<4):
s=s+"0"
ex=ex+1
s=s+a
a=s
ex=0
s=""
while(ex+len(b)<4):
s=s+"0"
ex=ex+1
s=s+b
b=s
if len(c)>4:
carry.high()
delay=2
k=1
else:
carry.low()
delay=0.25
ex=0
s=""
while(ex+len(c)<4):
s=s+"0"
ex=ex+1
s=s+c
c=s
for p in range(n):
R1[p].value(int(a[p]))
R2[p].value(int(b[p]))
R3[p].value(int(c[p+k]))
lcd.putstr(f"{a}+{b}={c}")
time.sleep(delay)
lcd.clear()
t = Timer(period = 1000,mode = Timer.PERIODIC,callback = fn)