• 3/6

Programmer Lystrekanten

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.

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:
]

  • sætter farven for en af de 5 trekanter. Alle farverne er defineret i farve.py-filen, så du kan åbne den og se hvad mulighederne er, men du får også listen her:

    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?

     

    Spørgsmål: Kan du lave et program hvor hele lampen skifter mellem 2 farver i intervaller på 1 sekund?

    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.