from datetime import datetime
from grove.adc import ADC
from grove.button import Button
from grove.display.jhd1802 import JHD1802
from grove.grove_ryb_led_button import GroveLedButton
from math import ceil
from time import sleep, time
sensor_poort = 0
drempelwaarde = 500
interval = 15
uitschakeltijd = 10
wachttijd = 60
class GroveLightSensor:
def __init__(self, channel):
self.channel = channel
self.adc = ADC()
@property
def light(self):
return self.adc.read(self.channel)
def on_event(index, event, tm):
global knop_kort
global knop_lang
if event & Button.EV_SINGLE_CLICK:
knop_kort = True
elif event & Button.EV_LONG_PRESS:
knop_lang = True
def wis_scherm(tekst):
lcd.clear()
lcd.setCursor(0, 0)
lcd.write(tekst)
# maak objecten aan voor elke component
lichtsensor = GroveLightSensor(sensor_poort)
lcd = JHD1802()
knop = GroveLedButton(5)
knop.on_event = on_event
# controleer elke 15 seconden de sensorwaarde
while True:
# maak het scherm leeg en schakel het lampje uit
knop.led.light(False)
wis_scherm('Alarm aan')
# sensorwaarde te hoog, start alarmprocedure
if lichtsensor.light > drempelwaarde:
knop.led.blink(True)
knop_kort = False
eindtijd = time() + uitschakeltijd
wis_scherm('Alarm gaat af in:')
while time() < eindtijd:
timer = str((ceil(eindtijd - time())))
lcd.setCursor(1, 0)
lcd.write('{} seconden '.format(timer))
# annuleer alarm indien knop kort ingedrukt wordt
if knop_kort:
knop.led.light(False)
wis_scherm('Alarm {}s uit'.format(wachttijd))
sleep(wachttijd)
wis_scherm('Alarm aan')
break
else:
sleep(1)
# knop niet ingedrukt, alarm gaat af
else:
knop.led.light(True)
tijdstip = datetime.today()
wis_scherm(tijdstip.strftime("%d/%m/%Y"))
lcd.setCursor(1, 0)
lcd.write(tijdstip.strftime("%H:%M:%S"))
knop_lang = False
while True:
# reset alarm indien knop lang ingedrukt wordt
if knop_lang:
knop.led.light(False)
wis_scherm('Alarm {}s uit'.format(wachttijd * 5))
sleep(wachttijd * 5)
wis_scherm('Alarm aan')
break
else:
sleep(1)
# sensorwaarde ok, wacht op de volgende controle
sleep(interval)