# ex1.py
# exercise 1 in Lecture 6
# EEIoT23 Oct 2023
from machine import Pin, Timer, PWM
import sys
PWMMAX = 1023
Rled = PWM(Pin(19))
Gled = PWM(Pin(18))
Bled = PWM(Pin(17))
Rled.freq(2000)
Gled.freq(2000)
Bled.freq(2000)
Rled.duty(0)
Gled.duty(0)
Bled.duty(0)
led_period = 1000 # default
toggle_mode = 1
rled_value = 0
gled_value = 0
bled_value = 0
led_status = False
timer=Timer(1)
def timer_isr(event):
global led_status
#led.value(not led.value())
led_status = not led_status
if led_status:
Rled.duty(rled_value)
Gled.duty(gled_value)
Bled.duty(bled_value)
else:
Rled.duty(0)
Gled.duty(0)
Bled.duty(0)
timer.init(period=led_period, mode=Timer.PERIODIC,
callback=timer_isr)
# helper function for cmdInt()
# separate command and parameter
# at "="
def splitCmd(userstr):
result = userstr.find("=")
if result == -1:
noparm = 1
cmdstr = userstr.strip()
parmstr = '' # not used
else:
noparm = 0
splitstr = userstr.split("=")
cmdstr = splitstr[0].strip()
parmstr = splitstr[1].strip()
return cmdstr, parmstr, noparm
#command interpreter function
def cmdInt(userstr):
global rled_value,gled_value,bled_value, toggle_mode, led_period, timer
cmdstr, parmstr, noparm = splitCmd(userstr)
if cmdstr.lower() == "rled":
if noparm==1:
print("Current red led value = {}".format(rled_value))
else:
rled_value = int(parmstr)
if rled_value > PWMMAX:
rled_value = PWMMAX
if rled_value < 0:
rled_value = 0
Rled.duty(rled_value)
elif cmdstr.lower() == "gled":
if noparm==1:
print("Current green led value = {}".format(gled_value))
else:
gled_value = int(parmstr)
if gled_value > PWMMAX:
gled_value = PWMMAX
if gled_value < 0:
gled_value = 0
Gled.duty(gled_value)
elif cmdstr.lower() == "bled":
if noparm==1:
print("Current blue led value = {}".format(bled_value))
else:
bled_value = int(parmstr)
if bled_value > PWMMAX:
bled_value = PWMMAX
if bled_value < 0:
bled_value = 0
Bled.duty(bled_value)
elif cmdstr.lower() == "toggle":
if noparm==1:
print("Current toggle mode = {}".format(toggle_mode))
else:
toggle_mode = int(parmstr)
if toggle_mode >= 1:
toggle_mode = 1
timer.init(period=led_period, mode=Timer.PERIODIC,
callback=timer_isr)
elif toggle_mode <= 0:
toggle_mode = 0
timer.deinit()
elif cmdstr.lower() == "period":
if noparm==1:
print("Current led period = {}".format(led_period))
else:
led_period = int(parmstr)
if led_period > 2000: # set maximum period to 2 seconds
led_period = 2000
elif led_period < 50: # minimum period is 50 milliseconds
led_period = 50
if toggle_mode: # deinit and init with new period
timer.init(period=led_period, mode=Timer.PERIODIC,
callback=timer_isr)
else:
print("Invalid command")
def user_input():
print('\nEnter command : ')
user_str = input()
#newline_char = sys.stdin.readline()
cmdInt(user_str)
while True:
user_input()