• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Бегущая строка NodeMCU.

23 сентября, 2017

Для реализации бегущей строки нам понадобится:

Плата 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

 

Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·