##################################################
# Workshop : Rudolph the Red Nosed Reindeer 2021 #
# BotBerg  -  bas@botberg.nl  -  Bas op ten Berg #
##################################################

# Rudolph wordt geprogrammeerd in MicroPython,
# een afgeleide van de programmeertaal Python.
# Door het gebruik van de onderstaande codes kan
# de neus van Rudolph aan- en uitgezet worden, kunnen
# de lampjes in de kerstboom aangestuurd worden,
# wordt het haardvuur in het huisje aangezet en
# worden de rode en groene lampjes in het huis bestuurd.
# De voorpoot van Rudolp kan bestuurd worden en door
# het draaien aan de kerstster kan de verschillende
# elementen beinvloeden.

### Allereerst worden er 4 standaard acties aangezet
## 1. Inladen bibliotheken voor stnandaard functies
## 2. Functies voor de poot van Rudolph en het uitlezen van de stand van de kerstster
## 3. Omzetten van de stand van de kerstster naar een wachttijd 0-2 seconde
## 4. Alle LEDs een naam geven en definieren op welke pinnetje hij vastgemaakt is

## 1. Inladen bibliotheken voor stnandaard functies
import time
import board
import pwmio
import analogio 
import digitalio
import random
from adafruit_motor import servo

## 2. Functies voor de poot van Rudolph en het uitlezen van de stand van de kerstster
pwm = pwmio.PWMOut(board.GP26, duty_cycle=2 ** 15, frequency=50)
servo1 = servo.Servo(pwm)
potentiometer = analogio.AnalogIn(board.A1)

## 3. Omzetten van de stand van de kerstster naar een wachttijd 0-2 seconde
def get_ster(pin):
    return (pin.value * 2) / 65536    # 2 = 2 seconde

## 4. Alle LEDs krijgen een eigen naam en worden verbonden aan een aansluitpin 
ledneus = digitalio.DigitalInOut(board.GP20)
ledneus.direction = digitalio.Direction.OUTPUT
ledkerstboomrood = digitalio.DigitalInOut(board.GP16)
ledkerstboomrood.direction = digitalio.Direction.OUTPUT
ledkerstboomgeel = digitalio.DigitalInOut(board.GP17)
ledkerstboomgeel.direction = digitalio.Direction.OUTPUT
ledhuisrood = digitalio.DigitalInOut(board.GP19)
ledhuisrood.direction = digitalio.Direction.OUTPUT
ledhuisgroen = digitalio.DigitalInOut(board.GP18)
ledhuisgroen.direction = digitalio.Direction.OUTPUT
ledhaardvuur = digitalio.DigitalInOut(board.GP21)
ledhaardvuur.direction = digitalio.Direction.OUTPUT

## Namen van de LEDs
# ledneus 
# ledkerstboomrood 
# ledkerstboomgeel 
# ledhuisrood 
# ledhuisgroen 
# ledhaardvuur 

## Aan- en uitzetten van de LED lampjes
# ledneus.value = True : aanzetten lampje in neus
# ledneus.value = False : uitzetten lampje in neus
# ledneus.value = not ledneus.value : omschakelen lampje in neus

## Bewegen van de poot van Rudolph
# servo1.angle = 180 : poot Rudolph omlaag
# servo1.angle = 0 : poot Rudolph omhoog

## Wachttijd inbouwen
# time.sleep(0.5) : wachten 0,5 seconde
# time.sleep(3) : wachten 3 seconde
# time.sleep(get_ster(potentiometer)) : wachten, afhankelijk van stand van ster 0-2 seconde



### VANAF HIER KAN DE PYTHON CODE GEWIJZIGD WORDEN

#Opstartroutine waarin alle LEDs aangaan en weer uitgaan
ledneus.value = True
time.sleep(1)
servo1.angle = 180
time.sleep(1)
ledkerstboomrood.value = True
time.sleep(1)
ledkerstboomgeel.value = True
time.sleep(1)
ledhaardvuur.value = True
time.sleep(1)
ledhuisgroen.value = True
time.sleep(1)
ledhuisrood.value = True
time.sleep(1)
servo1.angle = 100
time.sleep(1)
ledneus.value = False
ledkerstboomrood.value = False
ledkerstboomgeel.value = False
ledhaardvuur.value = False
ledhuisgroen.value = False
ledhuisrood.value = False
time.sleep(2)


while True:
    ledneus.value = not ledneus.value
    time.sleep(get_ster(potentiometer))
    


# teller1 = 0
# teller2 = 0
# 
# while True:
#     teller1 = teller1 + 1
#     teller2 = teller2 + 1
#     
#     ledneus.value = not ledneus.value
#     time.sleep(get_ster(potentiometer))
#     
#     servo1.angle = 180
#     time.sleep(get_ster(potentiometer))
#     servo1.angle = 100
#     time.sleep(get_ster(potentiometer))
#     
#     if teller1 <= 2:
#         ledkerstboomgeel.value = not ledkerstboomgeel.value
#         ledkerstboomrood.value = not ledkerstboomgeel.value
#     
#     if teller1 >2:
#         ledkerstboomgeel.value = True
#         ledkerstboomrood.value = True
# 
#     if teller1 == 5:
#         teller1 = 0
#         
#     if teller2 > 3:
#         ledhaardvuur.value = True
# 
#     if teller2 <= 3:
#         ledhaardvuur.value = False
#         
#     if teller2 > 5 and teller2 <= 10:
#         ledhuisgroen.value = True
#         ledhuisrood.value = True
# 
#     if teller2 > 10:
#         ledhuisgroen.value = not ledhuisgroen.value
#         
#     if teller2 >20:
#         ledhuisgroen.value = False
#         time.sleep(1)
#         ledhuisrood.value = False
#         time.sleep(1)
#         ledhaardvuur.value = False
#         time.sleep(1)
#         ledkerstboomrood.value = False
#         time.sleep(1)
#         ledkerstboomgeel.value = False
#         time.sleep(1)
#         ledneus.value = False
#         time.sleep(5)
#         
#         teller1 = 0
#         teller2 = 0
