Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino и MAX7219 - бегущая строка, рус. (для новичков)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:23:00

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вт окт 04, 2016 05:31:10 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Я и сам только что начал изучать микроконтроллеры, купил ардуину уну, и вот такую светодиодную матрицу 8х8х4:

https://ru.aliexpress.com/item/MAX7219-Dot-Matrix-Module-For-Arduino-Microcontroller-4-In-One-Display-with-5P-Line/32623588535.html?spm=2114.10010208.1000014.3.JV5KIf&scm=1007.13338.46806.0&pvid=b948a6d9-244e-4962-a973-ae5e51225a0a&tpp=1

С чего начинают благоразумные коты? Правильно, с поиска даташита:

на чип:

https://www.sparkfun.com/datasheets/Components/General/COM-09622-MAX7219-MAX7221.pdf

и на матрицу:

http://pdf.datasheetbank.com/datasheet-download/848836/0/ETC/1088AS

И с понимания того, как оно вообще работает. Вот тут всё неплохо расписано:

http://2150692.ru/faq/114-led-matrix-8x8

Я, даже ещё не начав программировать, расширил этот скетч на 4 матрицы (последний комментарий) :) (шучу ... программировать я начинал ... давно ... на фортране ...) По инерции ещё добавил вывод по строкам (было по кадрам):

Спойлер
Код:
unsigned char i;
unsigned char j;
unsigned char n;

int Max7219_pinCLK = 10; // назначение пина тактовых импульсов (у ATM328 это 16-й вывод)
int Max7219_pinCS = 9;   // назначение пина импульсов загрузки (у ATM328 это 15-й вывод)
int Max7219_pinDIN = 8;  // назначение пина вывода данных (у ATM328 это 14-й вывод)

unsigned char disp1[33][8] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // рисунок сердца по кадрам (только данные)
  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60 // рисунок сердца по кадрам (только данные)
};

unsigned char disp2[16][2] = {
  0x05, 0x40,  // рисунок сердца по строкам (адрес строки, данные)
  0x04, 0x40,
  0x03, 0x80,
  0x02, 0x80,
  0x01, 0x40,
  0x01, 0x60,
  0x02, 0x90,
  0x03, 0x88,
  0x04, 0x44,
  0x05, 0x44,
  0x06, 0x08,
  0x07, 0x10,
  0x08, 0x20,
  0x08, 0x60,
  0x07, 0x90,
  0x06, 0x88,  // рисунок сердца по строкам (адрес строки, данные)
};

void Write_Max7219_byte(unsigned char DATA) {  // подпрограмма записи байта DATA от старшего бита
  unsigned char i;
  digitalWrite(Max7219_pinCS, LOW);
  for (i = 8; i >= 1; i--) {
    digitalWrite(Max7219_pinCLK, LOW);
    digitalWrite(Max7219_pinDIN, DATA & 0x80);
    DATA = DATA << 1;
    digitalWrite(Max7219_pinCLK, HIGH);
  }
}

void Write_Max7219(unsigned char address, unsigned char dat) { // подпрограмма записи байта адреса и байта данных
digitalWrite(Max7219_pinCS, LOW);     // установка сигнала CS (пин 9) в логический 0
for (n = 1; n < 5; n++) {             // повторяем для 4-х матричных модулей
Write_Max7219_byte(address);          // запись байта адреса в индикатор (в регистр сдвига)
Write_Max7219_byte(dat);              // запись байта данных в индикатор (в регистр сдвига)
}
digitalWrite(Max7219_pinCS, HIGH);    // установка сигнала CS (пин 9) в логическую 1 (защёлкивание)
}

void Init_MAX7219(void) {             // подпрограмма инициализации MAX7219
  Write_Max7219(0x09, 0x00);          // регистр управления режимом декодирования данных - отключено
  Write_Max7219(0x0a, 0x03);          // регистр настройки яркости - 7/32 (меньше четверти)
  Write_Max7219(0x0b, 0x07);          // регистр количества активных индикаторов - максимум (8)
  Write_Max7219(0x0c, 0x01);          // режим работы: 0 - shutdown, 1 - включено
  Write_Max7219(0x0f, 0x00);          // регистр тестирования - не отображать тест
}

void setup() {                        // установка пинов в режим вывода
  pinMode(Max7219_pinCLK, OUTPUT);
  pinMode(Max7219_pinCS, OUTPUT);
  pinMode(Max7219_pinDIN, OUTPUT);
  delay(50);
  Init_MAX7219();                     // обращение к подпрограмме инициализации
}

void loop() {
  //рисуем сердце по кадрам
  for (j = 0; j < 17; j++) {
    for (i = 1; i < 9; i++)
      Write_Max7219(i, disp1[j][i - 1]);
    delay(100);
  }

    delay(500);

//все стираем
  for (i = 1; i < 9; i++) {  // i для 4-х модулей - строка снизу вверх (сердца на боку)
    Write_Max7219(i, 0x00);
    delay(100);
  }

    delay(500);

   //рисуем сердце  по строкам
    for (j = 0; j < 16; j++) {
      Write_Max7219(disp2[j][0], disp2[j][1]);
    delay(100); 
  }

    delay(500);

  //все закрашиваем
  for (i = 1; i < 9; i++) {  // i для сердца - столбец справа налево
    Write_Max7219(i, 0xFF);
    delay(100);
  }

  //все стираем
  for (i = 1; i < 9; i++) {
    Write_Max7219(i, 0x00);
    delay(100);
  }

  //пауза
  delay(800);               // вроде в миллисекундах
}


Ну и, поскольку все ингредиенты были в наличии, захотелось мне пуще вискаса сделать бегущую строку. Заодно язык поизучать.

Начал шарить по интернету - толковой инфы немного, но нашарил англоязычный скетч, на который IDEйный компилятор сильно ругался нехорошими английскими словами ... Выяснилось, что дело было в prog_char ... PROGMEM, каковой мой компилятор (или библиотека) понимать не хотели. Заменил на "const unsigned" - заработало. Потом озаботился русификацией ... Лирику опускаю, а результат тут:

Спойлер
Код:
// based on an orginal sketch by Arduino forum member "danigom"
// h t t p://forum.arduino.cc/index.php?action=profile;u=188950
// Русифицированная "бегущая строка" для светодиодных матриц 8х8 с чипом MAX7219.
// Вот скетч, который слепил "danigom" (см выше).
// А вот кириллица, которая в длинном массиве хранится, в скетче, который слепил "danigom".
// А вот Николай, которому мёду с утра не давай, а дай лишь добавить вот эту кириллицу,
// которая в длинном массиве хранится, к скетчу, который слепил "danigom"...
// Русифицированная версия называется "Велосипед". На странице обсуждения мне сказали, что я изобретаю велосипед
// и я подумал: зачем строке пешком бежать? - пусть едет на велосипеде :) Обсуждали тут:
// h t t p://arduino.ru/forum/programmirovanie/i-snova-pro-begushchuyu-stroku-na-svetodiodnykh-matritsakh-dlya-novichkov
// В строке scrollText можно использовать русские и английские буквы и другие стандартные символы, вводимые
// с русскоязычной клавиатуры, в любой последовательности.

#include <avr/pgmspace.h>
#include <LedControl.h>

const int numDevices = 4;          // number of MAX7219s used (количество соединённых матриц 8х8)
const long scrollDelay = 75;       // adjust scrolling speed (задержка сдвига текста в мс)
const unsigned char interval = 1;  // интервал между символами (в исходном варианте было только число,
                                   // на 1 превышающее ширину символа)
unsigned long bufferLong [16] = {0};

LedControl lc=LedControl(8,10,9,numDevices); // Номера выводов платы Arduino Uno, на которые поступают
                                             // сигналы DIN, CLK, CS (можно выбрать другие)
const unsigned char scrollText[] PROGMEM = {   
        " -=* The quick brown fox still jumps, но это её проблемы, а пока съешь же ещё этих мягких французских булок, да выпей чаю. А если не хватит, закуси круассанами, лягушачьими лапками, e.t.c... *=-    "};

void setup(){
    for (int x=0; x<numDevices; x++){
        lc.shutdown(x,false);       //The MAX72XX is in power-saving mode on startup
        lc.setIntensity(x,3);       // Set the brightness to default value
        lc.clearDisplay(x);         // and clear the display
    }
}

void loop(){
    scrollMessage(scrollText);
//    scrollFont();                 // тестовая подпрограмма вывода всего шрифта
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

const unsigned char font5x7[] PROGMEM = {     // Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
    B00000000,   //Space (Char 0x20)           // Массив шрифта переделан на 8х, чтобы высота текста была 8 точек,
    B00000000,                                // вместо 7, при этомпоявилась возможность правильно расположить
    B00000000,                                // символы с "подстрочными" элементами (в т.ч. английские);
    B00000000,                                // также вместо 1x kerning data можно задать свой интервал.
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 +  interval,

    B10000000,   //!
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    B00000000,
    B10000000,
    B00000000,
    1 + interval,

    B10100000,   //"
    B10100000,
    B10100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    3 + interval,

    B01010000,   //#
    B01010000,
    B11111000,
    B01010000,
    B11111000,
    B01010000,
    B01010000,
    B00000000,
    5 + interval,

    B00100000,   //$
    B01111000,
    B10100000,
    B01110000,
    B00101000,
    B11110000,
    B00100000,
    B00000000,
    5 + interval,

    B11000000,   //%
    B11001000,
    B00010000,
    B00100000,
    B01000000,
    B10011000,
    B00011000,
    B00000000,
    5 + interval,

    B01100000,   //&
    B10010000,
    B10100000,
    B01000000,
    B10101000,
    B10010000,
    B01101000,
    B00000000,
    5 + interval,

    B11000000,   //'
    B01000000,
    B10000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    2 + interval,

    B00100000,   //(
    B01000000,
    B10000000,
    B10000000,
    B10000000,
    B01000000,
    B00100000,
    B00000000,
    3 + interval,

    B10000000,   //)
    B01000000,
    B00100000,
    B00100000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    3 + interval,

    B00000000,   //*
    B00100000,
    B10101000,
    B01110000,
    B10101000,
    B00100000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //+
    B00100000,
    B00100000,
    B11111000,
    B00100000,
    B00100000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11000000,
    B01000000,
    B10000000,
    2 + interval,

    B00000000,   //-
    B00000000,
    B00000000,
    B11111000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //.
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11000000,
    B11000000,
    B00000000,
    2 + interval,

    B00000000,   ///
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    B00000000,
    5 + interval,

    B01110000,   //0
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B01000000,   //1
    B11000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B01110000,   //2
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B11111000,
    B00000000,
    5 + interval,

    B11111000,   //3
    B00010000,
    B00100000,
    B00010000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00010000,   //4
    B00110000,
    B01010000,
    B10010000,
    B11111000,
    B00010000,
    B00010000,
    B00000000,
    5 + interval,

    B11111000,   //5
    B10000000,
    B11110000,
    B00001000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00110000,   //6
    B01000000,
    B10000000,
    B11110000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11111000,   //7
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B01110000,   //8
    B10001000,
    B10001000,
    B01110000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B01110000,   //9
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B00010000,
    B01100000,
    B00000000,
    5 + interval,

    B00000000,   //:
    B11000000,
    B11000000,
    B00000000,
    B11000000,
    B11000000,
    B00000000,
    B00000000,
    2 + interval,

    B00000000,   //;
    B11000000,
    B11000000,
    B00000000,
    B11000000,
    B01000000,
    B10000000,
    B00000000,
    2 + interval,

    B00010000,   //<
    B00100000,
    B01000000,
    B10000000,
    B01000000,
    B00100000,
    B00010000,
    B00000000,
    4 + interval,

    B00000000,   //=
    B00000000,
    B11111000,
    B00000000,
    B11111000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B10000000,   //>
    B01000000,
    B00100000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    4 + interval,

    B01110000,   //?
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B00000000,
    B00100000,
    B00000000,
    5 + interval,

    B01110000,   //@
    B10001000,
    B00001000,
    B01101000,
    B10101000,
    B10101000,
    B01110000,
    B00000000,
    5 + interval,

    B01110000,   //A
    B10001000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11110000,   //B
    B10001000,
    B10001000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B01110000,   //C
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11100000,   //D
    B10010000,
    B10001000,
    B10001000,
    B10001000,
    B10010000,
    B11100000,
    B00000000,
    5 + interval,

    B11111000,   //E
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B11111000,   //F
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B01110000,   //G
    B10001000,
    B10000000,
    B10111000,
    B10001000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B10001000,   //H
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11100000,   //I
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00111000,   //J
    B00010000,
    B00010000,
    B00010000,
    B00010000,
    B10010000,
    B01100000,
    B00000000,
    5 + interval,

    B10001000,   //K
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,

    B10000000,   //L
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B10001000,   //M
    B11011000,
    B10101000,
    B10101000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B10001000,   //N
    B10001000,
    B11001000,
    B10101000,
    B10011000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B01110000,   //O
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11110000,   //P
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B01110000,   //Q
    B10001000,
    B10001000,
    B10001000,
    B10101000,
    B10010000,
    B01101000,
    B00000000,
    5 + interval,

    B11110000,   //R
    B10001000,
    B10001000,
    B11110000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,

    B01111000,   //S
    B10000000,
    B10000000,
    B01110000,
    B00001000,
    B00001000,
    B11110000,
    B00000000,
    5 + interval,

    B11111000,   //T
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B10001000,   //U
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B10001000,   //V
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00000000,
    5 + interval,

    B10001000,   //W
    B10001000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01010000,
    B00000000,
    5 + interval,

    B10001000,   //X
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B10001000,   //Y
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B11111000,   //Z
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B11100000,   //[
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B11100000,
    B00000000,
    3 + interval,

    B00000000,   //(Backward Slash)
    B10000000,
    B01000000,
    B00100000,
    B00010000,
    B00001000,
    B00000000,
    B00000000,
    5 + interval,

    B11100000,   //]
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B11100000,
    B00000000,
    3 + interval,

    B00100000,   //^
    B01010000,
    B10001000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //_
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11111000,
    B00000000,
    5 + interval,

    B10000000,   //`
    B01000000,
    B00100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    3 + interval,

    B00000000,   //a
    B00000000,
    B01110000,
    B00001000,
    B01111000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B10000000,   //b
    B10000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B00000000,   //c
    B00000000,
    B01110000,
    B10001000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00001000,   //d
    B00001000,
    B01101000,
    B10011000,
    B10001000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B00000000,   //e
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B00110000,   //f
    B01001000,
    B01000000,
    B11100000,
    B01000000,
    B01000000,
    B01000000,
    B00000000,
    5 + interval,

    B00000000,   //g
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B01110000,
    5 + interval,

    B10000000,   //h
    B10000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B01000000,   //i
    B00000000,
    B11000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00010000,   //j
    B00000000,
    B00110000,
    B00010000,
    B00010000,
    B10010000,
    B01100000,
    B00000000,
    4 + interval,

    B10000000,   //k
    B10000000,
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B00000000,
    4 + interval,

    B11000000,   //l
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00000000,   //m
    B00000000,
    B11010000,
    B10101000,
    B10101000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //n
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //o
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   //p
    B00000000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    5 + interval,

    B00000000,   //q
    B00000000,
    B01101000,
    B10011000,
    B10011000,
    B01101000,
    B00001000,
    B00001000,
    5 + interval,

    B00000000,   //r
    B00000000,
    B10110000,
    B11001000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B00000000,   //s
    B00000000,
    B01110000,
    B10000000,
    B01110000,
    B00001000,
    B11110000,
    B00000000,
    5 + interval,

    B01000000,   //t
    B01000000,
    B11100000,
    B01000000,
    B01000000,
    B01001000,
    B00110000,
    B00000000,
    5 + interval,

    B00000000,   //u
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00000000,   //v
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00000000,
    5 + interval,

    B00000000,   //w
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01010000,
    B00000000,
    5 + interval,

    B00000000,   //x
    B00000000,
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //y
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B01110000,
    5 + interval,

    B00000000,   //z
    B00000000,
    B11111000,
    B00010000,
    B00100000,
    B01000000,
    B11111000,
    B00000000,
    5 + interval,

    B00100000,   //{
    B01000000,
    B01000000,
    B10000000,
    B01000000,
    B01000000,
    B00100000,
    B00000000,
    3 + interval,

    B10000000,   //|
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    1 + interval,

    B10000000,   //}
    B01000000,
    B01000000,
    B00100000,
    B01000000,
    B01000000,
    B10000000,
    B00000000,
    3 + interval,

    B00000000,   //~
    B00000000,
    B00000000,
    B01101000,
    B10010000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B01100000,   // (Char 0x7F)
    B10010000,
    B10010000,
    B01100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,
   
    B01010000,   // Ё русская (Char D0x01)
    B11111000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,
   
    B00111000,   // А русская (Char D0x90)
    B01001000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11111000,   // Б русская (Char D0x91)
    B10001000,
    B10000000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B11110000,   // В русская (Char D0x92)
    B10001000,
    B10001000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,
   
    B11111000,   // Г русская (Char D0x93)
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,
       
    B00111000,   // Д русская (Char D0x94)
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B11111100,
    B10000100,
    6 + interval,
   
    B11111000,   // Е русская (Char D0x95)
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,
       
    B10101000,   // Ж русская (Char D0x96)
    B10101000,
    B01110000,
    B00100000,
    B01110000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,
   
    B01110000,   // З русская (Char D0x97)
    B10001000,
    B00001000,
    B00110000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10001000,   // И русская (Char D0x98)
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10101000,   // Й русская (Char D0x99)
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10001000,   // К русская (Char D0x9a)
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,
   
    B00011000,   // Л русская (Char D0x9b)
    B00101000,
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10000100,   // М русская (Char D0x9c)
    B11001100,
    B10110100,
    B10000100,
    B10000100,
    B10000100,
    B10000100,
    B00000000,
    6 + interval,
   
    B10001000,   // Н русская (Char D0x9d)
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B01110000,   // О русская (Char D0x9e)
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B11111000,   // П русская (Char D0x9f)
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B11110000,   // Р русская (Char D0xA0)
    B10001000,
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,
   
    B01110000,   // С русская (Char D0xA1)
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B11111000,   // Т русская (Char D0xA2)
    B10101000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,
   
    B10001000,   // У русская (Char D0xA3)
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B11000000,
    B00000000,
    5 + interval,
   
    B00100000,   // Ф русская (Char D0xA4)
    B01110000,
    B10101000,
    B10101000,
    B01110000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,
   
    B10001000,   // Х русская (Char D0xA5)
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10010000,   // Ц русская (Char D0xA6)
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B11111000,
    B00001000,
    5 + interval,
   
    B10001000,   // Ч русская (Char D0xA7)
    B10001000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B00001000,
    B00000000,
    5 + interval,
   
    B10001000,   // Ш русская (Char D0xA8)
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B11111000,
    B00000000,
    5 + interval,
   
    B10001000,   // Щ русская (Char D0xA9)
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B11111100,
    B00000100,
    6 + interval,
   
    B11000000,   // Ъ русская (Char D0xAA)
    B01000000,
    B01000000,
    B01110000,
    B01001000,
    B01001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10001000,   // Ы русская (Char D0xAB)
    B10001000,
    B10001000,
    B11101000,
    B10011000,
    B10011000,
    B11101000,
    B00000000,
    6 + interval,
   
    B10000000,   // Ь русская (Char D0xAC)
    B10000000,
    B10000000,
    B11100000,
    B10010000,
    B10010000,
    B11100000,
    B00000000,
    4 + interval,
   
    B01110000,   // Э русская (Char D0xAD)
    B10001000,
    B00001000,
    B01111000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10011000,   // Ю русская (Char D0xAE)
    B10100100,
    B10100100,
    B11100100,
    B10100100,
    B10100100,
    B10011000,
    B00000000,
    6 + interval,
   
    B01111000,   // Я русская (Char D0xAF)
    B10001000,
    B10001000,
    B01111000,
    B00101000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,
       
    B00000000,   // а русская (Char D0xB0)
    B00000000,
    B01110000,
    B00001000,
    B01111000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B00111000,   // б русская (Char D0xB1)
    B01000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // в русская (Char D0xB2)
    B00000000,
    B11110000,
    B10001000,
    B11110000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B00000000,   // г русская (Char D0xB3)
    B00000000,
    B01110000,
    B00001000,
    B01110000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B11100000,   // д русская (Char D0xB4)
    B00010000,
    B01101000,
    B10011000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // е русская (Char D0xB5)
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // ж русская (Char D0xB6)
    B00000000,
    B10101000,
    B10101000,
    B01110000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,

    B00000000,   // з русская (Char D0xB7)
    B00000000,
    B01110000,
    B10001000,
    B00110000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // и русская (Char D0xB8)
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00010000,   // й русская (Char D0xB9)
    B00100000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00000000,   // к русская (Char D0xBA)
    B00000000,
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B00000000,
    4 + interval,

    B00000000,   // л русская (Char D0xBB)
    B00000000,
    B00111000,
    B01001000,
    B01001000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // м русская (Char D0xBC)
    B00000000,
    B10001000,
    B11011000,
    B10101000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // н русская (Char D0xBD)
    B00000000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // о русская (Char D0xBE)
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // п русская (Char D0xBF)
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // р русская (Char D1x80)
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B11001000,
    B10110000,
    B10000000,
    5 + interval,

    B00000000,   // с русская (Char D1x81)
    B00000000,
    B01110000,
    B10001000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // т русская (Char D1x82)
    B00000000,
    B11010000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,

    B00000000,   // у русская (Char D1x83)
    B00000000,
    B10001000,
    B01001000,
    B00101000,
    B00010000,
    B00100000,
    B01000000,
    5 + interval,
   
    B00000000,   // ф русская (Char D1x84)
    B00000000,
    B00100000,
    B01110000,
    B10101000,
    B10101000,
    B01110000,
    B00100000,
    5 + interval,

    B00000000,   // х русская (Char D1x85)
    B00000000,
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // ц русская (Char D1x86)
    B00000000,
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B01101000,
    B00001000,
    5 + interval,

    B00000000,   // ч русская (Char D1x87)
    B00000000,
    B10010000,
    B10010000,
    B01110000,
    B00010000,
    B00010000,
    B00000000,
    4 + interval,

    B00000000,   // ш русская (Char D1x88)
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // щ русская (Char D1x89)
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01110100,
    B00000100,
    6 + interval,

    B00000000,   // ъ русская (Char D1x8A)
    B00000000,
    B11000000,
    B01000000,
    B01110000,
    B01001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // ы русская (Char D1x8B)
    B00000000,
    B10001000,
    B10001000,
    B11101000,
    B10011000,
    B11101000,
    B00000000,
    5 + interval,

    B00000000,   // ь русская (Char D1x8C)
    B00000000,
    B10000000,
    B10000000,
    B11100000,
    B10010000,
    B11100000,
    B00000000,
    4 + interval,

    B00000000,   // э русская (Char D1x8D)
    B00000000,
    B01110000,
    B10001000,
    B00111000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B00000000,   // ю русская (Char D1x8E)
    B00000000,
    B10011000,
    B10100100,
    B11100100,
    B10100100,
    B10011000,
    B00000000,
    6 + interval,

    B00000000,   // я русская (Char D1x8F)
    B00000000,
    B01111000,
    B10001000,
    B01111000,
    B00101000,
    B11001000,
    B00000000,
    5 + interval,

    B01010000,   // ё русская (Char D1x91)
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,
};

 void scrollFont() {
     for (int counter=0x20;counter<0x83;counter++){
         loadBufferLong(counter);
         delay(200);
     }
 }

// Scroll Message
void scrollMessage(const unsigned char * messageString) {
    int counter = 0;
    int myChar = 0;
    int CharRange = 0;
    do {
        // read back a char
        myChar =  pgm_read_byte_near(messageString + counter);
         if (myChar < 0x20 || myChar > 0xbf)     // байт не выводится, т.к. либо не включён в шрифт,
         {                                     
           if (myChar == 0xd0 || myChar == 0xd1) // либо это первый байт русских символов
            {
            CharRange = myChar - 0xd0 + 1 ;  // запоминается признак первого байта русских символов
            }
         }
         else if (myChar == 0x80)          //     второй байт русского символа
         {
            myChar = myChar + 49 ;         //     код 0xd180 - буква р в UTF-8
              if (myChar != 0 && CharRange ==2){loadBufferLong(myChar);
              }
              CharRange = 0 ;              // признак обнуляется после вывода второго байта символа             
         }
         else if (myChar == 0x81)
         {
              switch (CharRange) {
                  case 1:                  //     код 0xd081 - буква Ё в UTF-8
                     myChar = myChar - 1 ;
                     break;
                  case 2:                  //     код 0xd181 - буква с в UTF-8
                     myChar = myChar + 49 ;
                     break;
              }
              if (myChar != 0){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         else if (myChar > 0x81 && myChar < 0x90)  //   русские буквы т - я (0xd182 - 0xd18f в UTF-8)
         {
              myChar = myChar + 49 ;
              if (myChar != 0){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         else if (myChar > 0x8f && myChar < 0xc0) 
         {                                       
              switch (CharRange) {
                  case 1:                         //    русские буквы А - Я (0xd090 - 0xd0af в UTF-8)
                     myChar = myChar - 15 ;       //  и русские буквы а - п (0xd0b0 - 0xd0bf в UTF-8)
                     break;
                  case 2:                         //    код 0xd191 - буква ё в UTF-8
                     myChar = myChar + 48 ;
                     break;
              }           
              if (myChar != 0){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         else                             //  английские буквы и прочие символы (0x20 - 0x7f в UTF-8)
         {
              if (myChar != 0){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         counter++;
     }
     while (myChar != 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
    if (ascii >= 0x0020 && ascii <=0x00ff){
        for (int a=0;a<8;a++){                      // Loop 7 times for a 5x7 font
            // Index into character table to get row data
            unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 9) + a);
            unsigned long x = bufferLong [a*2];     // Load current scroll buffer
            x = x | c;                              // OR the new character onto end of current
            bufferLong [a*2] = x;                   // Store in buffer
        }
           // Index into character table for kerning data
        byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 9) + 8); 
        for (byte x=0; x<count;x++){
            rotateBufferLong();
            printBufferLong();
            delay(scrollDelay);
        }
    }
 }
// Rotate the buffer
void rotateBufferLong(){
    for (int a=0;a<8;a++){                      // Loop 7 times for a 5x7 font
        unsigned long x = bufferLong [a*2];     // Get low buffer entry
        byte b = bitRead(x,31);                 // Copy high order bit that gets lost in rotation
        x = x<<1;                               // Rotate left one bit
        bufferLong [a*2] = x;                   // Store new low buffer
        x = bufferLong [a*2+1];                 // Get high buffer entry
        x = x<<1;                               // Rotate left one bit
        bitWrite(x,0,b);                        // Store saved bit
        bufferLong [a*2+1] = x;                 // Store new high buffer
    }

// Display Buffer on LED matrix
void printBufferLong(){
  for (int a=0;a<8;a++){                    // Loop 7 times for a 5x7 font
    unsigned long x = bufferLong [a*2+1];   // Get high buffer entry
    byte y = x;                             // Mask off first character
    lc.setRow(3,a,y);                       // Send row to relevent MAX7219 chip
    x = bufferLong [a*2];                   // Get low buffer entry
    y = (x>>24);                            // Mask off second character
    lc.setRow(2,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>16);                            // Mask off third character
    lc.setRow(1,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>8);                             // Mask off forth character
    lc.setRow(0,a,y);                       // Send row to relevent MAX7219 chip
  }
}


(немного изменил - перезалил)

Тем, кто не хочет повторять мой тернистый путь, можно пользоваться :) Вроде в натуре велосипед, а днём с хвостом не найдёшь ...

Подключение элементарное - 3 вывода сигналов и 2 - питания, номера выводов для ардуины уны указаны в скетче, можно использовать другие выводы (тогда и в скетче надо исправить).

И ещё важное замечание про железо - сей девайс потребляет ток до 300 мА (когда горят все светодиоды, но там ещё и яркость установлена почти минимальная). Поэтому, несмотря на все спецификации, которые пишутся не для китайцев, я сильно не рекомендую подключать его напрямую к USB-порту, особенно к тому, что на передней панели у desktop'ных компьютеров. Для подключения сильноточных нагрузок используйте USB-разветвитель с дополнительным питанием.

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вт окт 04, 2016 23:06:52 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Ещё забыл опустить запятую - исправил и подкорректировал буквы Уу.
В исходном скетче высота символов была 7 точек вместо 8, поэтому после добавления обработки 8-й строки часть символов пришлось опускать до плинтуса :)

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт окт 06, 2016 06:13:41 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Редактировать уже не получается - в тестовой подпрограмме тоже надо расширить границы на новый шрифт:
void scrollFont() {
for (int counter=0x20;counter<0xС2;counter++){
loadBufferLong(counter);
delay(200);
}

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт окт 06, 2016 18:28:19 
Мучитель микросхем

Карма: 7
Рейтинг сообщений: 44
Зарегистрирован: Ср июн 21, 2006 08:24:32
Сообщений: 465
Откуда: Лисичанск
Рейтинг сообщения: 0
Я думаю вам понравится - на Ардуине и МАХ7219:
https://www.youtube.com/watch?v=nuK-QC3LZzY


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт окт 06, 2016 21:06:59 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
В плане проделанной работы понравилось. Я ещё не настолько силён в программировании, но объём представляю. Это уже не для новичков, потому как если новичку показать такой код, он вряд ли возьмётся его изучать. Вы его и не показываете :) А для потребителей, которые хотят не изучать, а "воткнуть, залить и чтоб работало", монохрома 8х8 тут уже, как мне кажется, маловато, надо что-нибудь типа такого:
https://ru.aliexpress.com/store/group/D ... 77770.html

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вс окт 09, 2016 08:04:26 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Причёсанная и, можно сказать, последняя версия 1.01. Сначала хотел отрезать все возможные символы, не входящие в знакогенератор, но, почесав левой задней за ухом, решил ограничиться ограничением по длине знакогенератора ... как-то так ... :) А если вместо каких-нить польских букОФФ будут выводиться русские, то и ладно :) Правда, по дороге всплыла ещё одна маленькая проблемка ... ежели в тексте будут кавычки, то компилятор их воспринимает, как завершение строки, что не есть хорошо ... Посему, пока вместо кавычек можно вводить двойные апострофы, что я и сделал.

Спойлер
Код:
// based on an orginal sketch by Arduino forum member "danigom"
// h t t p://forum.arduino.cc/index.php?action=profile;u=188950
// Русифицированная "бегущая строка" для светодиодных матриц 8х8 с чипом MAX7219.
// Вот скетч, который слепил "danigom" (см выше).
// А вот кириллица, которая в длинном массиве хранится, в скетче, который слепил "danigom".
// А вот Николай, которому мёду с утра не давай, а дай лишь добавить вот эту кириллицу,
// которая в длинном массиве хранится, к скетчу, который слепил "danigom"...
// Русифицированная версия называется "Велосипед V.1.01." На странице обсуждения мне сказали, что я изобретаю
// велосипед и я подумал: зачем строке пешком бежать? - пусть едет на велосипеде :) Обсуждали тут:  h t t p://
// arduino.ru/forum/programmirovanie/i-snova-pro-begushchuyu-stroku-na-svetodiodnykh-matritsakh-dlya-novichkov
// В строке scrollText можно использовать русские и английские буквы и другие стандартные символы, вводимые
// с русскоязычной клавиатуры, в любой последовательности.

#include <avr/pgmspace.h>
#include <LedControl.h>

const int numDevices = 4;          // number of MAX7219s used (количество соединённых матриц 8х8)
const long scrollDelay = 75;       // adjust scrolling speed (задержка сдвига текста в мс)
const unsigned char interval = 1;  // интервал между символами (в исходном варианте было только число,
                                   // на 1 превышающее ширину символа)
unsigned long bufferLong [16] = {0};

LedControl lc=LedControl(8,10,9,numDevices); // Номера выводов платы Arduino Uno, на которые поступают
                                             // сигналы DIN, CLK, CS (можно выбрать другие)
const unsigned char scrollText[] PROGMEM = {   
        " -=* ''Велосипед V.1.01.'' The quick brown fox still jumps, но это её проблемы, а пока съешь же ещё этих мягких французских булок, да выпей чаю. А если не хватит, закуси круассанами, лягушачьими лапками, e.t.c... *=-     "};

void setup(){
    for (int x=0; x<numDevices; x++){
        lc.shutdown(x,false);       //The MAX72XX is in power-saving mode on startup
        lc.setIntensity(x,3);       // Set the brightness to default value
        lc.clearDisplay(x);         // and clear the display
    }
}

void loop(){
    scrollMessage(scrollText);
//    scrollFont();                 // тестовая подпрограмма вывода всего шрифта
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

const unsigned char font5x7[] PROGMEM = {     // Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
    B00000000,   //Space (Char 0x20)           // Массив шрифта переделан на 8х, чтобы высота текста была 8 точек,
    B00000000,                                // вместо 7, при этом появилась возможность правильно расположить
    B00000000,                                // символы с "подстрочными" элементами (в т.ч. английские);
    B00000000,                                // также вместо 1x kerning data можно задать свой интервал.
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 +  interval,

    B10000000,   //!
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    B00000000,
    B10000000,
    B00000000,
    1 + interval,

    B10100000,   //"
    B10100000,
    B10100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    3 + interval,

    B01010000,   //#
    B01010000,
    B11111000,
    B01010000,
    B11111000,
    B01010000,
    B01010000,
    B00000000,
    5 + interval,

    B00100000,   //$
    B01111000,
    B10100000,
    B01110000,
    B00101000,
    B11110000,
    B00100000,
    B00000000,
    5 + interval,

    B11000000,   //%
    B11001000,
    B00010000,
    B00100000,
    B01000000,
    B10011000,
    B00011000,
    B00000000,
    5 + interval,

    B01100000,   //&
    B10010000,
    B10100000,
    B01000000,
    B10101000,
    B10010000,
    B01101000,
    B00000000,
    5 + interval,

    B11000000,   //'
    B01000000,
    B10000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    2 + interval,

    B00100000,   //(
    B01000000,
    B10000000,
    B10000000,
    B10000000,
    B01000000,
    B00100000,
    B00000000,
    3 + interval,

    B10000000,   //)
    B01000000,
    B00100000,
    B00100000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    3 + interval,

    B00000000,   //*
    B00100000,
    B10101000,
    B01110000,
    B10101000,
    B00100000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //+
    B00100000,
    B00100000,
    B11111000,
    B00100000,
    B00100000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11000000,
    B01000000,
    B10000000,
    2 + interval,

    B00000000,   //-
    B00000000,
    B00000000,
    B11111000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //.
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11000000,
    B11000000,
    B00000000,
    2 + interval,

    B00000000,   ///
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    B00000000,
    5 + interval,

    B01110000,   //0
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B01000000,   //1
    B11000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B01110000,   //2
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B11111000,
    B00000000,
    5 + interval,

    B11111000,   //3
    B00010000,
    B00100000,
    B00010000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00010000,   //4
    B00110000,
    B01010000,
    B10010000,
    B11111000,
    B00010000,
    B00010000,
    B00000000,
    5 + interval,

    B11111000,   //5
    B10000000,
    B11110000,
    B00001000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00110000,   //6
    B01000000,
    B10000000,
    B11110000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11111000,   //7
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B01110000,   //8
    B10001000,
    B10001000,
    B01110000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B01110000,   //9
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B00010000,
    B01100000,
    B00000000,
    5 + interval,

    B00000000,   //:
    B11000000,
    B11000000,
    B00000000,
    B11000000,
    B11000000,
    B00000000,
    B00000000,
    2 + interval,

    B00000000,   //;
    B11000000,
    B11000000,
    B00000000,
    B11000000,
    B01000000,
    B10000000,
    B00000000,
    2 + interval,

    B00010000,   //<
    B00100000,
    B01000000,
    B10000000,
    B01000000,
    B00100000,
    B00010000,
    B00000000,
    4 + interval,

    B00000000,   //=
    B00000000,
    B11111000,
    B00000000,
    B11111000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B10000000,   //>
    B01000000,
    B00100000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B00000000,
    4 + interval,

    B01110000,   //?
    B10001000,
    B00001000,
    B00010000,
    B00100000,
    B00000000,
    B00100000,
    B00000000,
    5 + interval,

    B01110000,   //@
    B10001000,
    B00001000,
    B01101000,
    B10101000,
    B10101000,
    B01110000,
    B00000000,
    5 + interval,

    B01110000,   //A
    B10001000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11110000,   //B
    B10001000,
    B10001000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B01110000,   //C
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11100000,   //D
    B10010000,
    B10001000,
    B10001000,
    B10001000,
    B10010000,
    B11100000,
    B00000000,
    5 + interval,

    B11111000,   //E
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B11111000,   //F
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B01110000,   //G
    B10001000,
    B10000000,
    B10111000,
    B10001000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B10001000,   //H
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11100000,   //I
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00111000,   //J
    B00010000,
    B00010000,
    B00010000,
    B00010000,
    B10010000,
    B01100000,
    B00000000,
    5 + interval,

    B10001000,   //K
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,

    B10000000,   //L
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B10001000,   //M
    B11011000,
    B10101000,
    B10101000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B10001000,   //N
    B10001000,
    B11001000,
    B10101000,
    B10011000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B01110000,   //O
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B11110000,   //P
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B01110000,   //Q
    B10001000,
    B10001000,
    B10001000,
    B10101000,
    B10010000,
    B01101000,
    B00000000,
    5 + interval,

    B11110000,   //R
    B10001000,
    B10001000,
    B11110000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,

    B01111000,   //S
    B10000000,
    B10000000,
    B01110000,
    B00001000,
    B00001000,
    B11110000,
    B00000000,
    5 + interval,

    B11111000,   //T
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B10001000,   //U
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B10001000,   //V
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00000000,
    5 + interval,

    B10001000,   //W
    B10001000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01010000,
    B00000000,
    5 + interval,

    B10001000,   //X
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B10001000,   //Y
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,

    B11111000,   //Z
    B00001000,
    B00010000,
    B00100000,
    B01000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,

    B11100000,   //[
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B11100000,
    B00000000,
    3 + interval,

    B00000000,   //(Backward Slash)
    B10000000,
    B01000000,
    B00100000,
    B00010000,
    B00001000,
    B00000000,
    B00000000,
    5 + interval,

    B11100000,   //]
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B11100000,
    B00000000,
    3 + interval,

    B00100000,   //^
    B01010000,
    B10001000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B00000000,   //_
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B11111000,
    B00000000,
    5 + interval,

    B10000000,   //`
    B01000000,
    B00100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    3 + interval,

    B00000000,   //a
    B00000000,
    B01110000,
    B00001000,
    B01111000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B10000000,   //b
    B10000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B00000000,   //c
    B00000000,
    B01110000,
    B10001000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00001000,   //d
    B00001000,
    B01101000,
    B10011000,
    B10001000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B00000000,   //e
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B00110000,   //f
    B01001000,
    B01000000,
    B11100000,
    B01000000,
    B01000000,
    B01000000,
    B00000000,
    5 + interval,

    B00000000,   //g
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B01110000,
    5 + interval,

    B10000000,   //h
    B10000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B01000000,   //i
    B00000000,
    B11000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00010000,   //j
    B00000000,
    B00110000,
    B00010000,
    B00010000,
    B10010000,
    B01100000,
    B00000000,
    4 + interval,

    B10000000,   //k
    B10000000,
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B00000000,
    4 + interval,

    B11000000,   //l
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B01000000,
    B11100000,
    B00000000,
    3 + interval,

    B00000000,   //m
    B00000000,
    B11010000,
    B10101000,
    B10101000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //n
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //o
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   //p
    B00000000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    5 + interval,

    B00000000,   //q
    B00000000,
    B01101000,
    B10011000,
    B10011000,
    B01101000,
    B00001000,
    B00001000,
    5 + interval,

    B00000000,   //r
    B00000000,
    B10110000,
    B11001000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,

    B00000000,   //s
    B00000000,
    B01110000,
    B10000000,
    B01110000,
    B00001000,
    B11110000,
    B00000000,
    5 + interval,

    B01000000,   //t
    B01000000,
    B11100000,
    B01000000,
    B01000000,
    B01001000,
    B00110000,
    B00000000,
    5 + interval,

    B00000000,   //u
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00000000,   //v
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B00000000,
    5 + interval,

    B00000000,   //w
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01010000,
    B00000000,
    5 + interval,

    B00000000,   //x
    B00000000,
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   //y
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B01110000,
    5 + interval,

    B00000000,   //z
    B00000000,
    B11111000,
    B00010000,
    B00100000,
    B01000000,
    B11111000,
    B00000000,
    5 + interval,

    B00100000,   //{
    B01000000,
    B01000000,
    B10000000,
    B01000000,
    B01000000,
    B00100000,
    B00000000,
    3 + interval,

    B10000000,   //|
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    1 + interval,

    B10000000,   //}
    B01000000,
    B01000000,
    B00100000,
    B01000000,
    B01000000,
    B10000000,
    B00000000,
    3 + interval,

    B00000000,   //~
    B00000000,
    B00000000,
    B01101000,
    B10010000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,

    B01100000,   // (Char 0x7F)
    B10010000,
    B10010000,
    B01100000,
    B00000000,
    B00000000,
    B00000000,
    B00000000,
    5 + interval,
   
    B01010000,   // Ё русская (Char D0x01)
    B11111000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,
   
    B00111000,   // А русская (Char D0x90)
    B01001000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B11111000,   // Б русская (Char D0x91)
    B10001000,
    B10000000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B11110000,   // В русская (Char D0x92)
    B10001000,
    B10001000,
    B11110000,
    B10001000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,
   
    B11111000,   // Г русская (Char D0x93)
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,
       
    B00111000,   // Д русская (Char D0x94)
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B11111100,
    B10000100,
    6 + interval,
   
    B11111000,   // Е русская (Char D0x95)
    B10000000,
    B10000000,
    B11110000,
    B10000000,
    B10000000,
    B11111000,
    B00000000,
    5 + interval,
       
    B10101000,   // Ж русская (Char D0x96)
    B10101000,
    B01110000,
    B00100000,
    B01110000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,
   
    B01110000,   // З русская (Char D0x97)
    B10001000,
    B00001000,
    B00110000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10001000,   // И русская (Char D0x98)
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10101000,   // Й русская (Char D0x99)
    B10001000,
    B10011000,
    B10101000,
    B11001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10001000,   // К русская (Char D0x9a)
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B10001000,
    B00000000,
    5 + interval,
   
    B00011000,   // Л русская (Char D0x9b)
    B00101000,
    B01001000,
    B01001000,
    B01001000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10000100,   // М русская (Char D0x9c)
    B11001100,
    B10110100,
    B10000100,
    B10000100,
    B10000100,
    B10000100,
    B00000000,
    6 + interval,
   
    B10001000,   // Н русская (Char D0x9d)
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B01110000,   // О русская (Char D0x9e)
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B11111000,   // П русская (Char D0x9f)
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B11110000,   // Р русская (Char D0xA0)
    B10001000,
    B10001000,
    B10001000,
    B11110000,
    B10000000,
    B10000000,
    B00000000,
    5 + interval,
   
    B01110000,   // С русская (Char D0xA1)
    B10001000,
    B10000000,
    B10000000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B11111000,   // Т русская (Char D0xA2)
    B10101000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,
   
    B10001000,   // У русская (Char D0xA3)
    B10001000,
    B10001000,
    B10001000,
    B01010000,
    B00100000,
    B11000000,
    B00000000,
    5 + interval,
   
    B00100000,   // Ф русская (Char D0xA4)
    B01110000,
    B10101000,
    B10101000,
    B01110000,
    B00100000,
    B00100000,
    B00000000,
    5 + interval,
   
    B10001000,   // Х русская (Char D0xA5)
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,
   
    B10010000,   // Ц русская (Char D0xA6)
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B11111000,
    B00001000,
    5 + interval,
   
    B10001000,   // Ч русская (Char D0xA7)
    B10001000,
    B10001000,
    B10001000,
    B01111000,
    B00001000,
    B00001000,
    B00000000,
    5 + interval,
   
    B10001000,   // Ш русская (Char D0xA8)
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B11111000,
    B00000000,
    5 + interval,
   
    B10001000,   // Щ русская (Char D0xA9)
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B11111100,
    B00000100,
    6 + interval,
   
    B11000000,   // Ъ русская (Char D0xAA)
    B01000000,
    B01000000,
    B01110000,
    B01001000,
    B01001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10001000,   // Ы русская (Char D0xAB)
    B10001000,
    B10001000,
    B11101000,
    B10011000,
    B10011000,
    B11101000,
    B00000000,
    6 + interval,
   
    B10000000,   // Ь русская (Char D0xAC)
    B10000000,
    B10000000,
    B11100000,
    B10010000,
    B10010000,
    B11100000,
    B00000000,
    4 + interval,
   
    B01110000,   // Э русская (Char D0xAD)
    B10001000,
    B00001000,
    B01111000,
    B00001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B10011000,   // Ю русская (Char D0xAE)
    B10100100,
    B10100100,
    B11100100,
    B10100100,
    B10100100,
    B10011000,
    B00000000,
    6 + interval,
   
    B01111000,   // Я русская (Char D0xAF)
    B10001000,
    B10001000,
    B01111000,
    B00101000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,
       
    B00000000,   // а русская (Char D0xB0)
    B00000000,
    B01110000,
    B00001000,
    B01111000,
    B10001000,
    B01111000,
    B00000000,
    5 + interval,

    B00111000,   // б русская (Char D0xB1)
    B01000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // в русская (Char D0xB2)
    B00000000,
    B11110000,
    B10001000,
    B11110000,
    B10001000,
    B11110000,
    B00000000,
    5 + interval,

    B00000000,   // г русская (Char D0xB3)
    B00000000,
    B01110000,
    B00001000,
    B01110000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B11100000,   // д русская (Char D0xB4)
    B00010000,
    B01101000,
    B10011000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // е русская (Char D0xB5)
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // ж русская (Char D0xB6)
    B00000000,
    B10101000,
    B10101000,
    B01110000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,

    B00000000,   // з русская (Char D0xB7)
    B00000000,
    B01110000,
    B10001000,
    B00110000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // и русская (Char D0xB8)
    B00000000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00010000,   // й русская (Char D0xB9)
    B00100000,
    B10001000,
    B10001000,
    B10001000,
    B10011000,
    B01101000,
    B00000000,
    5 + interval,

    B00000000,   // к русская (Char D0xBA)
    B00000000,
    B10010000,
    B10100000,
    B11000000,
    B10100000,
    B10010000,
    B00000000,
    4 + interval,

    B00000000,   // л русская (Char D0xBB)
    B00000000,
    B00111000,
    B01001000,
    B01001000,
    B01001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // м русская (Char D0xBC)
    B00000000,
    B10001000,
    B11011000,
    B10101000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // н русская (Char D0xBD)
    B00000000,
    B10001000,
    B10001000,
    B11111000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // о русская (Char D0xBE)
    B00000000,
    B01110000,
    B10001000,
    B10001000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // п русская (Char D0xBF)
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B10001000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // р русская (Char D1x80)
    B00000000,
    B10110000,
    B11001000,
    B10001000,
    B11001000,
    B10110000,
    B10000000,
    5 + interval,

    B00000000,   // с русская (Char D1x81)
    B00000000,
    B01110000,
    B10001000,
    B10000000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // т русская (Char D1x82)
    B00000000,
    B11010000,
    B10101000,
    B10101000,
    B10101000,
    B10101000,
    B00000000,
    5 + interval,

    B00000000,   // у русская (Char D1x83)
    B00000000,
    B10001000,
    B01001000,
    B00101000,
    B00010000,
    B00100000,
    B01000000,
    5 + interval,
   
    B00000000,   // ф русская (Char D1x84)
    B00000000,
    B00100000,
    B01110000,
    B10101000,
    B10101000,
    B01110000,
    B00100000,
    5 + interval,

    B00000000,   // х русская (Char D1x85)
    B00000000,
    B10001000,
    B01010000,
    B00100000,
    B01010000,
    B10001000,
    B00000000,
    5 + interval,

    B00000000,   // ц русская (Char D1x86)
    B00000000,
    B10010000,
    B10010000,
    B10010000,
    B10010000,
    B01101000,
    B00001000,
    5 + interval,

    B00000000,   // ч русская (Char D1x87)
    B00000000,
    B10010000,
    B10010000,
    B01110000,
    B00010000,
    B00010000,
    B00000000,
    4 + interval,

    B00000000,   // ш русская (Char D1x88)
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // щ русская (Char D1x89)
    B00000000,
    B10001000,
    B10101000,
    B10101000,
    B10101000,
    B01110100,
    B00000100,
    6 + interval,

    B00000000,   // ъ русская (Char D1x8A)
    B00000000,
    B11000000,
    B01000000,
    B01110000,
    B01001000,
    B01110000,
    B00000000,
    5 + interval,

    B00000000,   // ы русская (Char D1x8B)
    B00000000,
    B10001000,
    B10001000,
    B11101000,
    B10011000,
    B11101000,
    B00000000,
    5 + interval,

    B00000000,   // ь русская (Char D1x8C)
    B00000000,
    B10000000,
    B10000000,
    B11100000,
    B10010000,
    B11100000,
    B00000000,
    4 + interval,

    B00000000,   // э русская (Char D1x8D)
    B00000000,
    B01110000,
    B10001000,
    B00111000,
    B10001000,
    B01110000,
    B00000000,
    5 + interval,
   
    B00000000,   // ю русская (Char D1x8E)
    B00000000,
    B10011000,
    B10100100,
    B11100100,
    B10100100,
    B10011000,
    B00000000,
    6 + interval,

    B00000000,   // я русская (Char D1x8F)
    B00000000,
    B01111000,
    B10001000,
    B01111000,
    B00101000,
    B11001000,
    B00000000,
    5 + interval,

    B01010000,   // ё русская (Char D1x91)
    B00000000,
    B01110000,
    B10001000,
    B11111000,
    B10000000,
    B01110000,
    B00000000,
    5 + interval,
};

 void scrollFont() {
     for (int counter=0x20;counter<0xC2;counter++){
         loadBufferLong(counter);
         delay(200);
     }
 }

// Scroll Message
void scrollMessage(const unsigned char * messageString) {
    int counter = 0;
    int myChar = 0;
    int CharRange = 0;
    do {
        // read back a char
        myChar =  pgm_read_byte_near(messageString + counter);
 
         if (myChar < 0x20 || myChar > 0xbf)      // байт не выводится, т.к. либо не включён в шрифт,
         {                                     
           if (myChar == 0xd0 || myChar == 0xd1){ // либо это первый байт русских символов           
            CharRange = myChar - 0xd0 + 1 ;       // запоминается признак первого байта
            }
         }
         else if (myChar > 0x7f && myChar < 0x90) //     второй байт русского символа
         {
         switch (CharRange) {
                  case 1:                         //     код 0xd081 - буква Ё в UTF-8
                     myChar = myChar - 1 ;
                     break;
                  case 2:                         //   русские буквы р - я (0xd180 - 0xd18f в UTF-8)
                     myChar = myChar + 49 ;
                     break;
              }
              if (myChar != 0 &&  myChar < 194){loadBufferLong(myChar);
              CharRange = 0 ;                     // признак обнуляется после вывода второго байта символа
              }
         }
         else if (myChar > 0x8f && myChar < 0xc0) 
         {                                       
              switch (CharRange) {
                  case 1:                         //    русские буквы А - Я (0xd090 - 0xd0af в UTF-8)
                     myChar = myChar - 15 ;       //  и русские буквы а - п (0xd0b0 - 0xd0bf в UTF-8)
                     break;
                  case 2:                         //    код 0xd191 - буква ё в UTF-8
                     myChar = myChar + 48 ;
                     break;
              }           
              if (myChar != 0 &&  myChar < 194){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         else                             //  английские буквы и прочие символы (0x20 - 0x7f в UTF-8)
         {
              if (myChar != 0){loadBufferLong(myChar);
              CharRange = 0 ;
              }
         }
         counter++;
     }
     while (myChar != 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
    if (ascii >= 0x0020 && ascii <=0x00ff){
        for (int a=0;a<8;a++){                      // Loop 7 times for a 5x7 font
            // Index into character table to get row data
            unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 9) + a);
            unsigned long x = bufferLong [a*2];     // Load current scroll buffer
            x = x | c;                              // OR the new character onto end of current
            bufferLong [a*2] = x;                   // Store in buffer
        }
           // Index into character table for kerning data
        byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 9) + 8); 
        for (byte x=0; x<count;x++){
            rotateBufferLong();
            printBufferLong();
            delay(scrollDelay);
        }
    }
 }
// Rotate the buffer
void rotateBufferLong(){
    for (int a=0;a<8;a++){                      // Loop 7 times for a 5x7 font
        unsigned long x = bufferLong [a*2];     // Get low buffer entry
        byte b = bitRead(x,31);                 // Copy high order bit that gets lost in rotation
        x = x<<1;                               // Rotate left one bit
        bufferLong [a*2] = x;                   // Store new low buffer
        x = bufferLong [a*2+1];                 // Get high buffer entry
        x = x<<1;                               // Rotate left one bit
        bitWrite(x,0,b);                        // Store saved bit
        bufferLong [a*2+1] = x;                 // Store new high buffer
    }

// Display Buffer on LED matrix
void printBufferLong(){
  for (int a=0;a<8;a++){                    // Loop 7 times for a 5x7 font
    unsigned long x = bufferLong [a*2+1];   // Get high buffer entry
    byte y = x;                             // Mask off first character
    lc.setRow(3,a,y);                       // Send row to relevent MAX7219 chip
    x = bufferLong [a*2];                   // Get low buffer entry
    y = (x>>24);                            // Mask off second character
    lc.setRow(2,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>16);                            // Mask off third character
    lc.setRow(1,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>8);                             // Mask off forth character
    lc.setRow(0,a,y);                       // Send row to relevent MAX7219 chip
  }
}

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Пн окт 10, 2016 06:41:17 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
И на обратный слэш компилятор тоже ругается. Кто не знает, что это такое - вот его фото: \ :)

Зато этот самый слэш используется в текстовой строке для непосредственного ввода кодов символов.

Делается это так: \x22 (здесь 0х22 - шестнадцатеричный код кавычек). Соответственно, введя в строке вот такое:
\x22Велосипед V.1.01.\x22
получим отображение вот этакого:
"Велосипед V.1.01."

Сам обратный слэш в данном скетче тоже можно вводить его кодом. Код у него 0x5c. Посему, если мы введём вот такое:
\x5cВелосипед V.1.01.\x5c
то получим вот этакое:
\Велосипед V.1.01.\

Ещё в инетовских закоулках наткнулся на такую рекомендацию, что если де надо ввести кавычки, то вводите их так: '\'

И действительно, вводя '\'Велосипед V.1.01.'\', получим ''Велосипед V.1.01.'' ... только это будут не кавычки ... а те самые двойные апострофы :) И они мне как раз нравятся больше, чем нарисованные тут кавычки :) ... хотя их можно перерисовать ... но ... ну его в ... пустую миску :)

Воот ... Но это ещё не все нюансы нашего краСИвого языка :) В вышеприведённых примерах, когда непосредственно за шестнадцатеричным кодом следует русская буква (или всем понятное слово Мяу), никаких проблем не возникает. Но если сразу за кодом будут цифры (например, вы захотите ввести "12345"), то недалёкий компилятор воспримет эти цифры как продолжение кода. Он же не такой умный, как представители семейства кошачьих. Или английские символы abcdef -они тоже будут восприниматься как код. И чё тогда делать? Можно после кода кавычек писать цифры через пробел. А если очень хочется вплотную, то можно вспомнить о том, что целую строку можно составлять из нескольких кусков, заключённых в кавычки. При этом код писать в одном куске, а то, что надо выводить как текст - в другом.

Ну, а если вы будете писать кавычки как парные апострофы, а обратный слэш и вовсе в лотке видали, то и не надо всем этим заморачиваться :)

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Пн окт 24, 2016 07:05:20 
Родился

Зарегистрирован: Пн окт 24, 2016 06:46:12
Сообщений: 5
Рейтинг сообщения: 0
Доброго времени суток! Полосатый, благодарю за скетч с русскими символами! До этого находил рабочий , но с переделанными символами. Смотрелость криво. НО! И там, и там у меня выводится текст только на 4 модуля из 8. Все спаяно нормально- в других скетчах, было что то вроде теста- включались все матрицы на вреемя. Где копать и изменять код? В конце скетча( на другом скетче) пробовал менять места и добавлять подобные строки где >>24, >>16 и т д. у меня 2 платы с 4 матрицами на MAX7219


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Пн окт 24, 2016 20:50:46 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
У меня только один 4-матричный модуль, поэтому я пока не проверял правдивость утверждения
numDevices = 4; // number of MAX7219s used
Если не работает, то может надо библиотеку покопать, пока не знаю.
А с переделанными символами - это не рабочий, а покорёженный, неполноценный. Он не просто криво смотрится, а выводит только те символы, которые заменили, при этом писать надо транслитом.

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вт окт 25, 2016 09:52:30 
Родился

Зарегистрирован: Пн окт 24, 2016 06:46:12
Сообщений: 5
Рейтинг сообщения: 0
Согласен, переделанные буквы - это трудность ввода текста и отсутствие второго языка. Но самое простое, что я сначала смог сделать. Библиотеки не смотрел. Я новичок пока в этом деле, хоть и активно познающий. :solder: Чем они открываются и насколько это будет похоже на код до компиляции, который приводим тут? :dont_know: Просьба всем кто читает тему и знает больше написать какие могут быть варианты программного расширения бегущей строки с модулями вышеуказанной марки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Ср окт 26, 2016 09:17:29 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Вот здесь:
http://wikihandbk.com/wiki/Arduino:%D0% ... LedControl
под заголовком "Создание экземпляра класса" пишут, что в одном экземпляре можно указывать до 8 чипов. У меня в сторону уменьшения работает, а в сторону увеличения проверить не на чем.

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт окт 27, 2016 07:55:59 
Родился

Зарегистрирован: Пн окт 24, 2016 06:46:12
Сообщений: 5
Рейтинг сообщения: 0
Благодарю! Ссылка на очень хороший сайт. Покопался еще раз в коде, изменил очень много и понял что нужно изучать язык. Больше 4 матриц не работает. Все, чего добился- это вывод на 3 матрицы, на 3 первых и 1 ПОСЛЕДНЮЮ, и исходный вариант :( . В общем, буду осваивать этот замечательный сайт и книжки Петина.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Ср ноя 23, 2016 22:03:07 
Родился

Зарегистрирован: Пн окт 24, 2016 06:46:12
Сообщений: 5
Рейтинг сообщения: 0
Библиотеку смотрел- идей что там изменить нет. Использую ledControl. Проверил, до скольки матриц поддерживается- до 8, все должно вроде работать. Проблема хитрее. Главное вот- при установке числа устройств 4 у меня идет одинаковое содержание на правых 4 и левых 4 матрицах. т е они работают, но вместо продолжения текста на остальные 4 матрицы - его бесполезное повторение там. Направьте на путь истинный кто сталкивался и\или понимает!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Сб ноя 26, 2016 01:53:32 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Путь истинный, как мне думается, где-то тут:
8 точек на 4 матрицы = 32 точки.
Максимальная длина переменной в здешнем языке - тоже 32 бита, double precision тут не работает.
Значит надо как-то удваивать буферлонг и затем пропихивать это всё последовательно в матрицы.
У меня нет ни второго модуля, ни такой задачи, поэтому как именно это сделать - это уже не ко мне.

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Пн ноя 28, 2016 07:47:44 
Родился

Зарегистрирован: Пн ноя 28, 2016 07:35:18
Сообщений: 2
Рейтинг сообщения: 0
Доброе утро!
Прошу прощения за то, что вмешиваюсь. Но хотел бы тоже попросить помощи. Перепробовав много скетчей, счёл что предложенный котом :beer: - самый интересный и удобный. У меня вариант с 4 матрицами (8х32) - текст выводится нормально - русский и английский. Но! возникла проблема - как вывести текст, не заданный жёстко в константу, а динамический? например - значение счётчика, датчика и т.п.? Когда просто пытаюсь вывести :


const unsigned char TextWaterDebet[] PROGMEM = { "Расход воды: "};
unsigned char WaterDebet[] = "0"; // счётчик расхода воды
....
scrollMessage(TextWaterDebet);
WaterDebet=random(1);
scrollMessage(WaterDebet);
...
текст выводится нормально, а вместо цифирек в WaterDebet - полная абра-кадабра :shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вт ноя 29, 2016 01:23:48 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Это просто полностью русифицированный скетч. Перерисовка английского шрифта, как я уже писал - это не русификация. И его задача - выводить текст в виде бегущей строки. Текст можно вписать любой, т.е. это не константа. А вот у вас "расход воды" - это действительно константа. Если хотите использовать именно этот скетч, то, в общих чертах, можно посоветовать преобразование ваших чисел в текст и добавление этого текста к строке. Вот тут, к примеру, это обсуждали:

http://forum.amperka.ru/threads/%D0%9F% ... D1%83.740/

или тут:

http://mypractic.ru/urok-30-tekstovye-s ... tring.html

А тут пишут про функцию char()

http://arduino.su/Conversion

и т.л.

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт дек 01, 2016 12:12:12 
Родился

Зарегистрирован: Пн ноя 28, 2016 07:35:18
Сообщений: 2
Рейтинг сообщения: 0
Получилось, спасибо! не стал "склеивать" строки, просто вывожу их последовательно
Прикрутил и датчик температуры. Заканчиваю подготовку интерфейсной платы, впоследствии попробую добавит ESP8266, чтобы контролировать через телефон и корректировать данные при необходиости


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Вт дек 27, 2016 13:29:45 
Родился

Зарегистрирован: Пн окт 24, 2016 06:46:12
Сообщений: 5
Рейтинг сообщения: 0
Полосатый писал(а):
Путь истинный, как мне думается, где-то тут:
8 точек на 4 матрицы = 32 точки.
Максимальная длина переменной в здешнем языке - тоже 32 бита, double precision тут не работает.
Значит надо как-то удваивать буферлонг и затем пропихивать это всё последовательно в матрицы.
У меня нет ни второго модуля, ни такой задачи, поэтому как именно это сделать - это уже не ко мне.


это объясняет мои нестыковки. зачем тогда в скетче до 8 модулей указывается- интересно. про буферлонг не в курсе- пока не понимаю "с чем это едят". гляжу на большие уличные вывески на больших матрицах- их получается вообще на 1 ардуине сделать невозможно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Ср дек 28, 2016 02:55:07 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
В скетче не указывается до 8 модулей, это в библиотеке указывается. А bufferLong в скетче не только указывается, но и используется :) На ардуине сделать можно, причём разными способами. Можно выводить последовательно (как написал TomcatX, только не символы, а "буферы"), можно вообще создать второй экземпляр класса и подключить вторую группу модулей к другим выходам ардуины ...

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)
СообщениеДобавлено: Чт мар 02, 2017 17:07:41 
Родился

Зарегистрирован: Чт мар 02, 2017 17:00:20
Сообщений: 1
Рейтинг сообщения: 0
код который( Лирику опускаю, а результат тут:) работает нормально, но стоит изменить русский текст, перестает выводить русские буквы, выводит только ч и запятые
Разобрался, при редактировании почему то меняется кодировка русских букв в ардуино с UTF-8 но какую то другую, если редактировать скетч в ворде, менять кодировку на UTF-8, снова копировать и вставлять, все идет, но это неудобно


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y