from machine import ADC, I2C, Pin, Timer
from pico_i2c_lcd import I2cLcd
from math import log
import utime
sda = Pin(0)
scl = Pin(1)
pin1 = []
pin2 = []
pin3 = []
for i in range(4) :
pin1.append(Pin(2+i, Pin.OUT))
for i in range(4) :
pin2.append(Pin(6+i, Pin.OUT))
for i in range(4) :
pin3.append(Pin(18+i, Pin.OUT))
carry_pin = Pin(17,Pin.OUT)
def conv_bin(num) :
bin = [0]*4
if num == 0 :
return bin
i = 0
while num > 0 :
bin[i] = (num%2)
num = num // 2;
i = i + 1;
bin.reverse();
return bin
def on_light(arr,pins):
for i in range(len(arr)):
if arr[i] == 1:
pins[i].value(1)
def off_light(pins):
for i in range(4):
pins[i].value(0)
def sumi(first, second):
retl = [0] * 4
carry = 0
for i in range(3, -1, -1):
sum_bit = first[i] + second[i] + carry
retl[i] = sum_bit % 2
carry = sum_bit // 2
return retl,carry
i2c = I2C(0, sda=sda, scl=scl, freq=400000)
device = i2c.scan()
i2caddr = device[0]
lcd = I2cLcd(i2c, i2caddr, 2, 16)
for i in range(16) :
for j in range(16):
suml = []
first = conv_bin(i)
second = conv_bin(j)
on_light(first,pin1)
on_light(second,pin2)
suml,carry = sumi(first,second)
on_light(suml,pin3)
if carry == 1:
carry_pin.value(1)
lcd.putstr(f"{i} + {j} = {i + j} ")
utime.sleep(1)
off_light(pin1)
off_light(pin2)
off_light(pin3)
carry_pin.value(0)
lcd.clear()