Rainbow.lib

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ansteuern von LED-Leuchtbändern (ws2812b) mit der rainbow.lib
    Einleitung

    Die hier beschriebene Library, soll den BASCOM Programmierer bei der Ansteuerung von RGB-Led Streifen auf Basis des Typs WS2812(b) unterstützen und liefert dazu die grundlegenden Elemente und noch mehr. Dazu gehören insbesondere die Generierung des erforderlichen Datenstroms, sowie einfach anzuwendende Routinen, bezüglich der Farbgebung einzelner LED oder einer Musterbildung.
    Eine geschickte Kopplung dieser Routinen ermöglicht eine hohe Vielfalt an Möglichkeiten. Die Library vereinfacht die Verwendung von LED-Streifen. Dazu dimensioniert, verwaltet und bedient die Library die nötigen Speicherräume.

    Seit der Version 2.0.7.9 ist die Rainbow-Library in Gestalt der RainbowBSC.Lib, Bestandteil von BASCOM-AVR. Zur Implementierung der Rainbow-Funktionen in die BASCOM-Umgebung und um Namenskonflikte mit bestehenden BASCOM-Befehlen auch in Zukunft auszuschließen, wurde die RainbowBSC-Library entsprechend angepasst. Ferner ist es nach heutigem Stand nicht geplant, die ursprüngliche Lib weiter zu entwickeln. Eventuelle Korrekturen sind davon natürlich ausgeschlossen.


    Hardware


    Chips vom Typ WS2812 und WS2812b basieren auf der Technik des IC WS2811 - ein RGB-LED Treiber mit Pulsweitenmodellierung und Ein-Drahtschnittstelle.
    In einem WS2812er sind bereits eine RGB-LED und die Funktionalität eines WS2811 in einem Gehäuse kombiniert.
    Diese Bauteile gibt es einzeln oder bereits als Lichterkette fertig montiert, in unterschiedlichen Längen erhältlich. Auch gibt es Angebote, bei denen diese LED-Typen in Ringform auf einer Leiterkarte aufgebracht sind und vieles mehr.
    Eine wirklich angenehme Eigenschaft dieses IC ist sein Konzept der DaisyChain Topologie.
    Obendrein, wird außer der Spannungsversorgung nur ein Pin vom Mikroprozessor in Anspuch genommen. Damit sind diese LED's gegenüber einer LED-Matrix eine echte Alternative, was die Prozessorlast und auch die Belegung von IO-Pins anbelangt.







    Beispielschaltung




    Implementierung




    Um die Library in einem BASCOM-Programm verwenden zu können, sind die folgenden Zeilen in den Programmcode zu integrieren:

    BASCOM-Quellcode

    1. $Lib "Rainbow.lib"
    2. $external WS2812b


    Damit ist die Basisimplementierung abgeschlossen. Zu dieser Basis gehören drei Routinen:

    BASCOM-Quellcode

    1. Declare Sub Select_Rainbow (byval Channel As Byte)
    2. Declare Sub SetColor (byval LedNr As Word , Color() as Byte)
    3. Declare Sub Send()


    Alle weiteren zur Verfügung stehenden Routinen sind, wie im Folgenden gezeigt zu implementieren:

    BASCOM-Quellcode

    1. Declare Sub Fill(Color() as Byte):$external USE_FILL
    2. Declare Sub Fill_Colors(Color() as Byte) : $external USE_FILL' new v1.2
    3. Declare Sub Fill_Stripe(Color() as Byte) : $external USE_FILL_Stripe ' new v1.2
    4. Declare Sub Clear_Stripe() : $external Use_Clear_Stripe
    5. Declare Sub Clear_Colors() : $external Use_Clear_Colors
    6. Declare Sub Swap_Color (byval LedNr1 As Word , Byval LedNr2 As Word):$external USE_SWap_Color
    7. Declare Sub Rotate_Left (byval Left_index As Word , Byval Width As Word) :$external USE_Rotate_Left
    8. Declare Sub Rotate_Right (byval Left_index As Word , Byval Width As Word) :$external USE_Rotate_Right
    9. Declare Sub Shift_Right (byval Left_index As Word , Byval Width As Word) :$external USE_Shift_Right
    10. Declare Sub Shift_Left (byval Left_index As Word , Byval Width As Word) :$external USE_Shift_Left
    11. Declare Sub AND_Color (byval LedNr As Word , Color() as Byte) :$external USE_AND_Color
    12. Declare Sub OR_Color (byval LedNr As Word , Color() as Byte) :$external USE_OR_Color
    13. Declare Sub ADD_Color (byval LedNr As Word , Color() as Byte) :$external USE_ADD_Color
    14. Declare Sub SUB_Color (byval LedNr As Word , Color() as Byte) :$external USE_SUB_Color
    15. Declare Sub Change_Pin (Byval Port as Byte , Byval Pin as Byte) :$external USE_Change_Pin
    16. Declare Sub SetTableColor (byval LedNr As Word , Byval index As Byte) :$external USE_SetTableColor
    17. Declare Function GetColor (byval LedNr As Word)as Byte:$external USE_GetColor
    18. Declare Function LookUp_Color(Byval index As Byte) as Byte : $external USE_LookUp_Color 'new v1.2
    Alles anzeigen



    Wird eine Routine oder Funktion nicht benötigt, kann die entsprechende Zeile auskommentiert oder gelöscht werden, um den ansonsten benötigten Programmspeicherplatz freizugeben. Davon ausgenommen sind die drei Routinen Select_Rainbow(), SetColor() und Send(), deren Deklaration vorausgesetzt wird.


    Mit dieser Library können bis zu 8 LED-Streifen unabhängig voneinander bedient werden. Dazu verwaltet die „Rainbow.Lib“ ebenso viele Farbdatenspeicher und Konfigurationsdaten, die zusammen jeweils einen Rainbow oder Kanal bilden.

    Um die Routinen der Library auf einen LED-Streifen anwenden zu können, muss mindestens ein Kanal implementiert werden.


    So wird ein Kanal erzeugt:

    BASCOM-Quellcode

    1. '#Rainbow0
    2. Const Rainbow0_Len = 8
    3. Const Rainbow0_Port = PORTB
    4. Const Rainbow0_Pin = PB0


    Und so ein weiterer:

    BASCOM-Quellcode

    1. '#Rainbow1
    2. Const Rainbow1_Len = 16
    3. Const Rainbow1_Port = PORTC
    4. Const Rainbow1_Pin = PC3


    Die Konstantennamen sind fest vorgegeben und beginnen „Rainbow“, gefolgt von einer Kanalnummer, z.B. 0 ,1 ,2 usw. bis 7 und mit der durch einen Unterstrich getrennten Zweckbindung, z.B. „Port“.

    • Rainbow1_Len : Die Anzahl der LED die der Kanal verwalten soll, bzw. die Länge des LED-Streifens.
    • Rainbow1_Port : Der Port der dem der Kanal zugeordnet werden sollen.
    • Rainbow1_Pin : Der Portpin, von 0 bis 7 oder in der Form P[A..][0..7] Es ist durchaus möglich gleich mehrere Kanäle auf denselben Pin anzuwenden, oder den Pin bei Bedarf zur Laufzeit zu wechseln.


    Ein explizites Konfigurieren eines Pins als Ausgang ist nicht erforderlich, - das erledigt der folgende Befehl gleich mit.

    BASCOM-Quellcode

    1. Call Select_Rainbow ( ChannelNr )


    Hinweis : Alle Indizes wie ChannelNr oder LedNr sind nullbasierend


    Solange der Kanal nicht gewechselt werden soll, oder es wird nur ein Kanal verwendet, genügt es, diesen Befehl nur einmal auszuführen. Als Parameter erhält dieser Befehl die Kanalnummer.

    Das folgende Beispiel fasst die obigen Ausführungen zusammen:

    BASCOM-Quellcode

    1. $Lib "Rainbow.lib"
    2. $external WS2812b
    3. Declare Sub Select_Rainbow(byval Channel As Byte)
    4. Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
    5. Declare Sub Send()
    6. '#Rainbow0
    7. Const Rainbow0_Len = 8
    8. Const Rainbow0_Port = PORTB
    9. Const Rainbow0_Pin = PB0
    10. Call Select_Rainbow(0)
    11. 'Das Programm'
    12. End
    Alles anzeigen





    Einführungsbeispiel


    Die einfachste Methode um einer LED eine Farbe zuzuordnen stellt die Routine SetColor dar. Als Parameter wird ein 0-basierender LED-Index und ein Array der Länge 3 des Typs Byte erwartet. Zuvor muss also ein Array beliebigen namens erstellt werden, das die RGB Farbanteile aufnimmt und SetColor übergeben werden kann.

    BASCOM-Quellcode

    1. Dim Farbe(3) as Byte


    Byte1 des Array repräsentiert dabei den Rot-, Byte 2 den Grün und Byte 3 den Blau-Anteil. Für die einfachere Handhabung empfiehlt es sich Verweise auf die einzelnen Elemente anzulegen.

    BASCOM-Quellcode

    1. ROT alias Farbe (_Base)
    2. GRN alias Farbe (_Base +1)
    3. BLU alias Farbe (_Base +2)


    Soll nun die erste LED einer Kette in einer bestimmten Farbe, zB. Orange erstrahlen, kann man so vorgehen:

    BASCOM-Quellcode

    1. ROT = 200 : GRN = 100 : BLU = 0
    2. Call SetColor(0, Farbe())


    Bis hierhin wurde allerdings nur die Farbinformation an den Farbspeicher des Kanal übertragen, eine Ausgabe an die LED-Kette erfolgt dann noch mit Send() Wir fassen wieder zusammen:

    BASCOM-Quellcode

    1. $Lib "Rainbow.lib"
    2. $external WS2812b
    3. Declare Sub Select_Rainbow(byval Channel As Byte)
    4. Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
    5. Declare Sub Send()
    6. '#Rainbow0
    7. Const Rainbow0_Len = 8
    8. Const Rainbow0_Port = PORTB
    9. Const Rainbow0_Pin = PB0
    10. Dim Farbe(3) as Byte
    11. ROT alias Farbe (_Base)
    12. GRN alias Farbe (_Base +1)
    13. BLU alias Farbe (_Base +2)
    14. Call Select_Rainbow(0)
    15. ROT = 200 : GRN = 200 : BLU = 0
    16. Call SetColor(0, Farbe())
    17. Call Send()
    18. End
    Alles anzeigen





    Beispiel - Blinken


    Ein einfaches Programmbeispiel das eine LED rot blinken lässt.

    BASCOM-Quellcode

    1. 'PROGRAM:RAINBOW_EXPL_Blink_I
    2. 'DESCRIPTION: Blinking Red
    3. $Regfile = "m88def.dat"
    4. $Crystal = 16000000
    5. $hwstack = 40
    6. $swstack = 16
    7. $framesize = 32
    8. '----[IMPLEMENT RAINBOW]--------------------------------------------------------
    9. $Lib "Rainbow.lib"
    10. $external WS2812b
    11. Declare Sub Select_Rainbow(byval Channel As Byte)
    12. Declare Sub SetColor(byval LedNr As Word , Color() as Byte) Declare Sub Send()
    13. '#Rainbow0
    14. Const Rainbow0_Len = 1'just 1 Led
    15. Const Rainbow0_Port = PORTB
    16. Const Rainbow0_Pin = PB0
    17. 'Global Color-variables
    18. Dim Color(3) as Byte
    19. R alias Color(_base) : G alias Color(_base+1) : B alias Color(_base+2)
    20. '----[MAIN]--------------------------------------------------------------------
    21. Call Select_Rainbow(0)'select Rainbow
    22. Do
    23. R = not R'alternately red and dark
    24. Call SetColor(0 , color())
    25. Call Send()
    26. Waitms 500
    27. Loop
    28. End
    Alles anzeigen






    Beispiel - Knight-Rider


    Dieses Beispiel erzeugt mittels Shift-Befehlen den bekannten Knight-Rider Effekt.

    BASCOM-Quellcode

    1. 'PROGRAMM:RAINBOW_EXPL_Shift
    2. 'DESCRIPTION: Knight-Rider effect
    3. $Regfile = "m88def.dat"
    4. $Crystal = 16000000
    5. $hwstack = 40
    6. $swstack = 16
    7. $framesize = 32
    8. '----[IMPLEMENT RAINBOW]--------------------------------------------------------
    9. $Lib "Rainbow.lib"
    10. $external WS2812b
    11. Declare Sub Select_Rainbow(byval Channel As Byte)
    12. Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
    13. Declare Sub Send()
    14. Declare Sub Shift_Left(byval Left_index As Word , Byval Width As Word) : $external USE_Shift_Left
    15. Declare Sub Shift_Right(byval Left_index As Word , Byval Width As Word) : $external USE_Shift_Right
    16. '#Rainbow0
    17. Const Rainbow0_Len = 10
    18. Const Rainbow0_Port = PORTB
    19. Const Rainbow0_Pin = PB0
    20. Dim Color(3) as Byte 'gloabal Color-variables
    21. R alias Color(_base)
    22. G alias Color(_base + 1)
    23. B alias Color(_base + 2)
    24. '_______________________________________________________________________________
    25. '----[MAIN]---------------------------------------------------------------------
    26. Dim n as Byte
    27. Call Select_Rainbow(0) 'select Rainbow
    28. R = 50 : G = 0 : B = 100 'define a color
    29. Call SetColor(0 , color())
    30. Call Send()
    31. Do
    32. For n = 1 to 9
    33. Call Shift_right(0 , 10)
    34. Waitms 100
    35. Call Send()
    36. Next
    37. For n = 1 to 9
    38. Call Shift_left(0 , 10)
    39. Waitms 100
    40. Call Send()
    41. Next
    42. Loop
    Alles anzeigen






    Befehlsreferenz

    Hinweis : Alle Indizes wie ChannelNr oder LedNr sind nullbasierend


    select_Rainbow()
    BeschreibungWählt den Kanal auf den alle Routinen wirken und initialisiert den Ausgabepin gemäß der Konfiguration des angegebenen Kanals.
    Deklarationdeclare sub Select_Rainbow(byval Channel As byte)
    ParameterDie Kanalnummer vom Typ Byte, 0-7
    Beispiel





    setColor()
    BeschreibungSetzt die Farbe einer LED
    Deklarationdeclare sub SetColor(byval LedNr As word, Color() as byte)
    ParameterLedNr.......Wordvariable oder Konstante die dem Index einer LED entspricht
    Color()......Bytearray der Länge 3 das die RGB Farbinformation übergibt.
    Beispiel

    BASCOM-Quellcode

    1. Dim Farbe(3) as Byte
    2. ROT alias Farbe (_Base)
    3. GRN alias Farbe (_Base +1)
    4. BLU alias Farbe (_Base +2)
    5. ROT = 200 : GRN = 100 : BLU = 0
    6. Call SetColor(0, Farbe())
    7. Call Send()





    send()
    BeschreibungGibt die Farbinformation des aktiven Kanals an einen Pin aus
    Deklarationdeclare sub Send()
    Parameter
    Beispiel




    clear_stripe()
    BeschreibungLöscht die LED-Kette am Ausgangspin den aktiven Kanals. Die Farbinformationen im Speicher bleiben erhalten. Die Ausführung dieses Befehls hat direkte Auswirkungen, ein Aufruf von Send() ist also nicht nötig.
    Deklarationdeclare sub Clear_Stripe() : $external Use_Clear_Stripe
    Parameter
    Beispiel





    clear_colors()
    BeschreibungLöscht die Farbinformationen im Speicher des aktiven Kanals.
    Deklarationdeclare sub Clear_Colors() : $external Use_Clear_Colors
    Parameter
    Beispiel




    fill()
    BeschreibungDiese Routine arbeitet wie Clear_Colors(), belegt jedoch den gesamten Farbspeicher des aktiven Kanals mit einer Farbe.
    Die Ausführung dieses Befehls hat direkte Auswirkungen, ein Aufruf von Send() ist also nicht nötig.
    Deklarationdeclare sub Fill(Color() as byte) : $external USE_FILL
    ParameterColor()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel




    fill_colors()
    BeschreibungDiese Routine belegt den gesamten Farbspeicher des aktiven Kanals mit einer Farbe.
    Deklarationdeclare sub Fill_Colors(Color() as byte) : $external USE_FILL
    ParameterColor()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel





    fill_stripe()
    BeschreibungDiese Routine belegt den Stripe des aktiven Kanals mit einer Farbe, der Farbspeicher bleibt jedoch davon unberührt.
    Deklarationdeclare sub Fill_Stripe(Color() as byte ) : $external USE_FILL_Stripe
    ParameterColor()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel




    swap_color()
    BeschreibungTauscht die Farbinformationen zweier LED gegeneinander aus.
    Deklarationdeclare sub Swap_Color(byval LedNr1 as word, byval LedNr2 as word) : $external USE_Swap_Color
    ParameterLedNr1...Wordvariable oder Konstante
    LedNr2...Wordvariable oder Konstante
    Beispiel




    rotate_left()
    BeschreibungMit diesem Befehl können alle Farben eines Abschnittes einer LED-Kette nach links bewegt werden. Nach links heraus geschobene Farben werden rechts wieder eingeschoben.
    Deklarationdeclare sub Rotate_Left( byval Left_index As word , byval Width as word) : $external[/b]USE_Rotate_Left[/tt]
    ParameterLeft_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.

    Width..........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.
    Beispiel




    rotate_right()
    BeschreibungMit diesem Befehl können alle Farben eines Abschnittes einer LED-Kette nach rechts bewegt werden. Nach rechts heraus geschobene Farben werden links wieder eingeschoben.
    Deklarationdeclare Sub Rotate_Right( byval Left_index as word , byval Width as word ) : $external USE_Rotate_Right
    ParameterLeft_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.

    Width..........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.
    Beispiel





    shift_right()
    BeschreibungMit diesem Befehl können alle Farben oder auch nur Farben einzelner Abschnitte einer LED-Kette nach rechts bewegt werden.
    Deklarationdeclare Sub Shift_Right(byval Left_index as word, byval Width as word) : $external USE_Shift_Right
    ParameterLeft_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.

    Width...........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.
    Beispiel




    shift_left()
    BeschreibungMit diesem Befehl können alle Farben oder auch nur Farben einzelner Abschnitte einer LED-Kette nach links bewegt werden.
    Deklarationdeclare sub Shift_Left(byval Left_index as word, byval Width as word) : $external USE_Shift_Left
    ParameterLeft_Index....Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.

    Width...........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.
    Beispiel




    and_color()
    BeschreibungFührt eine AND-Operation mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch.
    Deklarationdeclare Sub AND_Color( byval LedNr as word ], Color() as byte ) : $external USE_AND_Color
    ParameterLedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.

    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel




    or_color()
    BeschreibungFührt eine OR-Operation mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch.
    Deklarationdeclare sub OR_Color( byval LedNr as word , Color() as Byte ) : $external USE_OR_Color
    ParameterLedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.

    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel




    add_color()
    BeschreibungFührt eine Addition mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch. Überläufe von Farbanteilen werden unterbunden.
    DeklarationDeclare Sub ADD_Color( byval LedNr as word , Color() as byte ) : $external USE_ADD_Color
    ParameterLedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.

    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel




    sub_color()
    BeschreibungFührt eine Subtraktion mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch. Negative Überläufe von Farbanteilen werden unterbunden.
    DeklarationDeclare Sub SUB_Color( byval LedNr as word , Color() as byte ) : $external USE_SUB_Color
    ParameterLedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.

    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.
    Beispiel





    change_pin()
    BeschreibungÄndert den Ausgabepin eines Kanals zur Laufzeit.
    Bedingt dadurch, dass die Port-Pin Kombination beim selektieren eines Kanals in das SRAM, bzw. in Variablen geladen wird, ist es möglich die Ausgabe eines Kanals zur Laufzeit auf einen anderen Pin umzuleiten.

    Hinweis: Durch Ausführung des Befehls Select_Rainbow() wird der Ausgabepin gemäß der Konfiguration des angegebenen Kanals wieder hergestellt. D.h es wird wieder der Urzustand, wie er bei der Initialisierung zugrunde lag, hergestellt.
    DeklarationDeclare Sub Change_Pin(byval Port as byte, byval Pin as byte) : $external USE_Change_Pin
    ParameterPort....Bytevariable oder Konstante mit der IO-Adresse des Ports

















    Pin......Bytevariable oder Konstante mit Angabe der Pinnummer (0-7)
    Beispiel

    BASCOM-Quellcode

    1. Const PORTneu = PORTB + &H20
    2. Call Change_Pin(PORTneu , 5)' Ausgabepin PORTB.5




    setTableColor()
    BeschreibungRGB-Daten können in einer Tabelle angelegt werden. Die Library stellt für den einfachen Zugriff einen Befehl zum Auslesen der 3 Byte langen RGB-Daten bereit. Die Daten sind unter dem Label Rainbow_Colors: aufzuführen, siehe Beispiel.
    Hinweis: Wird die Deklaration in den Programmtext eingefügt (nicht auskommentiert), erwartet der Compiler das Label Rainbow_Colors: !
    Deklarationdeclare sub SetTableColor(byval LedNr as word, byval index as byte) :$external USE_SetTableColor
    ParameterLedNr.....Wordvariable oder Konstante die dem Index einer LED entspricht.Index.....Bytevariable oder Konstante mit dem Index der Farbe.
    Beispiel

    BASCOM-Quellcode

    1. '...
    2. Call SetTableColor(0, 4)'LED 1 wird gelb'...
    3. End
    4. Rainbow_Colors:
    5. 'R,G,Bindex
    6. Data &HFF , &H00 , &H00'Red0
    7. Data &H00 , &HFF , &H00'Green1
    8. Data &H00 , &H00 , &HFF'Blue2
    9. Data &HFF , &HA5 , &H00'Orange3
    10. Data &HFF , &HFF , &H00'Yellow4
    11. Data &HFF , &H69 , &HB4'HotPink5
    Alles anzeigen












    getColor()
    BeschreibungMit dieser Funktion kann die Farbinformation einer LED des aktiven Kanal in Form eines 3 Byte langen Arrays aus dem Farbspeicher zurück gelesen werden.
    Deklarationdeclare function GetColor(byval LedNr as word)as byte :$external USE_GetColor
    ParameterLedNr.......Wordvariable oder Konstante die dem Index einer LED entspricht
    Beispiel

    BASCOM-Quellcode

    1. Dim Farbe(3) as Byte
    2. Farbe(1) = GetColor(0) 'Farbe der ersten LED zurück lesen




    lookUp_color()
    BeschreibungDiese Funktion gibt ein RGB Array aus dem Programmspeicher zurück. Es wird keine Manipulationen am Farbspeicher oder am Stripe durchgeführt. Diese Funktion dient lediglich als Hilfsfunktion.
    Deklarationdeclare function LookUp_Color(byval index as byte) as byte :$external USE_LookUp_Color
    Parameterindex.......Bytevariable oder Konstante, als Index zu den Daten einer Farbe im Programmspeicher
    Beispiel

    BASCOM-Quellcode

    1. Dim Farbe(3) as Byte
    2. Farbe() = LookUp_Color(4) 'Farbe gelb
    3. Rainbow_Colors:
    4. ' R , G , B index
    5. Data &HFF , &H00 , &H00 'Red0
    6. Data &H00 , &HFF , &H00 'Green1
    7. Data &H00 , &H00 , &HFF 'Blue2
    8. Data &HFF , &HA5 , &H00 'Orange3
    9. Data &HFF , &HFF , &H00 'Yellow4
    10. Data &HFF , &H69 , &HB4 'HotPink5
    Alles anzeigen






    FAQ
    • Welche Befehle haben direkt sichtbare Auswirkungen ohne einen expliziten Aufruf von Send()?
    Das sind neben Send() die Befehle Clear_Stripe() , Fill() und Fill_Stripe().

    • Wie wirken sich Interrupts aus?
    In dem Augenblick in dem ein Datenstrom an einen Stripe ausgegeben wird, sind Interrupts gesperrt um das erforderliche Timing nicht zu beeinträchtigen.

    • Worauf muss ich achten?
    Zwischen Befehlskombinationen wie z.B. Fill() gefolgt von Send() einen zeitlichen Abstand von mindesten 50μs zu gewährleisten.



    History
    • 05.11.2017: neue OnlineHilfe im neuen Forum
    • 15.11.2016: neue OnlineHilfe (altes Forum)
    • 23.01.2016: Version 1.21 Bugfix
    • 17.01.2015: V1.2
    • 15.01.2015: V 1.2 BETA
    • 31.12.2014: Neue Version 1.12 - aufgrund einer Fehlerbehebung.
    • 31.12.2014: Eine Beschreibung findet sich von nun an im WIKI.



    Downloads

    Datenblatt
    Library

    Bilder
    • ws2812b streifen.png

      443,85 kB, 572×266, 38 mal angesehen

    1.347 mal gelesen