Beskrivelse
Standardeksempel på at sætte de 4 trekanter + bagbelysningen til hver deres farve.
Vi bruger de 3 pythonfiler,
– main.py
– neopixel.py
– farve.py
neopixel.py og farve.py skal lægges ned på pico’en først, da de fungerer som bilioteker, som main.py bruger, når det udføres.
Download filerne:
Step 1
Når du har hentet filerne ovenstående åbner du dem alle i Thonny, slutter lystrekanternes pico til computeren og Thonny og gemmer neopixel.py og farve.py på pico’en som vist nedenstående.
Note: Husk at checke at navnet bliver det rigtige, og at skrive .py til sidste. Det samme gøres med neopixel.py – filen.
Til sidst finder du main.py – filen og åbner den, hvis du ikke allerede har gjort det.
Kode: Denne kode kan du tage udgangspunkt i når du skal programmere din lystrekant
Note: i bunden af koden kan du skrive din egen kode, som tager udgangspunkt i kodens funktioner.
from neopixel import Neopixel
from utime import sleep
from farve import FARVE, REGNBUE_SEKVENS
# 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")
# 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:
Beskrivelse af ovenstående kode
Programmet har en masse #kommentarer, der fortæller mere om hvordan det virker men de vigtigste dele og funktioner er beskrevet her:
- er et såkaldt dobbeltarray eller en liste af lister, hvor hver miniliste angiver en del-strip i lystrekanten. Trekanten er jo bygget op af 5 individuelle led-strip-dele – bagbelysningstrekanten og de 4 trekanter foran. De korte lister med 2 elementer i fortæller nummeret på den første neopixel og den sidste neopixel i hver trekant. Og i python starter nummereringen jo fra 0. Programmet er også lavet sådan at det totale antal leds i trekanten beregnes ud fra trekantNum i funktionen .
trekantNum = [
[0, 42], #trekant 0:
[43, 62], #trekant 1:
[63, 82], #trekant 2:
[83, 102], #trekant 3:
[103, 122], #trekant 4:
]
Farvemuligheder:
– ‘hvid’
– ‘pink’
– ‘højrød’
– ‘rød’
– ‘laks’
– ‘orange’
– ‘gul’
– ‘oliven’
– ‘lime’
– ‘grøn’
– ‘turkis’
– ‘blågrøn’
– ‘blå’
– ‘marineblå’
– ‘indigo’
– ‘violet’
– ‘lilla’
– ‘magenta’
– ‘off’
- Off betyder slukket, så den kan bruges hvis du vil slukke en trekant helt. For at bruge farverne, skal du indsætte dem på den her måde: , hvor de kaldes gennem FARVE-typen fra farve.py. Hvis vi skal nørde lidt mer Pythone er denne type en såkaldt Dictionary (https://www.w3schools.com/python/python_dictionaries.asp) eller på dansk “ordbog”, hvor data gemmens som key:value sæt, og i dette tilfælde er key teksstrengen med farven – altså f.eks. “marineblå” – den key/nøgle henviser så til de faktiske r,g,b-farver, der beskriver marineblå: , . Den sidste parameter er lysstyrke, og det er en værdi mellem 0 og 255, der fortæller hvor kraftigt lyset skal være.
- sætter en gradient i en trekant hvor farverne i lysdioderne i strip’en er forskellige startende fra farve 1 og med en glidende ændring i hver lysdiode frem til den sidste, som får farve 2. Lysstyrke er den samme som ovenstående.
- fungerer ligesom sæt_farve_trekant, men sætter samme farve for alle 5 trekanter.
- fungerer ligesom sæt_gradient_trekant, men sætter en gradient for hele strip’en gennem alle 5 trekanter.
- sætter en samlet gradient gennem de 4 forreste trekanter.
Kodeeksempel: Tænder trekanterne i hver deres farve
# Her er et eksemppel på hvordan de enkelte trekanter tændes i hver deres farve.
sæt_farve_trekant(0, FARVE['rød'],255)
sæt_farve_trekant(1, FARVE['gul'],255)
sæt_farve_trekant(2, FARVE['blå'],255)
sæt_farve_trekant(3, FARVE['orange'],255)
sæt_farve_trekant(4, FARVE['grøn'],255)
Opgave 1: Prøv at skrive nedenstående linjer ind i bunden af main.py og lad os prøve programmet. Så skulle du gerne få følgende lys i din lystrekant:
Opgave 2: Hvis du vil prøve nogle af de andre funktioner, kan du evt ændre til:
# Her er et eksempel på hvordan hele trekanten sættes til samme farve
sæt_farve_lampe(FARVE['violet'],255)
som ser sådan her ud (se billede til højre):
Opgave 3: eller prøv en gradient gennem alle trekanterne:
# Her er et eksempel på hvordan hele trekanten sættes til en gradient
sæt_gradient_lampe(FARVE['hvid'],FARVE['rød'],255)
Opgave 4: Eller en forskellig gradient i hver trekant:
# Her er et eksempel på hvordan hele trekanten sættes til en gradient
sæt_gradient_lampe(FARVE['hvid'],FARVE['rød'],255)
# Her er et eksempel på hvordan der kan sættes en gradient for hver trekant
sæt_gradient_trekant(0,FARVE['rød'],FARVE['blå'],255)
sæt_gradient_trekant(1,FARVE['gul'],FARVE['grøn'],255)
sæt_gradient_trekant(2,FARVE['orange'],FARVE['lime'],255)
sæt_gradient_trekant(3,FARVE['pink'],FARVE['oliven'],255)
sæt_gradient_trekant(4,FARVE['blågrøn'],FARVE['magenta'],255)
Opgave 5: Kan du lave en gradient gennem de forreste trekanter, der går fra blå til rød?
Svaret:
# Eksempel på hvordan man kan lave tidsstyrede farveskift, der gentages uendeligt
while True:
sæt_farve_lampe(FARVE['violet'],255)
sleep(1)
sæt_farve_lampe(FARVE['grøn'],255)
sleep(1)
Skriv til os
Hvis du har spørgsmål til vores forening eller vores forløb - også gerne hvis du kunne tænke dig at være frivillig sammen med os.