Using Arduio Matrix for scrolling letters

Hello, I am trying to figure out how to get the letters to scroll correctly on my scoreboard. Once I hit certain max number, the number will delay (5000) and then display "Winner!" scrolling through the leds (ws2811). To test this out before I place the code in the correct location which i already have something shown. I am using the Matrixtest Arduino. the controller i am using is the esp8266.

Here is the code i am using for example

// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif

#define PIN 4

// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_GRBW    Pixels are wired for GRBW bitstream (RGB+W NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)


// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(6, 5, PIN,
  **NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +**
**  NEO_MATRIX_ROWS,+  NEO_MATRIX_ZIGZAG, + 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(60);
  matrix.setTextColor(colors[0]);
}

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

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

where I bolded the line of code has to do with the matrix width and height. As we know in from the top we are using Rows with a ZigZag connection.

Here are my questions?
1)What i would like to do is have the letters scroll from height 2,3,4 across the leds. When I up date (matrix.setCursor(x, 0):wink: to matrix.setCursor(x, 1); i would change my height number to 4?

  1. how do I change the scroll rate to slow down to make sure the letters are showing correctly?
  2. I feel the NEO_MATRIX_ROWS,+ NEO_MATRIX_ZIGZAG is not correct because the all the LEDs light up.

My leds are set up like this

0  -> 1  ->  2         ---> 15 -> 16 -> 17
*              |        |                  |
*              v        |                  v
* 5  < - 4  < -  3        |     20 < - 19 < - 18
* |                     |     |
* v                     |     v
* 6  -> 7  ->  8        |     21 -> 22 -> 23
*              |        |                  |
*              v        |                  v
* 11 < - 10 < -  9        |     26 < - 25 < - 24
* |                     |     |
* v                     |     v
* 12 -> 13 -> 14 ------ -      27 -> 28 -> 29

any help would be appreciated.

strange pixel order but here you go

// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif

#define PIN 4

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(3, 5,2,1, PIN,
                            NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
                            NEO_MATRIX_ROWS +  NEO_MATRIX_ZIGZAG +
                            NEO_TILE_TOP + NEO_TILE_LEFT+
                            NEO_TILE_ROWS,
                            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(60);
  matrix.setTextColor(colors[0]);
}

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

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

your matrix 6x5 pixel is too small for text. one letter is 5x7 pixel big. so 6x8 is recomended.

Use a smaller different font?

2x2? ok. which command?

Try some the ones that come with Adafruit_GFX.

i thought you know what you say about. 5x7 is smalest, so called "size1"

since your requesting to use 24 leds per tile in this case to make the 3x8,3x8. to make the entire width 6 and height of 8. I used this Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(6, 8,2,1, PIN,....etc) and the outcome on the LED's were bad, all over the place.

Here is the new layout


* 0  -> 1  ->  2         ---> 24 -> 25 -> 26
*              |        |                  |
*              v        |                  v
* 5  < - 4  < -  3      |     29 < - 28 < - 27
* |                     |     |
* v                     |     v
* 6  -> 7  ->  8        |     30 -> 31 -> 32
*              |        |                  |
*              v        |                  v
* 11 < - 10 < -  9      |     35 < - 34 < - 33
* |                     |     |
* v                     |     v
* 12 -> 13 -> 14        |     36 -> 37 -> 38
*               v       |                 v
* 17  < - 16  < -  15   |     41 -> 40 -> 39
* |                     |      |
* v                     |      v
* 18 < - 19 < -  20     |     42 < - 43 < - 44
*                 |     |                    |
*                 v     |                    v
* 23 < - 22 < - 21      |     77 -> 46 -> 45
  |                     |
  |---------------------|

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(3, 8,2,1, PIN,....etc)

This is a recipe for making things more difficult...
Put your strips in horizontal lines over the full length of your text. Easiest if they run all in same direction. Have 7 lines and 5+1 led for each character.

*   * ***** *     *      ****
*   * *     *     *     *    *
*   * *     *     *     *    *
***** ****  *     *     *    *
*   * *     *     *     *    *
*   * *     *     *     *    *
*   * ***** ***** *****  ****

Not sure how to use this Adafruit_GFX.

//#include<Adafruit_TFTLCD.h>
#include <Fonts/FreeSerifBold9pt7b.h>

I would like to minimize the font since it is very hard to read the words scrolling across.

Do you like the Org_01.h font that comes in the same fonts folder as the free serif?

the maximum height of the letters will be within 6 leds.

Max height being 6 would be great. I just not fully sure how to set the new font that way.

Instead use #include <Fonts/Org_01.h>.

That should work.