max7219 русские буквы

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1154
Репутация: 74
С нами: 5 лет 5 месяцев

max7219 русские буквы

Сообщение #1 Дим » 16 декабря 2017, 20:15

phpBB [media]


Для того что бы матрица max7219 могла выводить кириллицу нужно скачать две библиотеки:
1. Adafruit-GFX-Library-master
2. arduino-Max72xxPanel-master

Adafruit-GFX-Library-master.rar
(254.71 КБ) 290 скачиваний
arduino-Max72xxPanel-master.rar
(44.36 КБ) 268 скачиваний


и добавить их в папку \libraries Arduino, если имеются такие то с заменой. Перезапустив программу и залив в неё скетч, любуемся результатом.

Код: Выделить всё

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>


int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf <a href="<a href="<a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a>" rel="nofollow"><a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a></a>" title="<a href="<a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a>" rel="nofollow"><a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a></a>" rel="nofollow"><a href="<a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a>" rel="nofollow"><a href="http://arduino.cc/en/Reference/SPI" rel="nofollow">http://arduino.cc/en/Reference/SPI</a></a></a> )
// Uno or Duemilanove DIN 11 (MOSI) CLK 13 (SCK)
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 5;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String tape = "";
int wait = 100; // In milliseconds

int spacer = 2; // Промежуток между символами (кол-во точек)
int width = 5 + spacer; // The font width is 5 pixels 

/* Recode russian fonts from UTF-8 to Windows-1251 */

String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;
  while (< k) {
    n = source[i]; i++;
    if (>= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (== 0x81) { n = 0xA8; break; }
          if (>= 0x90 && n <= 0xBF) n = n + 0x2F;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (== 0x91) { n = 0xB7; break; }
          if (>= 0x80 && n <= 0x8F) n = n + 0x6F;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

String Serial_Read() {
  unsigned char c; // переменная для чтения сериал порта
  String Serial_string = ""; // Формируемая из символов строка
  while (Serial.available() > 0) { // Если в сериал порту есть символы
    c = Serial.read(); // Читаем символ
    //Serial.print(c,HEX); Serial.print(" "); Serial.print(c);
    if (== '\n') {  // Если это конец строки
          return Serial_string; // Возвращаем строку 
    }
    if (== 0xB8) c = c - 0x01;  // Коррекция кодов символа под таблицу ???? так как русские символы в таблице сдвинуты относительно стандартной кодировки utf на 1 символ
    if (>= 0xBF && c <= 0xFF) c = c - 0x01;
    Serial_string = Serial_string + String(char(c)); //Добавить символ в строку
  }
  return Serial_string; 
}



void setup() {
  Serial.begin(9600);
  tape = utf8rus("*** Налетай, торопись - покупай живопись! ***");
  matrix.setIntensity(3); //Используйте значение от 0 до 15 для яркости
  matrix.setRotation(matrix.getRotation()+3); //1 - 90  2 - 180   3 - 270

}
void loop() {

  if (Serial.available()){
    tape=Serial_Read();
  } 
  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(wait);
  }
}
i love you mxIni Mysql

! ! !


Аватара
Александр

Цвет светодиодов Синий

Сообщение #2 Александр » 27 мая 2018, 10:19

Добрый день.
Использовал этот скетч, все работает! Но возникла проблема.
При замене матрицы красного цвета на матрицу синего, они светятся сплошником и текст не выводится. В чем может быть проблема? Матрицы внешне одинаковые с лицевой и оборотной стороны.
Эту матрицу пытаюсь подключить : https://ru.aliexpress.com/item/LED-8x8-commone-5/ ... g0s.9042311.0.0.274233edDDHgGx

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1154
Репутация: 74
С нами: 5 лет 5 месяцев

Сообщение #3 Дим » 27 мая 2018, 11:07

Точно не знаю, но возможно у них различия катод/анод. Поищи информацию о характеристиках обоих матриц.
i love you mxIni Mysql

Аватара
Arduino
Рядовой
Рядовой
Сообщения: 13
Репутация: 4
С нами: 1 год 5 месяцев

Сообщение #4 Arduino » 29 мая 2018, 11:35

Или попробовать развернуть матрицу вверх ногами

Аватара
Александр

Сообщение #5 Александр » 30 мая 2018, 14:02

Дим писал(а):Точно не знаю, но возможно у них различия катод/анод. Поищи информацию о характеристиках обоих матриц.
ДА, скорее всего катод/анод перевернуты. т.к. внешне дорожки одинаковые под смолой.
Характеристики 1088AS (красные) нашел, а вот по HELC 1388APB (синии) вообще ничего нету.
Переворачивать и отзеркаливать и вобщем методом тыка ничего не получилось.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме

Сейчас этот раздел просматривают: 1 гость