Авторизация  


   

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

Читать подробнее »

   
Подождите минутку, пока генерируется календарь
   
   

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

Josef Vilka Что делать если выскакивает реклама на андроид?
29 марта 2019
Планшет - снова жив! Я его восстановил. Процесс - вот в этом видео - https://www.youtube.com/watch?v...
Josef Vilka Что делать если выскакивает реклама на андроид?
22 февраля 2019
В общем - планшет - умер. Я подскользнулся и упал на него
Josef Vilka Что делать если выскакивает реклама на андроид?
28 августа 2018
Продолжение эпопеи! Очередное мое письмо производителю: ------------------------------ From: Josef V...
Josef Vilka Что делать если выскакивает реклама на андроид?
29 мая 2018
Приложение Devises маскировалось под системное, но без рута позволило удалить себя. Делаю вывод, чт...
Josef Vilka Что делать если выскакивает реклама на андроид?
28 мая 2018
Прошло уже несколько часов - реклама не появляется.. Значит - Avast - сработал!
   

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

   
   

Блоги пользователей портала РЛС

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

Бегущая строка из восьми модулей MAX7219 - 64*8 светодиодов

Так давно собирался и наконец - собрался с силами. 

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

Скетч.

Напомню, что в более ранней реализации мы выводили русские буквы в бегущей строке из четырех модулей MAX7219. Но попытки вывести используя ТОТ скетч в восьми модулях - 64х8 - не увенчались успехом. Это было ЗДЕСЬ

И в новогодние праздники на моей машине было передвижное поздравление "* Merry Christmas and Happy New Year 2017 !!! ". Оно отображалось красными светодиодами бегущей строки, а сборку я разместил на боковом

Продолжить чтение
  4068 просмотров
  0 Комментариев

Выводим русские символы на 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,

Продолжить чтение
Последние комментарии
Josef Vilka
Продолжение тут http://rc-rls.com.ua/index.php?option=com_easyblog&view=entry&id=60&Itemid=64... Подробнее
11.01.2017 18:31
Josef Vilka
Текст в строке - все равно пишется латинскими символами. И смысл в том, чтобы смотреть на клавиатуру компьютера и не париться, выи... Подробнее
26.03.2017 15:39
Josef Vilka
Ответил в виде дополнения внизу поста - после скетча, ибо в комменты не хочет вставляться сам код... Напишите о результатах.... Подробнее
13.04.2017 02:17
  14384 просмотров
  7 Комментариев
   

Новое в блогах

31 июля 2019
Радиоуправляемые модели
Наблюдашки
С квадрокоптером даже начального уровня можно делать невероятные вещи круто, что предел только наша фантазия.Сообразил в...
16 января 2019
Наблюдашки
Получил сегодня, потестил...Заметил, что частенько(в домашних условиях) у него "выносит" мозги и он нуждается в "калибро...
06 ноября 2018
Наблюдашки
Путешествия
В прошлые выходные - стал археологом. Что остается в нашей стране - только надеяться на клад предыдущих поколений...&nbs...
08 августа 2018
Радиоуправляемые модели
И сделал трансляцию роликов "Из старенького".....
22 июля 2018
Наблюдашки
Сбор урожая, практически.. :)...