Problemi con scritta generata da Led tipo WS2811 Adafruit Matrix [SOLVED]

Buongiorno, ho un problema con un progetto sul quale devo realizzare un piccolo led-wall sul quale creare un countdown.
Ho iniziato a cablare i led tipo WS2811 a 12V 294 in totale (7 righe da 42 led ciascuna) e testare se tutto funzionava con gli sketch di esempio della Adafruit.
Carico lo sketch ma non compare alcuna scritta ma solo delle linee a mio avviso casuali e non riesco a capire dove sto sbagliando.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
#define PSTR 
#endif



Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(42, 7, 6,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

const uint16_t colors[] = {
  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(20);
  matrix.setTextColor(colors[0]);
}

int x    = matrix.width();
int pass = 0;

void loop() {
  matrix.fillScreen(0);
  matrix.setCursor(x,0);
  matrix.print(F("ARDUINO"));
  if(--x < -36) {
   x = matrix.width();
    if(++pass >= 3) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(100);
}

Allego immagine nella quale spero si capisca il cablaggio, in sostanza il segnale entra in alto a sx della matrice si sposta sulla seconda riga percorrendola da dx a sx e scende così a zig zag.

Grazie

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Normalmente é un problema di alimentazione.
Che potenza ha l'alimentatore che usi?

Misura la tensione sui contatti a destra.

Ciao Uwe

l'alimentatore che utilizzo è un modello simile a questo

provato con il tester in uscita mi da 12.01 v
credo sia un problema software che riguarda nello specifico la matrice in questa parte di codice

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(42, 7, 6,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

Puoi provare con:

 NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG

Sostanzialmente se giri la seconda riga rispetto alla prima (anche se il collegamento rimane corretto) il 84 pixel è il primo a sinistra della seconda riga. Mentre non invertendo il senso delle strisce il primo a sinistra sarebbe 43.

Vedi se risolvi, altrimenti c'è altro.

Ciao.

Mi sembra che anche ribaltando le strisce di posizione pari non si ottenga qualcosa di valido nella visualizzazione...

Ancora nessun risultato.
Ho provato a fare la correzione del software ma niente, ho provato a mantenere lo stesso software e disporre i led in sequenza progressiva ma niente ancora.

Utilizzando questo sketch che accende ogni singolo led in ordine progressivo funzionano tutti e si accendono nell’ordine corretto.

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif


#define LED_PIN    6
#define LED_COUNT 294

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);


void setup() {
 
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}


void loop() {
  colorWipe(strip.Color(255,   0,   0), 50); // Red
  colorWipe(strip.Color(  0, 255,   0), 50); // Green
  colorWipe(strip.Color(  0,   0, 255), 50); // Blue

  theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
  theaterChase(strip.Color(127,   0,   0), 50); // Red, half brightness
  theaterChase(strip.Color(  0,   0, 127), 50); // Blue, half brightness

  rainbow(10);             // Flowing rainbow cycle along the whole strip
  theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
}


void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}

void theaterChase(uint32_t color, int wait) {
  for(int a=0; a<10; a++) {  // Repeat 10 times...
    for(int b=0; b<3; b++) { //  'b' counts from 0 to 2...
      strip.clear();         //   Set all pixels in RAM to 0 (off)
      // 'c' counts up from 'b' to end of strip in steps of 3...
      for(int c=b; c<strip.numPixels(); c += 3) {
        strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
      }
      strip.show(); // Update strip with new contents
      delay(wait);  // Pause for a moment
    }
  }
}

// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
  // Hue of first pixel runs 5 complete loops through the color wheel.
  // Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
  // means we'll make 5*65536/256 = 1280 passes through this outer loop:
  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the single-argument hue variant. The result
      // is passed through strip.gamma32() to provide 'truer' colors
      // before assigning to each pixel:
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
    }
    strip.show(); // Update strip with new contents
    delay(wait);  // Pause for a moment
  }
}

// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
  int firstPixelHue = 0;     // First pixel starts at red (hue 0)
  for(int a=0; a<30; a++) {  // Repeat 30 times...
    for(int b=0; b<3; b++) { //  'b' counts from 0 to 2...
      strip.clear();         //   Set all pixels in RAM to 0 (off)
      // 'c' counts up from 'b' to end of strip in increments of 3...
      for(int c=b; c<strip.numPixels(); c += 3) {
        // hue of pixel 'c' is offset by an amount to make one full
        // revolution of the color wheel (range 65536) along the length
        // of the strip (strip.numPixels() steps):
        int      hue   = firstPixelHue + c * 65536L / strip.numPixels();
        uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
        strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
      }
      strip.show();                // Update strip with new contents
      delay(wait);                 // Pause for a moment
      firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
    }
  }
}

Non riesco a capire dov’è il problema

attualmente i led sono tutti in progressione quindi il primo della seconda riga è il 43esimo e la matrice è così definita

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(42, 7, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);

Se no chiedo se c’è altro modo di riprodurre scritte con led WS2811.
Graie

Ho scoperto il problema.
Non capisco ancora il perché però quando utilizzo la libreria NeoMatrix o la GFX mi considera 3 pixel orizzontali come fossero uno solo.
Quindi al posto di avere 42 pixel orizzontali ne ho 14 (da 3 pixel).
Impostando così riesco a fargli fare la scritta ma vorrei riuscire a impostare correttamente questa cosa e riportare la larghezza dei caratteri a 5x7 e non 15x7.
Allego immagine per cercare di spiegare meglio.
Grazie