72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
import uasyncio as asyncio
|
|
import machine
|
|
|
|
class LED():
|
|
def __init__(self, pin):
|
|
self.pin = machine.PWM(machine.Pin(pin),freq=1000,duty=512)#,machine.Pin.OUT
|
|
self.pwmDutyOff = 0
|
|
self.pwmDutyOn = 1023
|
|
self.pwmDuty = 0
|
|
self.blinkRateOff = None
|
|
self.blinkRateOn = None
|
|
self.blinkRate = None
|
|
self.onState = False
|
|
self.blinkOn = False
|
|
self.alarmWentOff = False
|
|
loop = asyncio.get_event_loop()
|
|
loop.create_task(self._update_async())
|
|
|
|
async def _update_async(self):
|
|
self.pin.duty(0)
|
|
while True:
|
|
if self.blinkRate == None:
|
|
await asyncio.sleep_ms(200)
|
|
else:
|
|
self.pin.duty(self.pwmDuty if self.blinkOn else 0)
|
|
self.blinkOn = not self.blinkOn
|
|
waited=0
|
|
blinkWaitMs = int(500 / self.blinkRate)
|
|
while waited < blinkWaitMs:
|
|
toWait = min(50,blinkWaitMs)
|
|
await asyncio.sleep_ms(toWait)
|
|
waited += toWait
|
|
if self.blinkRate == None:
|
|
break
|
|
blinkWaitMs = int(500 / self.blinkRate)
|
|
|
|
def toggle(self):
|
|
self.onState = not self.onState
|
|
self.value(self.onState)
|
|
|
|
def setOnState(self, blinkRate = None, pwmDuty = 1023):
|
|
self.blinkRateOn = blinkRate if blinkRate != None and blinkRate >= 0 else None
|
|
self.pwmDutyOn = pwmDuty
|
|
if self.onState:
|
|
self.blinkRate = self.blinkRateOn if self.onState else self.blinkRateOff
|
|
self.pwmDuty = (self.pwmDutyOn if self.onState else self.pwmDutyOff)
|
|
self.pin.duty(self.pwmDuty if self.blinkRate == None else 0)
|
|
|
|
|
|
def setOffState(self, blinkRate = None, pwmDuty = 0):
|
|
self.blinkRateOff = blinkRate if blinkRate != None and blinkRate >= 0 else None
|
|
self.pwmDutyOff = pwmDuty
|
|
if not self.onState:
|
|
self.blinkRate = self.blinkRateOn if self.onState else self.blinkRateOff
|
|
self.pwmDuty = (self.pwmDutyOn if self.onState else self.pwmDutyOff)
|
|
self.pin.duty(self.pwmDuty if self.blinkRate == None else 0)
|
|
|
|
|
|
def on(self):
|
|
self.value(True)
|
|
|
|
def off(self):
|
|
self.value(False)
|
|
|
|
def value(self,value=None):
|
|
if value!=None:
|
|
self.onState = value
|
|
self.blinkRate = self.blinkRateOn if self.onState else self.blinkRateOff
|
|
self.pwmDuty = (self.pwmDutyOn if self.onState else self.pwmDutyOff)
|
|
self.pin.duty(self.pwmDuty if self.blinkRate == None else 0)
|
|
return self.onState
|
|
|