Projekt zum Nachbauen: LED-Hosenträger für Karneval

Seite 5: PICAXE-Ansteuersoftware

Inhaltsverzeichnis

Hier finden Sie den Quellcode für die Programmierung der Hosenträger.

Am Anfang des Codes können die Größe des SPI-RAMs in kBytes, die Anzahl LEDs sowie die gewünschte LED-Helligkeit in Prozent angegeben werden.
symbolSPI_RAM_SIZE_KB=128
symbolNUMBER_OF_LEDS=40
symbolLED_BRIGHTNESS_PERCENT=25

Die Definition eines LED-Musters, also das Schreiben ins RAM erfolgt über folgende Makros:

DEFINE_PATTERN_NUMBER(par_patternnumber)legt die Nummer (0-x) des aktuell zu beschreibenden LED-Musters im SPI-RAM fest. Diese Nummer bleibt solange aktiv, bis sie durch erneuten Aufruf neu gesetzt wird.

DEFINE_LED_COLOR(r,g,b)legt die aktuell zu verwendenden Farbanteile rot, grün und blau (jeweils 0-255) fest, die für die LED_PATTERN_xxx Makros verwendet werden. Diese bleiben solange aktiv, bis sie durch erneuten Aufruf neu gesetzt werden.

SELECT_COLOR(x)legt ähnlich wie DEFINE_LED_COLOR die aktuell zu verwendende LED-Farbe fest, jedoch in Form eines Indizes (0-8). Kann z.B. in Schleifen verwendet werden, um einen Effekt nacheinander in verschiedenen Farben ablaufen zu lassen.
0=schwarz bzw. LED aus, 1=rot, 2=gelb, 3=grün, 4=cyan, 5=blau, 6=violett, 7=weiß, 8=schwarz bzw. LED aus

LED_PATTERN_SET_LED(par_lednumber)beschreibt eine LED im SPI-RAM mit der aktuell festgelegten Farbe. Übergabeparameter ist die Nummer der LED (0..[AnzahlLeds-1], im Beispiel also 0-39)

LED_PATTERN_SET_NEXT_LED beschreibt die nächste LED im SPI-RAM mit der aktuell festgelegten Farbe. Dies spart Zeit beim Beschreiben direkt aufeinanderfolgender LEDs eines kompletten Musters, da das SPI-RAM nicht für jede LED neu adressiert werden muss.

LED_PATTERN_FILL beschreibt das aktuelle LED-Muster im SPI-RAM komplett mit der aktuellen Farbe.

LED_PATTERN_END kann optional verwendet werden, um den Datentransfer ins SPI-RAM abzuschließen (CS wird HIGH).

Die Ausgabe eines LED-Musters aus dem SPI-RAM auf die LED-Kette erfolgt durch das Makro SHOW_LEDS(par_shownumber), wobei für par_shownumber die gewünschte Nummer des Musters (0-x) übergeben wird.

Es ist möglich, durch Verwendung von DEFINE_PATTERN mehrere LED-Muster im SPI-RAM abzulegen und diese dann durch SHOW_LEDS auszugeben, ohne die Muster jedes Mal neu berechnen zu müssen.

Im Beispiel wird in der Funktion setup als Muster 1 ein Farbverlauf abgespeichert, der dann in der Hauptschleife ausgegeben wird. Muster 0 wird in der Hauptschleife durch verschiedene Effekte mehrmals neu beschrieben und ausgegeben.

Es muss darauf geachtet werden, dass es innerhalb eines Musters keine unbeschriebenen LEDs (also mit Nullbytes im SPI-RAM) geben darf, da ansonsten die WS2812 aufgrund eines längeren LOW-Pegels vorzeitig einen Reset erkennen und nachfolgende Daten neu einlesen könnten. Ebenso darf es keine Lücken mit Nullbytes zwischen den Mustern geben.

Um Lücken innerhalb eines Musters zu vermeiden, kann man dieses vor dem wahlfreien Beschreiben über LED_PATTERN_FILL mit den aktuell gesetzten RGB-Farbanteilen (oder RGB=0,0,0 für „LEDs aus“) füllen. (rehu)