Для реализации бегущей строки нам понадобится:
Плата NodeMCU: http://ali.pub/1qdz7a
Матрица 8×8: http://ali.pub/1uwnyl
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Для Вывода английского текста на экран матрицы нужно загрузить в плату NodeMCU следующую программу:
/* Подключения: NodeMCU -> Matrix MOSI-D7-GPIO13 -> DIN CLK-D5-GPIO14 -> Clk GPIO0-D3 -> CS */ #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> Max72xxPanel matrix = Max72xxPanel(D3, 4, 1); unsigned long ticker_next; String tape = "Hello world!"; int spacer = 1; int width = 5 + spacer; void setup(void){ matrix.setIntensity(7); //яркость matrix.setRotation(0, 1); // 1 матрица matrix.setRotation(1, 1); // 2 матрица matrix.setRotation(2, 1); // 3 матрица matrix.setRotation(3, 1); // 4 матрица } void handleTicker(){ for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while ( x + width - spacer >= 0 && letter >= 0 ) { if ( letter < tape.length() ) { matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void){ handleTicker(); }
Скачать данный скетч можно по ссылке: https://yadi.sk/d/eiZWB29y3NAcM9
Библиотеки для скетча: Adafruit_GFX_Library: https://yadi.sk/d/BxfKUBu53NAcSp
arduino-Max72xxPanel-master: https://yadi.sk/d/_sMXrMoC3NAcYj
Для вывода русских букв на матрицу, нужно добавить специальную функцию utf8rus, но проблема в том, что русская буква “а” не выводится с помощью данной функции и весь алфавит смещается на одну букву. Из -за этого выводится “абра-кадабра” из русских букв.
Я сделал специальную минитабличку для корректного отображения русских букв.
Руский алфавит | абвгдежзийклмнопрстуфхцчшщъыьэюя |
Выводимые символы | 6вгдежзийклмнопрстуйхцчшщъыьэюя |
Следовательно, руководствуясь данной таблицей, если мы хотим вывести букву “д” нужно ввести букву “г”, если хотим вывести букву “н” то нужно ввести букву “м”. Таким образом нужно вводить текст пользуясь этим дешифратором. Тут все буквы смещены на одну букву, так как буквы “а” русской нет вообще. Ее нужно заменить на английскую букву “a”.
В итоге если мы хотим вывести фразу “подписывайтесь на канал!” нужно ввести “онгозръбaисдры ьa йaмaк!”
/* Подключения: NodeMCU -> Matrix MOSI-D7-GPIO13 -> DIN CLK-D5-GPIO14 -> Clk GPIO0-D3 -> CS */ #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> Max72xxPanel matrix = Max72xxPanel(D3, 4, 1); unsigned long ticker_next; String tape = "Hello word!"; int spacer = 1; int width = 5 + spacer; String utf8rus(String source){ int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } // switch m[0] = n; target = target + String(m); } return target; } void setup(void){ tape = utf8rus("онгозръбaисдры мa йaмaк!"); matrix.setIntensity(7); matrix.setRotation(0, 1); // 1 матрица matrix.setRotation(1, 1); // 2 матрица matrix.setRotation(2, 1); // 3 матрица matrix.setRotation(3, 1); // 4 матрица } void handleTicker(){ for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while ( x + width - spacer >= 0 && letter >= 0 ) { if ( letter < tape.length() ) { matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void){ handleTicker(); }
Ссылка на сам скетч: https://yadi.sk/d/5ivlGB4d3NAdFY
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.