Авторизация  

   

Свежие обсуждения  

   
Wait a minute, while we are rendering the calendar
   
   

Комментарии блогов  

Josef Vilka Побег. Трехлетняя история.
13 ноября 2017
Благодарю.
Проходимец Побег. Трехлетняя история.
02 ноября 2017
Все правильно сделал...
Josef Vilka Жизнь или кошелек? Размышления о деньгах...
07 мая 2017
Мне нравится, что до конца - практически никто не дочитывает....
Josef Vilka Мой опыт съемки в клипе Христини Соловій - "Хто, як не ти?"
29 апреля 2017
Да, было интересно - и наблюдать, и участвовать... https://www.youtube.com/watch?v=mrAKU8OnRPo
Josef Vilka Выводим русские символы на MAX7219 модуль бегущей строки Ардуино
18 апреля 2017
Леонид, посмотрите вот здесь http://rc-rls.com.ua/index.php?option=com_easyblog&view=entry&id=60&Ite...
   

Пользователи on-line  

   
   

ПРОСТРАНСТВО ВОКРУГ НАС.

Блог о жизни, работе, отдыхе, путешествиях, моделизме, увлечениях. О том, что меня окружает, что зацепило или что для меня показалось мне значимым и интересным. Скорее всего - не буду писать здесь о войне. Ибо о ней - пишу много и в других местах.

Выводим русские символы на MAX7219 модуль бегущей строки Ардуино

Не так давно я купил себе Arduio Uno и панель из четырех MAX7219 модулей бегущей строки для Ардуино.

 

Обошлось это не так много денег и покупалось конечно же, на ebay. Кстати, если кто не знает, как покупать на данном аукционе - пишите - разъясню.

 

Итак, берем вот эту планку из четырех модулей и сам микроконтроллер. У меня есть только Arduio Uno.

b2ap3 thumbnail Ardu Ukrb2ap3 thumbnail Ardu back

Берем пять проводков различного цвета(для удобства и чтобы не перепутать контакты) и подключаем эту планочку всего лишь с помощью пяти проводков напрямую к платке Arduio Uno вот по этой схемке

b2ap3_thumbnail_max7219_schema1.png

Получаем вот такую картину.


 

b2ap3_thumbnail_Arduino-uno.JPGb2ap3_thumbnail_Panel.JPG

Ну, а Arduio Uno подключаем по USB-порту к помпьютеру

.b2ap3_thumbnail_Ardu-la-la.JPG

Далее, взяв оболочку, скачав и сохранив в соответствующей папке библиотеку LedControl.h (вот отсюда),  и правильно выставив порт и модель, на котором находится ваша Arduio Uno - можно приниматься за сам скетч(так называется текст самой программки)

 

Он довольно не сложен и интуитивно понятен даже такому новичку в этом деле, как я .

 

Можно просто скопировать нижеприведенный "листинг" и вставить в свою оболочку Ардуино, после чего откомпилировать и загрузить его в контроллер.

 

Получим на выходе вот такую красивую и приятную штуку.

 

 

В отличие от других "листингов" на других сайтах - данный - 100% рабочий!

 

Если не догадались - что где писать и куда вставлять - пишите в комментариях вопросы, я с удовольствием отвечу.

 


 

#include <avr/pgmspace.h>

#include

 

const int numDevices = 4;      // number of MAX7219s used

const long scrollDelay = 75;   // adjust scrolling speed

 

unsigned long bufferLong [14] = {0};

 

LedControl lc=LedControl(12,11,10,numDevices);

 

const unsigned char scrollText[] PROGMEM ={" CKFDF ERHFBYT! UTHJZV CKFDF! GENBY-{EQKJ! Kf-kf-kf-kf... "};

 

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,8);       // 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)

B00000000,

B00000000,

B00000000,

B00000000,

B00000000,

B00000000,

6,

 

B10000000,  //!

B10000000,

B10000000,

B10000000,

B00000000,

B00000000,

B10000000,

2,

 

B10100000,  //"

B10100000,

B10100000,

B00000000,

B00000000,

B00000000,

B00000000,

4,

 

B01010000,  //#

B01010000,

B11111000,

B01010000,

B11111000,

B01010000,

B01010000,

6,

 

B00100000,  //$

B01111000,

B10100000,

B01110000,

B00101000,

B11110000,

B00100000,

6,

 

B11000000,  //%

B11001000,

B00010000,

B00100000,

B01000000,

B10011000,

B00011000,

6,

 

B01100000,  //&

B10010000,

B10100000,

B01000000,

B10101000,

B10010000,

B01101000,

6,

 

B11000000,  //'

B01000000,

B10000000,

B00000000,

B00000000,

B00000000,

B00000000,

3,

 

B00100000,  //(

B01000000,

B10000000,

B10000000,

B10000000,

B01000000,

B00100000,

4,

 

B10000000,  //)

B01000000,

B00100000,

B00100000,

B00100000,

B01000000,

B10000000,

4,

 

B00000000,  //*

B00100000,

B10101000,

B01110000,

B10101000,

B00100000,

B00000000,

6,

 

B00000000,  //+

B00100000,

B00100000,

B11111000,

B00100000,

B00100000,

B00000000,

6,

 

B00000000,  //,

B00000000,

B00000000,

B00000000,

B11000000,

B01000000,

B10000000,

3,

 

B00000000,  //-

B00000000,

B00000000,

B11111000,

B00000000,

B00000000,

B00000000,

6,

 

B00000000,  //.

B00000000,

B00000000,

B00000000,

B00000000,

B11000000,

B11000000,

3,

 

B00000000,  ///

B00001000,

B00010000,

B00100000,

B01000000,

B10000000,

B00000000,

6,

 

B01110000,  //0

B10001000,

B10011000,

B10101000,

B11001000,

B10001000,

B01110000,

6,

 

B01000000,  //1

B11000000,

B01000000,

B01000000,

B01000000,

B01000000,

B11100000,

4,

 

B01110000,  //2

B10001000,

B00001000,

B00010000,

B00100000,

B01000000,

B11111000,

6,

 

B11111000,  //3

B00010000,

B00100000,

B00010000,

B00001000,

B10001000,

B01110000,

6,

 

B00010000,  //4

B00110000,

B01010000,

B10010000,

B11111000,

B00010000,

B00010000,

6,

 

B11111000,  //5

B10000000,

B11110000,

B00001000,

B00001000,

B10001000,

B01110000,

6,

 

B00110000,  //6

B01000000,

B10000000,

B11110000,

B10001000,

B10001000,

B01110000,

6,

 

B11111000,  //7

B10001000,

B00001000,

B00010000,

B00100000,

B00100000,

B00100000,

6,

 

B01110000,  //8

B10001000,

B10001000,

B01110000,

B10001000,

B10001000,

B01110000,

6,

 

B01110000,  //9

B10001000,

B10001000,

B01111000,

B00001000,

B00010000,

B01100000,

6,

 

B00000000,  //:

B11000000,

B11000000,

B00000000,

B11000000,

B11000000,

B00000000,

3,

 

B00000000,  //;

B11000000,

B11000000,

B00000000,

B11000000,

B01000000,

B10000000,

3,

 

B00010000,  //<

B00100000,

B01000000,

B10000000,

B01000000,

B00100000,

B00010000,

5,

 

B00000000,  //=

B00000000,

B11111000,

B00000000,

B11111000,

B00000000,

B00000000,

6,

 

B10000000,  //>

B01000000,

B00100000,

B00010000,

B00100000,

B01000000,

B10000000,

5,

 

B01110000,  //?

B10001000,

B00001000,

B00010000,

B00100000,

B00000000,

B00100000,

6,

 

B01110000,  //@

B10001000,

B00001000,

B01101000,

B10101000,

B10101000,

B01110000,

6,

 

B01110000,  //A

B10001000,

B10001000,

B10001000,

B11111000,

B10001000,

B10001000,

6,

 

B10001000,  //B(И)

B10001000,

B10011000,

B10101000,

B11001000,

B10001000,

B10001000,

6,

 

B01110000,  //C

B10001000,

B10000000,

B10000000,

B10000000,

B10001000,

B01110000,

6,

 

B11110000,  //D(В)

B10001000,

B10001000,

B11110000,

B10001000,

B10001000,

B11110000,

6,

 

B10001000,  //E(У)

B10001000,

B10001000,

B11111000,

B00001000,

B00001000,

B01110000,

6,

 

B01110000,  //F(А)

B10001000,

B10001000,

B10001000,

B11111000,

B10001000,

B10001000,

6,

 

B11111000,  //G(П)

B10001000,

B10001000,

B10001000,

B10001000,

B10001000,

B10001000,

6,

 

B11110000,  //H(Р)

B10001000,

B10001000,

B11110000,

B10000000,

B10000000,

B10000000,

6,

 

B11100000,  //I

B01000000,

B01000000,

B01000000,

B01000000,

B01000000,

B11100000,

4,

 

B01110000,  //J(О)

B10001000,

B10001000,

B10001000,

B10001000,

B10001000,

B01110000,

6,

 

B00111000,  //K(Л)

B01001000,

B01001000,

B01001000,

B01001000,

B01001000,

B10001000,

6,

 

B10000000,  //L

B10000000,

B10000000,

B10000000,

B10000000,

B10000000,

B11111000,

6,

 

B10001000,  //M

B11011000,

B10101000,

B10101000,

B10001000,

B10001000,

B10001000,

6,

 

B11111000,  //N(Т)

B00100000,

B00100000,

B00100000,

B00100000,

B00100000,

B00100000,

6,

 

B01110000,  //O

B10001000,

B10001000,

B10001000,

B10001000,

B10001000,

B01110000,

6,

 

B11110000,  //P

B10001000,

B10001000,

B11110000,

B10000000,

B10000000,

B10000000,

6,

 

B01110000,  //Q(Й)

B10001000,

B10011000,

B10101000,

B11001000,

B10001000,

B10001000,

6,

 

B10001000,  //R(К)

B10010000,

B10100000,

B11000000,

B10100000,

B10010000,

B10001000,

6,

 

B01111000,  //S

B10000000,

B10000000,

B01110000,

B00001000,

B00001000,

B11110000,

6,

 

B11111000,  //T(Е)

B10000000,

B10000000,

B11110000,

B10000000,

B10000000,

B11111000,

6,

 

B11111000,  //U(Г)

B10001000,

B10000000,

B10000000,

B10000000,

B10000000,

B10000000,

6,

 

B10001000,  //V(М)

B11011000,

B10101000,

B10001000,

B10001000,

B10001000,

B10001000,

6,

 

B10001000,  //W

B10001000,

B10001000,

B10101000,

B10101000,

B10101000,

B01010000,

6,

 

B10001000,  //X

B10001000,

B01010000,

B00100000,

B01010000,

B10001000,

B10001000,

6,

 

B10001000,  //Y(Н)

B10001000,

B10001000,

B11111000,

B10001000,

B10001000,

B10001000,

6,

 

B01111000,  //Z(Я)

B10001000,

B10001000,

B01111000,

B00101000,

B01001000,

B10001000,

6,

 

B00000000,  //[(х)

B00000000,

B10001000,

B01010000,

B00100000,

B01010000,

B10001000,

6,

 

B00000000,  //(Backward Slash)

B10000000,

B01000000,

B00100000,

B00010000,

B00001000,

B00000000,

6,

 

B11100000,  //]

B00100000,

B00100000,

B00100000,

B00100000,

B00100000,

B11100000,

4,

 

B00100000,  //^

B01010000,

B10001000,

B00000000,

B00000000,

B00000000,

B00000000,

6,

 

B00000000,  //_

B00000000,

B00000000,

B00000000,

B00000000,

B00000000,

B11111000,

6,

 

B10000000,  //`

B01000000,

B00100000,

B00000000,

B00000000,

B00000000,

B00000000,

4,

 

B00000000,  //a

B00000000,

B01110000,

B00001000,

B01111000,

B10001000,

B01111000,

6,

 

B00000000,  //b(и)

B00000000,

B10001000,

B10011000,

B10101000,

B11001000,

B10001000,

6,

 

B00000000,  //c

B00000000,

B01110000,

B10001000,

B10000000,

B10001000,

B01110000,

6,

 

B00001000,  //d

B00001000,

B01101000,

B10011000,

B10001000,

B10001000,

B01111000,

6,

 

B00000000,  //e(у)

B00000000,

B10001000,

B10001000,

B11111000,

B00001000,

B01110000,

6,

 

B00000000,  //f(а)

B00000000,

B01110000,

B00001000,

B01111000,

B10001000,

B01111000,

6,

 

B00000000,  //g(п)

B00000000,

B11110000,

B10001000,

B10001000,

B10001000,

B10001000,

6,

 

B10000000,  //h

B10000000,

B10110000,

B11001000,

B10001000,

B10001000,

B10001000,

6,

 

B01000000,  //i

B00000000,

B11000000,

B01000000,

B01000000,

B01000000,

B11100000,

4,

 

B00000000,  //j(о)

B00000000,

B01110000,

B10001000,

B10001000,

B10001000,

B01110000,

6,

 

B00000000,  //k(л)

B00000000,

B00111000,

B01001000,

B01001000,

B01001000,

B10001000,

6,

 

B11000000,  //l

B01000000,

B01000000,

B01000000,

B01000000,

B01000000,

B11100000,

4,

 

B00000000,  //m

B00000000,

B11010000,

B10101000,

B10101000,

B10001000,

B10001000,

6,

 

B00000000,  //n(т)

B00000000,

B11111000,

B00100000,

B00100000,

B00100000,

B00100000,

6,

 

B00000000,  //o

B00000000,

B01110000,

B10001000,

B10001000,

B10001000,

B01110000,

6,

 

B00000000,  //p

B00000000,

B11110000,

B10001000,

B11110000,

B10000000,

B10000000,

6,

 

B00000000,  //q(й)

B01110000,

B10001000,

B10011000,

B10101000,

B11001000,

B10001000,

6,

 

B00000000,  //r

B00000000,

B10110000,

B11001000,

B10000000,

B10000000,

B10000000,

6,

 

B00000000,  //s

B00000000,

B01110000,

B10000000,

B01110000,

B00001000,

B11110000,

6,

 

B01000000,  //t

B01000000,

B11100000,

B01000000,

B01000000,

B01001000,

B00110000,

6,

 

B00000000,  //u

B00000000,

B10001000,

B10001000,

B10001000,

B10011000,

B01101000,

6,

 

B00000000,  //v

B00000000,

B10001000,

B10001000,

B10001000,

B01010000,

B00100000,

6,

 

B00000000,  //w

B00000000,

B10001000,

B10101000,

B10101000,

B10101000,

B01010000,

6,

 

B00000000,  //x

B00000000,

B10001000,

B01010000,

B00100000,

B01010000,

B10001000,

6,

 

B00000000,  //y(н)

B00000000,

B10001000,

B10001000,

B11111000,

B10001000,

B10001000,

6,

 

B00000000,  //z

B00000000,

B11111000,

B00010000,

B00100000,

B01000000,

B11111000,

6,

 

B10001000,  //{(Х)

B10001000,

B01010000,

B00100000,

B01010000,

B10001000,

B10001000,

6,

 

B10000000,  //|

B10000000,

B10000000,

B10000000,

B10000000,

B10000000,

B10000000,

2,

 

B10000000,  //}

B01000000,

B01000000,

B00100000,

B01000000,

B01000000,

B10000000,

4,

 

B00000000,  //~

B00000000,

B00000000,

B01101000,

B10010000,

B00000000,

B00000000,

6,

 

B01100000,  // (Char 0x7F)

B10010000,

B10010000,

B01100000,

B00000000,

B00000000,

B00000000,

5

};

 

void scrollFont() {

for (int counter=0x20;counter<0x80;counter++){

loadBufferLong(counter);

delay(500);

}

}

 

// Scroll Message

void scrollMessage(const unsigned char * messageString) {

int counter = 0;

int myChar=0;

do {

// read back a char

myChar =  pgm_read_byte_near(messageString + counter);

if (myChar != 0){

loadBufferLong(myChar);

}

counter++;

}

while (myChar != 0);

}

// Load character into scroll buffer

void loadBufferLong(int ascii){

if (ascii >= 0x20 && ascii <=0xff){

for (int a=0;a<7;a++){                      // Loop 7 times for a 5x7 font

unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 8) + a);     // Index into character table to get row data

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

}

byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 8) + 7);     // Index into character table for kerning data

for (byte x=0; x<count;x++){

rotateBufferLong();

printBufferLong();

delay(scrollDelay);

}

}

}

// Rotate the buffer

void rotateBufferLong(){

for (int a=0;a<7;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<7;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

}

}

 

 


UPDATE:

В комментариях был задан вопрос: А как быть с буквами "Б" и "Ю"? Они чего то нивкакую не хотят переводиться?

Ответ:

Отличный вопрос.

Дело в том, что в английском алфавите - 26 букв. Ну, плюс спецсимволы. А в русском - 33. Поскольку мы здесь делали как бы подстановку  - проводили соответствие латинской и русской буквы, то вам надо взять какой-то символ и переделать его для отображения буквы "Б" и "Ю"

Например, ниже - я взял символ "<" и сделал из него "Б" - чтобы при работе в стандартной клавиатуре не искать долго:

Исходная часть кода:

 

B00010000,  //<

B00100000,

B01000000,

B10000000,

B01000000,

B00100000,

B00010000,

5,

Результат:

 

B11110000,  //<(Б)

B10000000,

B10000000,

B11110000,

B10001000,

B10001000,

B11110000,

6,

Обратите внимание на изменившиеся цифры - 5 на 6. Это изменилась ширина символа в количестве светодиодов. Для разделения со следующим символом в строке при отображении на панели - добавлена дополнительная 1.

 

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

 

С днем космонавтики!

ниже - нарисована "ракета" для символа "<"

 

B00100000,  //<(Б)

B00100000,

B01010000,

B100010000,

B10101000,

B11111000,

B10101000,

6,

Поставьте свой рейтинг этой записи блога:
Квадрик с подвесом для GO-PRO на бк движках
Фестиваль радиоуправляемых зальных моделей в Труск...

Related Posts

 

Комментарии 7

Josef Vilka Дата: 11.01.2017 18:31
Продолжение тут http://rc-rls.com.ua/index.php?option=com_easyblog&view=entry&id=60&Itemid=64
Гость - Серёга Дата: 26.03.2017 15:08

Отсутствует смысл в подмене символов ASCII, которые уже есть (D->B, F->A и т.д.)

Отсутствует смысл в подмене символов ASCII, которые уже есть (D->B, F->A и т.д.)
Josef Vilka Дата: 26.03.2017 15:39

Текст в строке - все равно пишется латинскими символами. И смысл в том, чтобы смотреть на клавиатуру компьютера и не париться, выискивая нужную букву. Поэтому, для того, чтобв написать "Я" - нужно нажать кнопку Z и т.д.
И да - заменены написания не всех символов - а только тех, которые были необходимы для данного примера. Остальные - просто лень было...

Текст в строке - все равно пишется латинскими символами. И смысл в том, чтобы смотреть на клавиатуру компьютера и не париться, выискивая нужную букву. Поэтому, для того, чтобв написать "Я" - нужно нажать кнопку Z и т.д. И да - заменены написания не всех символов - а только тех, которые были необходимы для данного примера. Остальные - просто лень было...
Гость - Вопрос Дата: 12.04.2017 22:17

А как быть с буквами "Б" и "Ю"? Они чего то нивкакую не хотят переводиться

А как быть с буквами "Б" и "Ю"? Они чего то нивкакую не хотят переводиться
Josef Vilka Дата: 13.04.2017 02:17

Ответил в виде дополнения внизу поста - после скетча, ибо в комменты не хочет вставляться сам код...
Напишите о результатах.

Ответил в виде дополнения внизу поста - после скетча, ибо в комменты не хочет вставляться сам код... Напишите о результатах.
Гость - Леонид Дата: 18.04.2017 19:19

а как подключить еще один модуль из 4-х матриц , что изменить в коде?

а как подключить еще один модуль из 4-х матриц , что изменить в коде?
Josef Vilka Дата: 18.04.2017 22:50

Леонид, посмотрите вот здесь
http://rc-rls.com.ua/index.php?option=com_easyblog&view=entry&id=60&Itemid=64
Возможно, это решение Вам подойдет.

Леонид, посмотрите вот здесь http://rc-rls.com.ua/index.php?option=com_easyblog&view=entry&id=60&Itemid=64 Возможно, это решение Вам подойдет.
Already Registered? Login Here
Гость
21.11.2017

Изображение Captcha