import time
from machine import Pin, PWM
# Maak een servo-object aan
servo_pin = 25
pwm_output = PWM(Pin(servo_pin), freq=50, duty=0)
# Initialisatie van variabelen
servo_vorige_tijd = time.ticks_ms()
servo_vertraging = 30
slagboom_gesloten = False
step = 75
max_steps = 75
step_size = 1
timestamp = 0
led_status = 0
knipper_interval = 500
led_pins = [21, 22, 23]
# Initialiseer LED-pinnen
for pin in led_pins:
led = Pin(pin, Pin.OUT)
led.value(0)
# Functie om LED's aan te sturen
def stuur(led1, led2, led3):
Pin(led_pins[0], Pin.OUT).value(led1)
Pin(led_pins[1], Pin.OUT).value(led2)
Pin(led_pins[2], Pin.OUT).value(led3)
# Functie om de slagboom te sluiten
def slagboom_sluiten():
global step, slagboom_gesloten, servo_vorige_tijd
if time.ticks_diff(time.ticks_ms(), servo_vorige_tijd) > servo_vertraging:
servo_vorige_tijd = time.ticks_ms()
pwm_output.duty(step)
step += 1
if step > max_steps:
slagboom_gesloten = True
step = max_steps
# Functie om de slagboom te openen
def slagboom_openen():
global step, slagboom_gesloten, servo_vorige_tijd
if time.ticks_diff(time.ticks_ms(), servo_vorige_tijd) > servo_vertraging:
servo_vorige_tijd = time.ticks_ms()
pwm_output.duty(step)
step -= 1
if step < 0:
slagboom_gesloten = False
step = 0
# Functie om LED's te laten knipperen
def knipperen(status1, status2, status3):
global timestamp, led_status
if time.ticks_diff(time.ticks_ms(), timestamp) >= knipper_interval:
timestamp = time.ticks_ms()
led_status = not led_status
stuur(status1, status2, status3)
# Hoofdlus
knop1 = Pin(4, Pin.IN, Pin.PULL_UP)
vorige_knop_status = knop1.value()
timer_start = 0 # Timer voor vertraging
while True:
knop1_ingedrukt = not knop1.value()
if knop1_ingedrukt and vorige_knop_status == 1:
if not slagboom_gesloten: # Alleen als de slagboom open is
timer_start = time.ticks_ms() # Start de timer
slagboom_gesloten = not slagboom_gesloten
if slagboom_gesloten:
if time.ticks_diff(time.ticks_ms(), timer_start) >= 2000: # 2 seconden vertraging
slagboom_sluiten()
knipperen(0, led_status, not led_status)
else:
slagboom_openen()
if step == 0:
knipperen(led_status, 0, 0)
else:
knipperen(0, led_status, not led_status)
vorige_knop_status = knop1.value()