ws2812 + 3 панели 8*32 + Adafruit_NeoMatrix
- Войдите на сайт для отправки комментариев
Чт, 14/04/2022 - 09:52
Доброго дня, столкнулся со следующей проблемой следующего плана. есть 6 панелей (https://ba3ar.kz/product/ws2812b-svetodiodnyj-cifrovoj-matrichnyj-ekran-...), подсоединил, включил тестовый скетч по простому линейному включению ледов и все отработало. Однако мне из этих панелей нужно собрать единое табло 2*3 и вот тут происходит "магия".
В примере есть инициализация объекта по сборке панелей в одну панель, но результат - все панели не включаются.
// Adafruit_NeoMatrix example for tiled NeoPixel matrices. Scrolls
// 'Howdy' across three 10x8 NeoPixel grids that were created using
// NeoPixel 60 LEDs per meter flex strip.
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif
#define PIN 6
// MATRIX DECLARATION:
// Parameter 1 = width of EACH NEOPIXEL MATRIX (not total display)
// Parameter 2 = height of each matrix
// Parameter 3 = number of matrices arranged horizontally
// Parameter 4 = number of matrices arranged vertically
// Parameter 5 = pin number (most are valid)
// Parameter 6 = 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 FIRST MATRIX; pick two, e.g.
// NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
// NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs WITHIN EACH MATRIX are
// arranged in horizontal rows or in vertical columns, respectively;
// pick one or the other.
// NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns WITHIN
// EACH MATRIX proceed in the same order, or alternate lines reverse
// direction; pick one.
// NEO_TILE_TOP, NEO_TILE_BOTTOM, NEO_TILE_LEFT, NEO_TILE_RIGHT:
// Position of the FIRST MATRIX (tile) in the OVERALL DISPLAY; pick
// two, e.g. NEO_TILE_TOP + NEO_TILE_LEFT for the top-left corner.
// NEO_TILE_ROWS, NEO_TILE_COLUMNS: the matrices in the OVERALL DISPLAY
// are arranged in horizontal rows or in vertical columns, respectively;
// pick one or the other.
// NEO_TILE_PROGRESSIVE, NEO_TILE_ZIGZAG: the ROWS/COLUMS OF MATRICES
// (tiles) in the OVERALL DISPLAY proceed in the same order for every
// line, or alternate lines reverse direction; pick one. When using
// zig-zag order, the orientation of the matrices in alternate rows
// will be rotated 180 degrees (this is normal -- simplifies wiring).
// See example below for these values in action.
// Parameter 7 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream (v1 pixels)
// NEO_GRB Pixels are wired for GRB bitstream (v2 pixels)
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA v1 pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip)
// Example with three 10x8 matrices (created using NeoPixel flex strip --
// these grids are not a ready-made product). In this application we'd
// like to arrange the three matrices side-by-side in a wide display.
// The first matrix (tile) will be at the left, and the first pixel within
// that matrix is at the top left. The matrices use zig-zag line ordering.
// There's only one row here, so it doesn't matter if we declare it in row
// or column order. The matrices use 800 KHz (v2) pixels that expect GRB
// color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, 2, 2, PIN,
NEO_TILE_TOP + NEO_TILE_LEFT + NEO_TILE_ROWS + NEO_TILE_PROGRESSIVE +
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ400);
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(255);
matrix.setTextColor(colors[0]);
}
int x = matrix.width();
int pass = 0;
void loop() {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
matrix.print(F("Howdy"));
if(--x < -36) {
x = matrix.width();
if(++pass >= 3) pass = 0;
matrix.setTextColor(colors[pass]);
}
matrix.show();
delay(100);
}
собственно вот здесь меняю
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, 2, 3, PIN,
NEO_TILE_TOP + NEO_TILE_LEFT + NEO_TILE_ROWS + NEO_TILE_PROGRESSIVE +
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ400);
подскажите кто работал с такими панелями и куда нужно копать?
Начните с 32, 8, 1, 1, PIN
пробовал, работает и 32,8,2,2 оживает, но криво очень
И почему NEO_KHZ400 ?
проверял на 800 и на 400 - результат одинаков
зависит от того как собраны диоды в матрице и матрицы в панели
+ NEO_MATRIX_ZIGZAG попробуйте совсем убрать
https://wokwi.com/projects/328895784065958484
https://learn.adafruit.com/adafruit-neopixel-uberguide/neomatrix-library вот здесь вроде все доступно описано и зигзаг вроде как должен наоборот выстроить путь подсветки, но проверю
А какая плата Arduino у вас ??? 32*8*6*3=4608 байт ОЗУ требуется только под буфер для светодиодов !
mega2560
Должна потянуть ...
В каком порядке у вас матрицы подключены ?
да их собственно по другому и нельзя подключить , есть вход 2 провода, есть выход 3 провода, последовательно все соединил. отдельно питание +- дал.
сори опечатался, вход 3 провода тоже
1 2 3
6 5 4
1 2 3
4 5 6
1 3 5
2 4 6
...
как у вас ?
Для панели с расположением матриц:
1 2 3
4 5 6
скетч и проект в эмуляторе - https://wokwi.com/projects/328895784065958484
Для панели с расположением матриц:
1 2 3
6 5 4
надо матрицы 4 5 6 физически развернуть на 180 градусов и в скетче NEO_TILE_PROGRESSIVE заменить на NEO_TILE_ZIGZAG...
спс проверю
я правильно понимаю что в этом примере вот так расположены матрицы?
https://wokwi.com/projects/328895784065958484
Да и все одинаково ориентированы.
вечером только смогу проверить
Спасибо, получилось
Вот вам и "магия" ...
Доброго дня, при проверке rainbow все крутится вертится, а вот с выводом текста засада, при расположении матриц как у вас на https://wokwi.com/projects/328895784065958484 матрицы как будто стоят вертикально(хотя исходя из Parameter 3 = number of matrices arranged horizontally и Parameter 4 = number of matrices arranged vertically выставлено правильно
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(количество пикселей - по длине - 32, количество пикселей по высоте -8, количество матриц расположенных вертикально-2, количество матриц расположенных горизонтально-3
Хотя проверил уже по разному
В эмуляторе матрицы соединены как на картинке выше ! (верхний ряд rgb1 rgb2 rgb3 нижний ряд rgb4 rgb5 rgb6)
Соединения:
У вас как расположены матрицы ?
Выложите ссылку на короткое видео того что происходит ?!
У вас видимо диоды внутри матриц соединены иначе чем в эмуляторе и надо играться параметрами:
видео подготовлю, матрицы подключил как на схеме
https://dropmefiles.com/lGLfT
пример взял ваш
NEO_TILE_ROWS меняем на NEO_TILE_COLUMNS
NEO_TILE_PROGRESSIVE меняем на NEO_TILE_ZIGZAG
Перепутал: TILE это расположение кусков, а MATRIX это расположение диодов в одной матрице !
Это изменение ОТМЕНЯЕМ !
NEO_TILE_ROWS меняем на NEO_TILE_COLUMNS
NEO_TILE_PROGRESSIVE меняем на NEO_TILE_ZIGZAG
Это делаем:
ура заработало)))))))))))))))))))
спасибо огромное