from machine import Pin, ADC
from neopixel import NeoPixel
import time
regenboog = [(250,0,0),(250,125,0),(250,250,0),(0,250,0),(150,250,250),(0,0,250),(110,0,250),(250,0,175)]
# Initialisatie van de NeoPixel driver
PIN_NUMMER = 23 # GPIO pin nummer
LED_AANTAL = 16 # Aantal NeoPixels
POT_PIN = 34 # Pin verbonden met de potmeter
KNOP_PIN = 32 # Pin verbonden met de onderbreekknop
# Instellen van de pin en NeoPixel object
pin = Pin(PIN_NUMMER, Pin.OUT)
np = NeoPixel(pin, LED_AANTAL)
# Initialiseer de potmeter en de knop
pot = ADC(Pin(POT_PIN))
knop = Pin(KNOP_PIN, Pin.IN, Pin.PULL_DOWN) # Knop met interne pull-down weerstand
index = 0 # Index om de huidige LED bij te houden
laatste_tijd = time.ticks_ms() # Huidige tijd in milliseconden
vertraging = 0 # Globale variabele voor vertraging
pauze = 0 # Status van de pauze
vorige_knop_status = 0 # Vorige status van de knop
def vertraging_functie():
global vertraging # Maak de globale variabele toegankelijk
pot_value = pot.read() # Lees de waarde van de potmeter (0-4095)
# Bepaal de schaalfactor
schaal_factor = pot_value / 4095 # Normaliseer de potmeterwaarde naar een bereik van 0 tot 1
# Bereken de vertraging
minimale_vertraging = 0.2 # Stel de minimale vertraging in op 0.2 seconden
maximale_vertraging = 1.0 # Stel de maximale vertraging in op 1.0 seconden
vertraging = minimale_vertraging + (schaal_factor * (maximale_vertraging - minimale_vertraging))
def toggle_pauze():
global pauze
pauze = not pauze # Toggle de pauze status
time.sleep(0.2) # Debounce tijd voor de knop
def reset_leds():
for i in range(LED_AANTAL):
np[i] = (0, 0, 0) # Zet alle LED's uit
np.write() # Schrijf de buffer naar de LED-strip
while True:
huidige_tijd = time.ticks_ms() # Huidige tijd in milliseconden
vertraging_functie() # Verkrijg de vertraging op basis van de potmeter
# Controleer de status van de knop
huidige_knop_status = knop.value() # Lees de huidige status van de knop
if huidige_knop_status and not vorige_knop_status: # Als de knop net is ingedrukt
toggle_pauze() # Toggle de pauze status
laatste_tijd = huidige_tijd # Update de laatste tijd
vorige_knop_status = huidige_knop_status # Update de vorige knop status
if not pauze: # Alleen doorgaan als de cyclus niet gepauzeerd is
if huidige_tijd - laatste_tijd >= vertraging * 1000: # Controleer of de vertraging is verstreken
if index < LED_AANTAL: # Als de index kleiner is dan het aantal leds
np[index] = regenboog[index % len(regenboog)] # Kleur toewijzen aan de huidige LED
np.write() # Schrijf de buffer naar de LED-strip
index += 1 # Verhoog index
laatste_tijd = huidige_tijd # Update de laatste tijd
else:
reset_leds() # Reset alle LED's
index = 0 # Reset index
'''Wat doet nu eigenlijk dit: index % len(kleuren)?
hier zegt men eigenlijk als de index leds groter is dan
de index van de lijst kleuren m.a.w het aantal kleuren die in de lijst kleuren zit
dan word de index van de lijst kleuren terug gestart van de 0 de index lijst kleuren
dit tot dat het aantal leds die in de index leds zitten op zijn
in deze code zijn dit 8 kleuren die in de lijst kleuren zitten
en er zijn 16 leds geinitialiseert
wat wil zeggen dat de lijst 2 maal zal getoond worden
indien de kleuren lijst het aantal leds overschrijd
zullen alleen de kleuren getoond worden gelijk aan het aantal leds
bv je hebt 24 kleuren maar je hebt maar 16 leds
dan zullen alleen de eerste 16 kleuren getoond worden zijnde
van index 0 tot index 15
op deze manier wordt je lijst dynamisch zonder dat je lijst out of range zal kunnen gaan
indien deze regel er niet zou staan zou de code ook nog altijd werken
voor het aantal kleuren die er in de lijst zitten en zal dan een foutmelding geven
dus kan je deze regel weglaten?
ja dit kan maar dan zal je altijd evenveel kleuren
in de lijst kleuren moeten zetten
dan het aantal leds dat je hebt geinitialiseert
'''