from machine import Pin, PWM, I2C
from time import sleep
from pico_i2c_lcd import I2cLcd
# ----------------------------
# LCD Configuration
# ----------------------------
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
i2c = I2C(
0,
scl=Pin(1),
sda=Pin(0),
freq=400000
)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
# ----------------------------
# Sensors
# ----------------------------
sensor1 = Pin(2, Pin.IN, Pin.PULL_UP)
sensor2 = Pin(3, Pin.IN, Pin.PULL_UP)
sensor3 = Pin(4, Pin.IN, Pin.PULL_UP)
# ----------------------------
# Servo Motors
# ----------------------------
servo1 = PWM(Pin(16))
servo2 = PWM(Pin(17))
servo3 = PWM(Pin(18))
servo1.freq(50)
servo2.freq(50)
servo3.freq(50)
# ----------------------------
# Counters
# ----------------------------
coin1 = 0
coin2 = 0
coin5 = 0
totalCoins = 0
totalAmount = 0
# ----------------------------
# Servo Function
# ----------------------------
def moveServo(servo):
servo.duty_u16(5000)
sleep(0.6)
servo.duty_u16(1500)
sleep(0.6)
# ----------------------------
# LCD Update
# ----------------------------
def updateLCD():
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("C:%d Rs:%d"%(totalCoins,totalAmount))
lcd.move_to(0,1)
lcd.putstr("1:%d 2:%d 5:%d"%(coin1,coin2,coin5))
# ----------------------------
# Start Screen
# ----------------------------
lcd.clear()
lcd.putstr("Coin Sorting")
sleep(2)
updateLCD()
# ----------------------------
# Main Loop
# ----------------------------
while True:
# ₹1 Coin
if sensor1.value()==0:
coin1 += 1
totalCoins += 1
totalAmount += 1
print("Rs1 Coin")
moveServo(servo1)
updateLCD()
while sensor1.value()==0:
sleep(0.05)
# ₹2 Coin
if sensor2.value()==0:
coin2 += 1
totalCoins += 1
totalAmount += 2
print("Rs2 Coin")
moveServo(servo2)
updateLCD()
while sensor2.value()==0:
sleep(0.05)
# ₹5 Coin
if sensor3.value()==0:
coin5 += 1
totalCoins += 1
totalAmount += 5
print("Rs5 Coin")
moveServo(servo3)
updateLCD()
while sensor3.value()==0:
sleep(0.05)
sleep(0.1)