2020-03-27 19:06:36 +01:00

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