This commit is contained in:
Tomas Krejci 2024-05-21 17:45:07 +02:00
parent 95cb26112a
commit d9243b0928
2 changed files with 190 additions and 52 deletions

97
lib/btn.py Normal file
View File

@ -0,0 +1,97 @@
# btn.py
import machine
from sys import platform
ESP32 = platform == 'esp32'
RP2 = platform == 'rp2'
PYBOARD = platform == 'pyboard'
if ESP32 or RP2:
from machine import Pin
else:
from pyb import Pin, LED
import uasyncio as asyncio
#from primitives.switch import Switch
from primitives.delay_ms import Delay_ms
import primitives.queue as queue
from primitives import Switch, Pushbutton
import rgb.py as rgb
# Settings
#led = machine.Pin(25, machine.Pin.OUT)
led = machine.Pin("LED", machine.Pin.OUT) # Pi Pico onboard LED
btn = machine.Pin(18, machine.Pin.IN, machine.Pin.PULL_UP)
# Pulse an LED (coroutine)
async def pulse(led, ms):
led.on()
await asyncio.sleep_ms(ms)
led.off()
# Pulse an LED when an event triggered
async def evt_pulse(event, led):
while True:
event.clear()
await event.wait()
led.on()
await asyncio.sleep_ms(500)
led.off()
# Toggle an LED (callback)
def toggle(led):
led.toggle()
# Quit test by connecting X2 to ground
async def killer(obj):
pin = btn
while pin.value():
await asyncio.sleep_ms(50)
obj.deinit()
await asyncio.sleep_ms(0)
# Test for the Pushbutton class (events)
async def do_btn_event():
led.off()
pb = Pushbutton(btn)
pb.press_func(None)
pb.release_func(None)
pb.double_func(None)
pb.long_func(None)
#tasks = []
#for event, led in ((pb.press, 1), (pb.release, 2), (pb.double, 3), (pb.long, 4)):
#tasks.append(asyncio.create_task(evt_pulse(pb.press, led)))
#tasks.append(asyncio.create_task(evt_pulse(pb.double, led)))
asyncio.create_task(evt_pulse(pb.double, led))
#await killer(pb)
#for task in tasks:
# task.cancel()
while True:
await asyncio.sleep_ms(100)
print("Test of pushbutton triggering events.")
print("""
press pulse red
release pulses green
double click pulses yellow
long press pulses blue
""")
try:
asyncio.run(do_btn_event())
except KeyboardInterrupt:
print("Interrupted")
finally:
asyncio.new_event_loop()
print('tests complete')

View File

@ -7,67 +7,108 @@ import machine
import uasyncio as asyncio
from machine import Pin, PWM
led_r = PWM(Pin(22), 5000)
led_g = PWM(Pin(26), 5000)
led_b = PWM(Pin(27), 5000)
class RGB:
#rgb_pwr = 1.0
def __init__(self):
global rgb_pwr
rgb_pwr = 0.2 # 0.0 - 1.0
rgb_pwr = 0.1 # 0.0 - 1.0
self.led_r = PWM(Pin(22), 100)
self.led_g = PWM(Pin(26), 100)
self.led_b = PWM(Pin(27), 100)
async def init():
led_r.duty_u16(0)
led_g.duty_u16(0)
led_b.duty_u16(0)
async def set(self, r, g, b):
global rgb_pwr
self.led_r.duty_u16(int(65535 * r * rgb_pwr))
self.led_g.duty_u16(int(65535 * g * rgb_pwr))
self.led_b.duty_u16(int(65535 * b * rgb_pwr))
await uasyncio.sleep(0.01)
async def set_pwr(pwr):
global rgb_pwr
rgb_pwr = pwr
async def on(self):
await self.set(1, 1, 1)
async def off(self):
await self.set(0, 0, 0)
async def set(r, g, b):
led_r.duty_u16(int(65535 * r * rgb_pwr))
led_g.duty_u16(int(65535 * g * rgb_pwr))
led_b.duty_u16(int(65535 * b * rgb_pwr))
await uasyncio.sleep(0.01)
async def set_pwr(self, pwr):
global rgb_pwr
rgb_pwr = pwr
async def get_pwr(self):
global rgb_pwr
return rgb_pwr
async def on():
led_r.duty_u16(65535 * rgb_pwr) # 65535 = on
led_b.duty_u16(65535 * rgb_pwr) # 65535 = on
led_g.duty_u16(65535 * rgb_pwr) # 65535 = on
async def off():
led_r.duty_u16(0) # 0 = off
led_g.duty_u16(0) # 0 = off
led_b.duty_u16(0) # 0 = off
async def test():
print("RGB demo")
print("Press Ctrl-C to exit")
await uasyncio.sleep(1)
print("RGB power:", rgb_pwr)
print("RGB initializing...")
await init()
await uasyncio.sleep(1)
while True:
print("RGB off")
await set(0, 0, 0)
await uasyncio.sleep(1)
print("Red on")
await set(1, 0, 0)
await uasyncio.sleep(1)
print("Green on")
await set(0, 1, 0)
await uasyncio.sleep(1)
print("Blue on")
await set(0, 0, 1)
await uasyncio.sleep(1)
print("RGB on")
await set(1, 1, 1)
await uasyncio.sleep(1)
asyncio.run(test())
async def set_pwr_up(self):
await self.set_pwr(await self.get_pwr() * 2)
async def set_pwr_down(self):
await self.set_pwr((await self.get_pwr()) * 0.5)
async def set_red(self):
await self.set(1, 0, 0)
async def set_green(self):
await self.set(0, 1, 0)
async def set_blue(self):
await self.set(0, 0, 1)
async def set_yellow(self):
await self.set(1, 1, 0)
async def set_magenta(self):
await self.set(1, 0, 1)
async def set_cyan(self):
await self.set(0, 1, 1)
async def set_white(self):
await self.set(1, 1, 1)
async def set_orange(self):
await self.set(1, 0.5, 0)
async def test(self):
sec = 3
print("RGB demo")
print("Press Ctrl-C to exit")
await uasyncio.sleep(sec)
print("RGB power:", self.get_pwr())
print("RGB initializing...")
await uasyncio.sleep(sec)
while True:
print("RGB off")
await self.off()
await uasyncio.sleep(sec)
print("Red on")
await self.set(1, 0, 0)
await uasyncio.sleep(sec)
print("Green on")
await self.set_green()
await uasyncio.sleep(sec)
print("Blue on")
await self.set_blue()
await uasyncio.sleep(sec)
print("RGB on")
await self.on()
await uasyncio.sleep(sec)
print("RGB power down")
await self.set_pwr_down()
print("RGB power:", self.get_pwr())
await uasyncio.sleep(sec)
print("RGB power up")
await self.set_pwr_up()
print("RGB power:", self.get_pwr())
await uasyncio.sleep(sec)
rgb = RGB()
asyncio.run(rgb.test())