Я работаю над проектом Arduino и хочу отображать значки на панели NeoMatrix 8x8.
Первоначально я пошел в направлении, основанном на наследовании, и запросил некоторый вклад в Arduino Stack Exchange , где мне посоветовали пойти другим путем, и задать свой вопрос в другом месте, относится ли он к C ++ больше, чем в Arduino.
Вместо того, чтобы полагаться на наследование, мне было рекомендовано хранить свои значки в PROGMEM и заставлять программу создавать значки оттуда.
Я пытался приблизиться столько, сколько мог, но я не в своей тарелке, поэтому я хотел бы получить дальнейшее понимание!
- Идея состоит в том, чтобы иметь байтовый массив, состоящий из значка 8x8.
- Значения 0-2, каждое из которых представляет цвет, установленный в массиве структур RGB.
Исходя из того, что я понимаю, мой байтовый массив, хранящийся в PROGMEM, читается как указатель, и к нему нужно обращаться, используя ppm_read_byte .
Я не уверен, как обращаться со структурой RGB. Когда я пытаюсь прочитать его из PROGMEM, происходит сбой моей программы. Поэтому я удалил его из PROGMEM, и значок отображается правильно. Мой байтовый массив находится в PROGMEM, но не в цветах.
Мне известно, что у меня серьезная нехватка знаний об указателях, над которыми мне нужно работать ...
Кроме того, идея состоит в том, чтобы иметь коллекцию значков, поэтому я должен хранить все мои значки (байтовые массивы и цвета) в заголовочном файле? Разве это не раздуло это?
Заранее благодарим за понимание этого вопроса!
header.h
typedef struct {
byte r;
byte g;
byte b;
} RGB;
const byte PROGMEM WifiIcon[8][8] = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 2, 2, 2, 2, 1, 1},
{1, 2, 1, 1, 1, 1, 2, 1},
{2, 1, 2, 2, 2, 2, 1, 2},
{1, 2, 1, 1, 1, 1, 2, 1},
{1, 1, 1, 2, 2, 1, 1, 1},
{1, 1, 2, 1, 1, 2, 1, 1},
{0, 0, 0, 1, 1, 0, 0, 0}
};
const RGB WifiIconColors[3] = {
{0, 0, 0},
{0, 0, 0},
{0, 200, 61}
};
ESP8266Neomatrix.ino
#include "header.h"
void printIcon(int startPosition, const byte (&icon)[8][8], const RGB (&colors)[3]){
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
byte currentPixel = pgm_read_byte(&icon[i][j]);
const RGB currentColor = colors[currentPixel];
byte red = currentColor.r;
byte green = currentColor.g;
byte blue = currentColor.b;
matrix.setPixelColor(startPosition++, red, green, blue);
}
}
}
https://gist.github.com/Nate1661/0eea9200e9d1c86187c2acf205ba3602