8 (800) 350-30-16

Бегущая строка на MAX7219

Дата: / Категория: Дисплеи / Автор: DOC_tr

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

Данный модуль интересен не просто как какое-то устройство - что бы иметь возможность управлять светодиодами на табло, его нужно вначале собрать. 

А после сборки мы с вами попробуем сделать такую интересную штуку, как бегущая строка.

Вот что представляет из себя модуль после того как он был вынут из антистатического пакета.

В целом все достаточно ясно - 2 конденсатора, 1 резистор, и разъемы для микросхемы и табло.

На плате тоже показано что именно и куда впаивать.

Сразу скажу что припаивать нужно все с той стороны, с которой находятся обозначения. Я вначале припаял с другой стороны и запорол один модуль потому что все контакты получились отзеркалены. Конечно я смог выгнуть ножки процессора в другую сторону, но с табло так сделать не вышло. Так что учитесь на моих ошибках.

После детального просмотра всех деталей начинаем работу.

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

После делим контакты для табло на 2 части (по 8 штук и припаиваем их с разных сторон)

В этом нет ничего сложного, как и в пайке контактов для микросхемы

После припаиваем штырьковые соединители с обоих сторон и вставляем микросхему и табло. Табло не важно как вставлять - если вы ошибетесь, то в скетче строка будет бежать не горизонтально а вертикально, а вот микросхему важно. На плате показано как именно ее подключать - выемка на микросхеме должна быть с той же стороны что и рисунок на плате.

Ну вот - на этом сборка нашего модуля готова. Приступим к его программированию.

Подключаем к нашей Arduino MEGA по следующей схеме

И получаем

Управлять мы всем этим будем с помощью библиотеки ledControl. Кстати, данные модули можно подключить каскадно, и данная библиотека рассчитана на это. 4м параметром ее конструктор принимает количество подключенных каскадно плат. Но в данной статье я не буду рассказывать об этом, я просто покажу как сделать бегущую строку.

#include "LedControl.h"
LedControl lc=LedControl(8,10,9,1);

byte ROBOM[8][51] = {
{0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0 ,0 ,0 ,1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0 ,0 ,0 ,1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0 ,0 ,0 ,1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0},
{0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0 ,0 ,0 ,1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 ,0 ,1 ,0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 ,1 ,0 ,0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0}
};

void setup() {
// Инициализируем дисплей и устанавливаем яркость
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
}
int mainss = 0;
void loop() {
for(int i = 0 ; i < 8; i++){
for(int k = 0 ; k < sizeof(ROBOM[i]); k++){
// запоминаем первую позицию, потому что при смещении она будет переписана
if(k == 0){
mainss = ROBOM[i][k];
}
// смещаем все данные в наших массивах на один
int s = k >= sizeof(ROBOM[i]) ? 0 : k+1;
ROBOM[i][k] = k == sizeof(ROBOM[i]) - 1 ? mainss : ROBOM[i][s];
// и выводим уже смещенные данные
lc.setLed(0,i,k,ROBOM[i][k]);
}
}
delay(50);
}

Вначале как обычно идет массив с нашей строкой. Мы его, конечно, делали не в ручную - в ближайшее время у нас на сайте появится удобный интерфейс для рисования подобных строк с импортом в простые массивы или битовые массивы. 

Он и отвечает за отображение нашей строки.

За каждую итерацию мы смещаем внутренние массивы на один, и в следствии этого происходит эффект бегущей строки. Вы можете легко изменять строку изменяя только лишь массив. Остальной код трогать не требуется.

А вот как все это выглядит в работающем состоянии

Теги: #Бегущая строка, #MAX7219

Ваша оценка:

Рейтинг: 8.4 (Оценок: 6)

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены