Обсуждаем контроллеры компании Atmel.
Ответить

Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Вт окт 04, 2016 05:31:10

Я и сам только что начал изучать микроконтроллеры, купил ардуину уну, и вот такую светодиодную матрицу 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 матрицы (последний комментарий) :) (шучу ... программировать я начинал ... давно ... на фортране ...) По инерции ещё добавил вывод по строкам (было по кадрам):



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

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



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

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

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

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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Вт окт 04, 2016 23:06:52

Ещё забыл опустить запятую - исправил и подкорректировал буквы Уу.
В исходном скетче высота символов была 7 точек вместо 8, поэтому после добавления обработки 8-й строки часть символов пришлось опускать до плинтуса :)

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт окт 06, 2016 06:13:41

Редактировать уже не получается - в тестовой подпрограмме тоже надо расширить границы на новый шрифт:
void scrollFont() {
for (int counter=0x20;counter<0xС2;counter++){
loadBufferLong(counter);
delay(200);
}

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт окт 06, 2016 18:28:19

Я думаю вам понравится - на Ардуине и МАХ7219:
https://www.youtube.com/watch?v=nuK-QC3LZzY

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт окт 06, 2016 21:06:59

В плане проделанной работы понравилось. Я ещё не настолько силён в программировании, но объём представляю. Это уже не для новичков, потому как если новичку показать такой код, он вряд ли возьмётся его изучать. Вы его и не показываете :) А для потребителей, которые хотят не изучать, а "воткнуть, залить и чтоб работало", монохрома 8х8 тут уже, как мне кажется, маловато, надо что-нибудь типа такого:
https://ru.aliexpress.com/store/group/D ... 77770.html

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Вс окт 09, 2016 08:04:26

Причёсанная и, можно сказать, последняя версия 1.01. Сначала хотел отрезать все возможные символы, не входящие в знакогенератор, но, почесав левой задней за ухом, решил ограничиться ограничением по длине знакогенератора ... как-то так ... :) А если вместо каких-нить польских букОФФ будут выводиться русские, то и ладно :) Правда, по дороге всплыла ещё одна маленькая проблемка ... ежели в тексте будут кавычки, то компилятор их воспринимает, как завершение строки, что не есть хорошо ... Посему, пока вместо кавычек можно вводить двойные апострофы, что я и сделал.

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Пн окт 10, 2016 06:41:17

И на обратный слэш компилятор тоже ругается. Кто не знает, что это такое - вот его фото: \ :)

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

Делается это так: \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 -они тоже будут восприниматься как код. И чё тогда делать? Можно после кода кавычек писать цифры через пробел. А если очень хочется вплотную, то можно вспомнить о том, что целую строку можно составлять из нескольких кусков, заключённых в кавычки. При этом код писать в одном куске, а то, что надо выводить как текст - в другом.

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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Пн окт 24, 2016 07:05:20

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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Пн окт 24, 2016 20:50:46

У меня только один 4-матричный модуль, поэтому я пока не проверял правдивость утверждения
numDevices = 4; // number of MAX7219s used
Если не работает, то может надо библиотеку покопать, пока не знаю.
А с переделанными символами - это не рабочий, а покорёженный, неполноценный. Он не просто криво смотрится, а выводит только те символы, которые заменили, при этом писать надо транслитом.

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Вт окт 25, 2016 09:52:30

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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Ср окт 26, 2016 09:17:29

Вот здесь:
http://wikihandbk.com/wiki/Arduino:%D0% ... LedControl
под заголовком "Создание экземпляра класса" пишут, что в одном экземпляре можно указывать до 8 чипов. У меня в сторону уменьшения работает, а в сторону увеличения проверить не на чем.

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт окт 27, 2016 07:55:59

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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Ср ноя 23, 2016 22:03:07

Библиотеку смотрел- идей что там изменить нет. Использую ledControl. Проверил, до скольки матриц поддерживается- до 8, все должно вроде работать. Проблема хитрее. Главное вот- при установке числа устройств 4 у меня идет одинаковое содержание на правых 4 и левых 4 матрицах. т е они работают, но вместо продолжения текста на остальные 4 матрицы - его бесполезное повторение там. Направьте на путь истинный кто сталкивался и\или понимает!

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Сб ноя 26, 2016 01:53:32

Путь истинный, как мне думается, где-то тут:
8 точек на 4 матрицы = 32 точки.
Максимальная длина переменной в здешнем языке - тоже 32 бита, double precision тут не работает.
Значит надо как-то удваивать буферлонг и затем пропихивать это всё последовательно в матрицы.
У меня нет ни второго модуля, ни такой задачи, поэтому как именно это сделать - это уже не ко мне.

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Пн ноя 28, 2016 07:47:44

Доброе утро!
Прошу прощения за то, что вмешиваюсь. Но хотел бы тоже попросить помощи. Перепробовав много скетчей, счёл что предложенный котом :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

Это просто полностью русифицированный скетч. Перерисовка английского шрифта, как я уже писал - это не русификация. И его задача - выводить текст в виде бегущей строки. Текст можно вписать любой, т.е. это не константа. А вот у вас "расход воды" - это действительно константа. Если хотите использовать именно этот скетч, то, в общих чертах, можно посоветовать преобразование ваших чисел в текст и добавление этого текста к строке. Вот тут, к примеру, это обсуждали:

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

или тут:

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

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

http://arduino.su/Conversion

и т.л.

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт дек 01, 2016 12:12:12

Получилось, спасибо! не стал "склеивать" строки, просто вывожу их последовательно
Прикрутил и датчик температуры. Заканчиваю подготовку интерфейсной платы, впоследствии попробую добавит ESP8266, чтобы контролировать через телефон и корректировать данные при необходиости

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Вт дек 27, 2016 13:29:45

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


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

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Ср дек 28, 2016 02:55:07

В скетче не указывается до 8 модулей, это в библиотеке указывается. А bufferLong в скетче не только указывается, но и используется :) На ардуине сделать можно, причём разными способами. Можно выводить последовательно (как написал TomcatX, только не символы, а "буферы"), можно вообще создать второй экземпляр класса и подключить вторую группу модулей к другим выходам ардуины ...

Re: Arduino и MAX7219 - бегущая строка, рус. (для новичков)

Чт мар 02, 2017 17:07:41

код который( Лирику опускаю, а результат тут:) работает нормально, но стоит изменить русский текст, перестает выводить русские буквы, выводит только ч и запятые
Разобрался, при редактировании почему то меняется кодировка русских букв в ардуино с UTF-8 но какую то другую, если редактировать скетч в ворде, менять кодировку на UTF-8, снова копировать и вставлять, все идет, но это неудобно
Ответить