# Project objectives:
# Print a "Hello world!" text on the LCD screen to test its functionality
# Learn how to use I2C communication between the LCD and Raspberry Pi Pico
# Get familiarized with the pico_i2c_lcd and lcd_api modules
#
# Hardware and connections used:
# LCD GND Pin to Raspberry Pi Pico GND
# LCD VCC Pin to Raspberry Pi Pico VBUS
# (Note: VBUS is only to be used as power for the screen.
# It can't be used as power for the entire circuit if there are other components interfaced.)
# LCD SDA Pin to Raspberry Pi Pico GPIO Pin 0
# LCD SCL Pin to Raspberry Pi Pico GPIO Pin 1
#
# Programmer: Adrian Josele G. Quional
# modules
from machine import I2C, Pin # since I2C communication would be used, I2C class is imported
from time import sleep
# very important
# this module needs to be saved in the Raspberry Pi Pico in order for the LCD I2C to be used
from pico_i2c_lcd import I2cLcd
# creating an I2C object, specifying the data (SDA) and clock (SCL) pins used in the Raspberry Pi Pico
# any SDA and SCL pins in the Raspberry Pi Pico can be used (check documentation for SDA and SCL pins)
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
# getting I2C address
I2C_ADDR = i2c.scan()[0]
# creating an LCD object using the I2C address and specifying number of rows and columns in the LCD
# LCD number of rows = 2, number of columns = 16
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
led1 = Pin(2, Pin.OUT)
sensor1 = Pin(16, Pin.IN)
led2 = Pin(3, Pin.OUT)
sensor2 = Pin(17, Pin.IN)
led3 = Pin(4, Pin.OUT)
sensor3 = Pin(18, Pin.IN)
a=0
b=0
c=0
count=0
delay=0
led4 = Pin(9, Pin.OUT)
led5 = Pin(10, Pin.OUT)
led6 = Pin(11, Pin.OUT)
sensor4 = Pin(26, Pin.IN)
sensor5 = Pin(27, Pin.IN)
sensor6 = Pin(28, Pin.IN)
d=0
e=0
f=0
count1=0
delay1=0
BUTTON = Pin(16, Pin.IN)
# continuously print and clear "Hello world!" text in the LCD screen while the board has power
while True:
# putstr method allows printing of the text in the LCD screen
# for other methods that can be used, check lcd_api module
if sensor1.value()==1:
#led1.value(1)
a=1
else:
#led1.value(0)
a=0
if sensor2.value() == 1:
#led2.value(1)
b=1
else:
# led2.value(0)
b=0
if sensor3.value() == 1:
#led3.value(1)
c=1
else:
#led3.value(0)
c=0
count=a+b+c
sleep(1)
if count >= 3:
delay = 180
elif count == 2:
delay = 120
elif count == 1:
delay = 60
else:
delay = 60
if delay==60:
lcd.move_to(10, 1)
for i in range((delay), (delay/2), -1):
lcd.move_to(0, 1)
lcd.putstr("plz wait:")
lcd.putstr(str(i)+" ")
led4.value(1)
led3.value(1)
sleep(0.2)
led4.value(0)
led3.value(0)
lcd.move_to(10, 1)
for i in range((delay/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led5.value(1)
led3.value(1)
sleep(0.2)
led5.value(0)
led3.value(0)
if delay==120:
lcd.move_to(10, 1)
for i in range((delay), (delay/2), -1):
lcd.move_to(0, 1)
lcd.putstr("red:")
lcd.putstr(str(i)+" ")
led4.value(1)
led3.value(1)
sleep(0.2)
led4.value(0)
led3.value(0)
lcd.move_to(10, 1)
for i in range((delay/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led5.value(1)
led3.value(1)
sleep(0.2)
led5.value(0)
led3.value(0)
if delay==180:
lcd.move_to(10, 1)
for i in range((delay), (delay/2), -1):
lcd.move_to(0, 1)
lcd.putstr("red:")
lcd.putstr(str(i)+" ")
led4.value(1)
led3.value(1)
sleep(0.2)
led4.value(0)
led3.value(0)
lcd.move_to(10, 1)
for i in range((delay/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led5.value(1)
led3.value(1)
sleep(0.2)
led5.value(0)
led3.value(0)
if sensor4.value()==1:
#led1.value(1)
d=1
else:
#led1.value(0)
d=0
if sensor5.value() == 1:
#led2.value(1)
e=1
else:
# led2.value(0)
e=0
if sensor6.value() == 1:
#led3.value(1)
f=1
else:
#led3.value(0)
f=0
count1=d+e+f
sleep(1)
if count1 >= 3:
delay1 = 180
elif count1 == 2:
delay1 = 120
elif count1 == 1:
delay1 = 60
else:
delay1 = 60
if delay1==60:
lcd.move_to(10, 1)
for i in range((delay1), (delay1/2), -1):
lcd.move_to(0, 1)
lcd.putstr("plz wait:")
lcd.putstr(str(i)+" ")
led1.value(1)
led6.value(1)
sleep(0.2)
led1.value(0)
led6.value(0)
lcd.move_to(10, 1)
for i in range((delay1/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led2.value(1)
led6.value(1)
sleep(0.2)
led2.value(0)
led6.value(0)
if delay1==120:
lcd.move_to(10, 1)
for i in range((delay1), (delay1/2), -1):
lcd.move_to(0, 1)
lcd.putstr("red:")
lcd.putstr(str(i)+" ")
led1.value(1)
led6.value(1)
sleep(0.2)
led1.value(0)
led6.value(0)
lcd.move_to(10, 1)
for i in range((delay1/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led2.value(1)
led6.value(1)
sleep(0.2)
led2.value(0)
led6.value(0)
if delay1==180:
lcd.move_to(10, 1)
for i in range((delay1), (delay1/2), -1):
lcd.move_to(0, 1)
lcd.putstr("red:")
lcd.putstr(str(i)+" ")
led1.value(1)
led6.value(1)
sleep(0.2)
led1.value(0)
led6.value(0)
lcd.move_to(10, 1)
for i in range((delay1/2), -1, -1):
lcd.move_to(0, 1)
lcd.putstr("yellow:")
lcd.putstr(str(i)+" ")
led2.value(1)
led6.value(1)
sleep(0.2)
led2.value(0)
led6.value(0)
delay1=0
count1=0