Mehrdimensionales Array oder ein struct für PIXEl Tisch

Es geht nicht nur um den Speicherplatz, sondern auch die Organisation des Codes und die Lesbarkeit. Ein Sinn von Strukturen ist dass man sprechende Namen für die Bestandteile hat und nicht nur einfach Indizes/Nummern

Außerdem ist FastLED dafür ausgelegt dass man die Pixel als Array aus Strukturen verwaltet! Ich dachte du willst diese Bibliothek verwenden

Dann so was wie im Beitrag #13 ? oder bin ich wieder auf dem Holzweg?

ja die möchte ich verwenden.
ich habe das mit dem Strukturen noch nicht verstanden :see_no_evil: noch nicht mal im Ansatz hab eich den Eindruck.

Theoretisch kann man eine Fläche natürlich sehr anschaulich als zwei-dimensionales Array aus Pixeln sehen. FastLED möchte aber ein ein-dimensionales Array. Man kann aber X/Y-Koordinaten auch einfach in einem ein-dimensionalen Array berechnen. So wird es auch in deinem Code in #20 gemacht (siehe die "Grafiken" in den Kommentaren). Wobei sich das auch vereinfachen lässt.

1 Like

Wenn du Texte auf deinem Tisch ausgeben willst, dann würde ich sagen "implementiere Print"

Print, kennst du von Serial, oder LCDs

Beispiel:
tisch.println("Frosch");

Davon sind wir noch einige Ebenen entfernt. Es geht erstmal darum die RGB Pixel im Speicher darzustellen/abzubilden

@muecke: Das mit dem Speicher ist gar nicht so schlimm wie befürchtet. Ein Bild braucht 3240 Byte; einmal im RAM (das ist der leds-Array) und die Bilder legst Du in den Programmspeicher. Da brauchten dann die 48 Bilder insgesamt 155520 Byte - das passt noch, wenn der Code nicht zu fett wird.

Ich hoffe mal - mangels geeigneter Hardware - dass das auf dem Teensy genauso geht wie auf den Arduinos. Dann sollte dieser Sketch Deine oben angegebenen Bilddaten auf den Tisch zaubern können. Die liegen nämlich schon im exakt richtigen Format vor.

Der Sketch verwendet 6428 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 3336 Bytes (40%) des dynamischen Speichers, 4856 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

Es kompiliert für einen Arduino Mega, ob es funktioniert kann ich nicht testen. Und ob es schnell genug ist, weiß ich natürlich auch nicht; da gibt es vielleicht Optimierungspotential, wenn die Daten gleich in Serpentinenform im Speicher liegen und mit memcpy() in den led-Array kopiert werden können (ohne den Umweg über die farbe).

// Testsketch zur Bildausgabe
// https://forum.arduino.cc/t/mehrdimensionales-array-oder-ein-struct-fur-pixel-tisch/866335

#include <FastLED.h>

// geklaut aus https://forum.arduino.cc/t/led-pixel-tisch-apa102-1080pixel/694140/127
FASTLED_USING_NAMESPACE
#define DATA_PIN    7      // Pin 7 Grün DI
#define CLK_PIN     8      // Pin 8 Braun CI
#define LED_TYPE    APA102
#define COLOR_ORDER BGR    // eventuell anpassen
#define BRIGHTNESS  255    // Helligkeit 0 = Aus, 255 = Hell, Max 255

const uint8_t zeilen = 24;
const uint8_t spalten = 45;
const uint16_t anzahlPixel = zeilen * spalten; // 1080

CRGB leds[anzahlPixel];

// Bilddaten aus https://forum.arduino.cc/t/mehrdimensionales-array-oder-ein-struct-fur-pixel-tisch/866335/16
const uint8_t bild[anzahlPixel][3] PROGMEM =
{
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0},
  {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192},
  {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192},
  {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0},
  {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0},
  {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {204, 51, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192},
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}
};


// Transformationsfunktion von Bildablage in Zeilen/Spalten-Anordnung in LED-Index des
// Tischs - geklaut aus dem Matrix-Beispiel
// https://github.com/FastLED/FastLED/blob/master/examples/XYMatrix/XYMatrix.ino
// Annahme: Es handelt sich um Serpentinen-Layout waagrecht.
// Alles überflüssige weggenommen und die Namen angepasst
uint16_t XY( uint8_t x, uint8_t y)
{
  uint16_t i;

  if ( y & 0x01)
  {
    // Odd rows run backwards
    uint8_t reverseX = (spalten - 1) - x;
    i = (y * spalten) + reverseX;
  }
  else
  {
    // Even rows run forwards
    i = (y * spalten) + x;
  }

  return i;
}


void setup()
{
  // geklaut aus https://forum.arduino.cc/t/led-pixel-tisch-apa102-1080pixel/694140/127
  FastLED.addLeds<LED_TYPE, DATA_PIN, CLK_PIN, COLOR_ORDER>(leds, anzahlPixel);     // Pixel Matrix Definiren
  FastLED.setBrightness(BRIGHTNESS);

  // Ausgabe des Bildes
  for (uint8_t y = 0; y < zeilen; y++)
  {
    for (uint8_t x = 0; x < spalten; x++)
    {
      uint16_t bildIndex = x + y * zeilen;
      CRGB farbe = CRGB(bild[bildIndex][0], bild[bildIndex][1], bild[bildIndex][2]);
      leds[XY(x, y)] = farbe;
    }
  }
  FastLED.show();
}

void loop()
{
  // nix.
}

Gruß Walter

Das kann man doch auch direkt machen:

#include <FastLED.h>

const uint8_t zeilen = 5;
const uint8_t spalten = 2;
const uint16_t anzahlPixel = zeilen * spalten;

CRGB leds[anzahlPixel] =
{
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192},  {20, 30, 40}
};

void setup() 
{
  Serial.begin(115200);
  
  for (CRGB& led : leds)
  {
    Serial.print(led.red); Serial.print(',');
    Serial.print(led.green); Serial.print(',');
    Serial.println(led.blue);
  }
}

void loop() 
{
}

Muecke will mehrere Bilder irgendwo ablegen und dann zwischen diesen wechseln. Aber dazu braucht man doch nicht eine ganz andere Datenstruktur dafür! Man had das CRGB Array im RAM das die aktuellen Daten enthält. Weitere Arrays können mit PROGMEM im Flash liegen und dann in das RAM Array kopiert werden. Dann geht es auch mit memcpy().

Wobei man dabei schauen muss ob oder was man mit PROGMEM auf einem Teensy anders als bei einem AVR machen muss.

such dir eine Lib die Texte auf einem Neopixel Display ausgeben kann. Ja kann man auch selber machen, aber wozu selber das Rad neu erfinden.

Ich fürchte, dass das Ding im RAM liegt. Mir ist es nicht gelungen, einen Array of CRGBs im Programmspeicher initialisiert abzulegen - deshalb der Umweg.

Ok, das liegt an der Initialisierung der Strukturen. Das war mir nicht bewusst. Das kann man aber trotzdem etwas einfacher machen:

#include <FastLED.h>

const uint8_t zeilen = 5;
const uint8_t spalten = 2;
const uint16_t anzahlPixel = zeilen * spalten;

CRGB leds[anzahlPixel];

struct Farbe
{
  const byte r;
  const byte g;
  const byte b;
};

const Farbe flash1[anzahlPixel] PROGMEM  = {
  {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 112, 192}, {0, 112, 192},  {20, 30, 40}
};

const Farbe flash2[anzahlPixel] PROGMEM  = {
  {40, 60, 80}, {40, 60, 80}, {40, 60, 80}, {0, 112, 192}, {0, 112, 192}, {0, 112, 192}, {0, 0, 0}, {0, 200, 255}, {0, 200, 255},  {0, 0, 0}
};

void print()
{
  for (CRGB& led : leds)
  {
    Serial.print(led.red); Serial.print(',');
    Serial.print(led.green); Serial.print(',');
    Serial.println(led.blue);
  }
  Serial.println(F("---"));
}

void setup() 
{
  Serial.begin(115200);
  
  memcpy_P(leds, flash1, sizeof(leds));
  print();  
  memcpy_P(leds, flash2, sizeof(leds));
  print();
}

void loop() 
{
}

Dann hat man zwar die Struktur im Prinzip doppelt, aber es ist nicht völlig anders.

Ich habe das nur auf einem UNO getestet. Eventuell muss man hier auf einem 32-Bit Prozessor mit der Speicherausrichtung aufpassen

Ob man das wirklich mit memcpy() machen will sei mal dahingestellt. Das geht gut mit statischen Bildern wenn man immer das ganze Bild ändern möchte. Wenn man scrollende Texte hat, speichert man eigentlich nur die Fonts im Flash und liest sie zeilenweise aus. Dafür sollte man aber schon ein tieferes Verständnis der Thematik haben.

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.