Beskrivelse
Hvis man gerne vil bruge knappen til at kunne skifte mellem lyssekvenser – eller f.eks. slukke for lystrekanten – uden at hive strømstikket ud, så skal der tilføjes lidt ekstra linjer til vores Python program fra step 3:
Kredsløb: Prøv at tilføje knappen til dit kredsløb
Kodeeksempel: Lav knap-styrede farveskrift
from neopixel import Neopixel
from utime import sleep
from farve import FARVE, REGNBUE_SEKVENS
import machine
# Defination af trekanterne 0-5. Tallene angiver de pixels der er med i hver trekant.
# Disse skal muligvis tilpasses til dit system
trekantNum = [
[0, 42], #trekant 0: 43 dioder
[43, 62], #trekant 1: 20 dioder
[63, 82], #trekant 2: 20 dioder
[83, 102], #trekant 3: 20 dioder
[103, 122], #trekant 4: 20 dioder
]
pixels = Neopixel(trekantNum[-1][-1]+1,0,0,"GRB")
button = machine.Pin(3, machine.Pin.IN, machine.Pin.PULL_DOWN) # Opret en knap med en indbygget pull-down
state = 0 # tilstandsvariabel til at bruge sammen med knappen
# Funktion til at lave en gradient i hver trekant
# trekant: 0-4 - valg af trekant
# farve1: hvilken farve der skal startes fra. Se farve.py for mulige farver
# farve2: hvilken farve der skal gradieres til
# lysstyrke: 0-255
def sæt_gradient_trekant(trekant, farve1, farve2, lysstyrke):
start_pixel = trekantNum[trekant][0]
slut_pixel = trekantNum[trekant][-1]
pixels.set_pixel_line_gradient(start_pixel, slut_pixel, farve1, farve2, lysstyrke)
pixels.show()
# Funktion der sætter farven i en hel trekant.
# trekant: 0-4 - valg af trekant
# farve: se filen farve.py for de farver der kan tilgås
# lysstyrke: 0-255
def sæt_farve_trekant(trekant, farve, lysstyrke):
start_pixel = trekantNum[trekant][0]
slut_pixel = trekantNum[trekant][-1]
pixels.set_pixel_line(start_pixel, slut_pixel, farve, lysstyrke)
pixels.show()
# Funktion til at lave en gradient i over hele lampen
# farve1: hvilken farve der skal startes fra. Se farve.py for mulige farver
# farve2: hvilken farve der skal gradieres til
# lysstyrke: 0-255
def sæt_gradient_lampe(farve1, farve2, lysstyrke):
start_pixel = trekantNum[0][0]
slut_pixel = trekantNum[-1][-1]
pixels.set_pixel_line_gradient(start_pixel, slut_pixel, farve1, farve2, lysstyrke)
pixels.show()
# Funktion der sætter farven i hele lampen.
# farve: se filen farve.py for de farver der kan tilgås
# lysstyrke: 0-255
def sæt_farve_lampe(farve, lysstyrke):
pixels.brightness(lysstyrke)
pixels.fill(farve)
pixels.show()
# Funktion der laver en gradient i de fire foreste trekanter
# farve1: hvilken farve der skal startes fra. Se farve.py for mulige farver
# farve2: hvilken farve der skal gradieres til
# lysstyrke: 0-255
def sæt_gradient_forside(farve1, farve2, lysstyrke):
start_pixel = trekantNum[1][0]
slut_pixel = trekantNum[-1][-1]
pixels.set_pixel_line_gradient(start_pixel, slut_pixel, farve1, farve2, lysstyrke)
pixels.show()
# Skriv din egent kode herunder, der bruger de ovenstående funktioner:
# Eksempel på hvordan man kan lave knap-styrede farveskift
while True:
if button.value() == 1: # tjek om knappen er trykket ind
if state == 0:
state = 1
sæt_farve_lampe(FARVE['violet'],255)
else:
state = 0
sæt_farve_lampe(FARVE['grøn'],255)
sleep(0.2) # Undgå prel - når knappen trykkes ind skifter den tilstand (tændt/slukket) mange gange, men ved at indsætte en pause undgår vi at den bliver læst med det samme igen.
Tilføjet kode
Det der er tilføjet i forhold til programmet fra sidste step er disse linjer:
import machine
button = machine.Pin(3, machine.Pin.IN, machine.Pin.PULL_DOWN) # Opret en knap med en indbygget pull-down
state = 0 # tilstandsvariabel til at bruge sammen med knappen
# Eksempel på hvordan man kan lave knap-styrede farveskift
while True:
if button.value() == 1: # tjek om knappen er trykket ind
if state == 0:
state = 1
sæt_farve_lampe(FARVE['violet'],255)
else:
state = 0
sæt_farve_lampe(FARVE['grøn'],255)
sleep(0.2) # Undgå prel - når knappen trykkes ind skifter den tilstand (tændt/slukket) mange gange, men ved at indsætte en pause undgår vi at den bliver læst med det samme igen.
Beskrivelse af koden
# Eksempel på hvordan man kan lave knap-styrede farveskift
while True:
if button.value() == 1: # tjek om knappen er trykket ind
state += 1
if state == 1:
sæt_farve_lampe(FARVE['violet'],255)
elif state == 2:
sæt_farve_lampe(FARVE['orange'],255)
elif state == 3:
sæt_farve_lampe(FARVE['rød'],255)
elif state == 4:
state = 0
sæt_farve_lampe(FARVE['grøn'],255)
sleep(0.2) # Undgå prel - når knappen trykkes ind skifter den tilstand (tændt/slukket) mange gange, men ved at indsætte en pause undgår vi at den bliver læst med det samme igen.
Opgave: Kan du lave et program der skifter mellem 3 forskellige farvetilstande (du må selv bestemme hvilke) – men den ene af dem skal være helt slukket.
Beskrivelse
Her er eksempler på mere avancerede programmer – dette eksempel gør ikke brug af knappen
Kodeeksempel: Prøv at sætte dette ind i main
# Skriv din egen kode herunder, der bruger de ovenstående funktioner:
# Her er et eksempel på hvordan alle trekanter tændes i samme farve.
sæt_farve_lampe(FARVE['pink'],50)
sleep(2)
# Her er et eksemppel på hvordan de enkelte trekanter tændes i hver deres farve.
sæt_farve_trekant(0, FARVE['gul'],255)
sæt_farve_trekant(1, FARVE['rød'],255)
sæt_farve_trekant(2, FARVE['hvid'],255)
sæt_farve_trekant(3, FARVE['grøn'],255)
sæt_farve_trekant(4, FARVE['blå'],255)
sleep(2)
# Her er et eksempel på hvordan forsiden laver gradient fra rød til blå og sætter en dæmpet hvid baggrund
sæt_gradient_forside(FARVE['rød'], FARVE['blå'], 150)
sæt_farve_trekant(0, FARVE['hvid'],5)
sleep(2)
# Her er et eksempel på hvordan de 3 ydre trekanters farve roterer om en gul midte,
# alt imens baggrunden blinker pink
farve_sekvens = [FARVE['rød'], FARVE['grøn'], FARVE['blå']]
sæt_farve_trekant(3, FARVE['gul'],255)
for i in range(10):
sæt_farve_trekant(1, farve_sekvens[i % 3],255)
sæt_farve_trekant(4, farve_sekvens[(i+1) % 3],255)
sæt_farve_trekant(2, farve_sekvens[(i+2) % 3],255)
sæt_farve_trekant(0, FARVE['pink'], 100*(i%2))
sleep(0.5)