Как избежать "дребезга" и появления ненужных пикселей
- Войдите на сайт для отправки комментариев
Вс, 10/08/2014 - 12:42
Здравствуйте. С ардуино "общаюсь" совсем недавно,новичек. В просторах интернета нашел статью -"Бегущая строка"на примере светодиодной матрицы и ардуино мега http://habrahabr.ru/post/129569/.
Немного переделав код получил необходимое,однако появился "дребезг" в отображении.Что нужно подправить в коде,чтобы его убрать?Долно читаться слово "Hello" .Спасибо.
const int row[8]={23,25,27,29,31,33,35,37};
const int col[8]={39,41,43,45,47,49,51,53};
int v=1;
int dms=800;
boolean A[8][23] =
{0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,
0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,
0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,
0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,
0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
void setup()
{
for (int x=0; x<8; x++)
{
pinMode(row[x],OUTPUT);
pinMode(col[x],OUTPUT);
}
for (int x=0; x<8; x++)
{
digitalWrite(row[x],HIGH);
}
}
void loop()
{
paint(A, v);
scroll(A);
}
void paint(boolean screen[8][23], int v)
{
int x, y;
for (int c=0; c <v; c ++)
{
for (x=0; x<8; x++)
for (y=0; y<23; y++)
{
if (screen[x][y]==1)
{
digitalWrite(row[x], LOW);
digitalWrite(col[y], HIGH);
delayMicroseconds(dms);
digitalWrite(row[x], HIGH);
digitalWrite(col[y], LOW);
}
else
{
digitalWrite(row[x], HIGH);
digitalWrite(col[y], LOW);
delayMicroseconds(dms);
digitalWrite(row[x], HIGH);
digitalWrite(col[y], LOW);
}
}
}
}
void scroll(boolean screen[8][23])
{
boolean buf[8][1];
for (int x=0; x<8; x++)
{
buf[x][0]=screen[x][0];
}
for (int x=0; x<8; x++)
for (int y=0; y<23; y++)
{
screen[x][y]=screen[x][y+1];
}
for (int x=0; x<8; x++)
{
screen[x][23-1]=buf[x][0];
}
}
http://youtu.be/b0Mj7p3GjHA
Один раз уже говорил о таком, но раз уместно, повторюсь. :)
Попробуй заменить digitalWrite на запись в порт. http://tronixstuff.com/2011/10/22/tutorial-arduino-port-manipulation/
Добавлю только, что если нужно писать не все 8 ног сразу, то нужно пользоваться битовыми операциями, чтобы не изменить атрибуты определенных пинов. http://www.arduino.cc/en/Reference/PortManipulation
То есть например, при конфигурации
При записи (PORTx) и чтении (PINx) то же самое.
Через порты пробывал,зажигаются строки полностью или ряды матрицы.При этом возникает нагрев микроконтроллера ардуины.
Посмотрел мельком, по ссылке на хабр один только код. Чего вы там насоединяли, номиналы и прочее - схему бы знать...
И новый код, конечно.
Только у меня 7х6.Измененный код в первом сообщении в спойлере
Схема это хорошо, а в коде что поменялось? Всё те же digitalWrite. Ну и комментировать код полезно, не только для окружающих, но и для себя.
Что касается функций paint и scroll: во-первых, двумерные массивы по уму передаются каким-то другим способом, во-вторых, переменные и массивы row, col, v, dms, A - типа как глобальные, передавать их как аргументы не надо - функции итак их видят.
Куда "+" на схеме цепляется, на 5v ардуины чтоли? Точно греется контроллер, а не стаб?
Вот к примеру такой код
void setup() { DDRA = B01111111; // set PORTA (digital 7~0) // to output DDRB = B00111111; // PORTB (6~0) } byte a = B00000001; byte b = B01000000; void krider() // движение солбца влево { for (int k=0; k<1; k++)// количество повторов функции { for (int z=0; z<7; z++) // на сколько столбцов сдвигать { PORTA = a << z; // сдвиг delay(400); // пауза между переключением следующего столбца } } } void on() // функция включения столбца(может быть любой столбец) { { PORTA = b; // включение 7 столбца } } void loop() { krider(); delay(500); on(); delay(500); }Как я понимаю можно включать только полностью строку и столбцы.Как например букву какую нибудь вывести?
Код ...
void setup() { DDRA = B01111111; // set PORTA (digital 7~0) // to output DDRB = B00111111; // PORTB (6~0) }... немного напрягает. PORTB - это с 8 до 13, а с 0 до 7 это PORTD, про PORTA вообще не слышал. Какая именно ардуина?
И PORTB конфигурируется, но не используется у вас. :) Таким образом не ясно, какие ноги управляют 315-ми, а какие 361-ми.
Если хочется зажечь светодиод (0;3) например, тогда надо на 315-е надо дать 00000001, а на 361-е дать 11110111 (раз открываются нулём)
ардуина мега2560 - PORTА 0-7(22-29 гнезда), PORTB 0-7 (53,42,51,50,10,11,12,13) соответственно. Без инициализации PORTB нет 0 на 361-ых. Для анодов 22-28 выводы,для катодов 53-50,10 и 11.Как зажечь светодиод это понятно.Не понятно как зажечь несколько светодиодов.К примеру "+"
Так как если дать на 315-ые 0001000, а на 361-ые 00110111 рисунка "+" не получится,а будет светиться только 1 светодиод
Зажечь несколько - поставить несколько единиц (нулей) в соответствующих разрядов регистров портов.
Так как если дать на 315-ые 0001000, а на 361-ые 00110111 рисунка "+" не получится,а будет светиться только 1 светодиод
будут все светодиоды светиться прямоугольниками
на PIC16 в статье со схемы как-то реализуется вращение знака "+"
http://www.radiohlam.ru/program/images/diode_matrix_prg2.gif
Считаю необходимо всетаки использывать массивы вроде
boolean [7][6] = {0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,1,1,1,1,1,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,0,0,0,0}Ну логично, символы/изображения по другому задавать не ахти развлечение. Надо просто придумывать, как на основе этого массива кидать команды на все ноги сразу.
byte pixelString(){ // "преобразование" строки массива в байт byte res=0; //результат int i; for(i=0;i<8;i++){ //установка битов в соответствии с данными из массива, скажем так if(array[i]) res=res|(1<<i); //если в ячейке глобального массива единица ... } // побитовое ИЛИ позволяет сохранить без изменения уже установленные единицы return res; }Пример. Просто демонстрация концепции, конкретно под это переделывать надо.
Нашел на вродебы что-то необходимое
unsigned char screen_buffer [8]; screen_buffer [0] = 0x8; // 00001000 screen_buffer [1] = 0x8; // 00001000 screen_buffer [2] = 0x3E; // 00111110 screen_buffer [3] = 0x8; // 00001000 screen_buffer [4] = 0x8; // 00001000 screen_buffer [5] = 0x8; // 00001000 screen_buffer [6] = 0x0; // 00000000 screen_buffer [7] = 0x0; // 00000000 for (char i=0; i<8; i++) { PORTA = (1 << i); // включили столбец i PORTB = screen_buffer [i]; // зажгли нужные пиксели столбца delay (); }Вот код
const int row[8] = {53,52,51,50,10,11,12,13}; const int col[8] = {22,23,24,25,26,27,28,29}; int v=5; int dms=200; boolean Plus [8][8] = {0,0,0,1,0,0,0,0, 0,0,0,1,0,0,0,0, 0,1,1,1,1,1A,0,0, 0,0,0,1,0,0,0,0, 0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; void setup() { for (int i=0; i<8; i++) { pinMode(row[i],OUTPUT); pinMode(col[i],OUTPUT); } for (int i=0; i<8; i++) { digitalWrite(row[i],HIGH); } } void loop() { paint(Plus , v); } void paint(boolean screen[8][8], int v) { int i, j; for (int c=0; c <v; c ++) { for (i=0; i<8; i++) for (j=0; j<8; j++) { if (screen[i][j]==1) { digitalWrite(row[i], LOW); digitalWrite(col[j], HIGH); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } else { digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } } } }Все с тем же применением digitalWrite()
const int row[8] = {53,52,51,50,10,11,12,13}; const int col[8] = {22,23,24,25,26,27,28,29};Можно заменить
в остальной части не понимаю как на порты перевести
Что-то замена не прошла удачно. Изначальный код(в предидущем сообщении) работает. Чтобы не загромождать код массивами. Наверное надо библиотеку из массивов делать,при чередовании отображаемых символов
Короче, разбейте задачу "перевода на порты" на задачи поменьше, а то я перестал понимать, что здесь происходит.
А с заменой row[8] = {53,52,51,50,10,11,12,13} на DDRB = B11111111... Использование DDRB заменяет восьмикратный вызов функции pinMode(X,OUTPUT). Причём тут массив с номерами ног? Спойлер: ни при чём.
Извиняюсь за "мысли вслух". Пытаюсь отобразить символ "+" во вращении с помощью кода из 18 поста(в спойлере) - путем добавления других массивов в коде.
Получился такой код
const int row[8] = {53,52,51,50,10,11,12,13}; const int col[8] = {22,23,24,25,26,27,28,29}; int v=10; //время отображения пикселя int dms=200; boolean A [8][8] = {0,0,0,1,0,0,0,0, 0,0,0,1,0,0,0,0, 0,1,1,1,1,1,0,0, 0,0,0,1,0,0,0,0, 0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; boolean B [8][8] = {0,0,0,0,1,0,0,0, 0,1,0,1,0,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,0,1,0,0, 0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; boolean C [8][8] = {0,0,0,0,1,0,0,0, 0,1,1,0,1,0,0,0, 0,0,0,1,0,0,0,0, 0,0,1,0,1,1,0,0, 0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; boolean D [8][8] = {0,1,0,0,0,1,0,0, 0,0,1,0,1,0,0,0, 0,0,0,1,0,0,0,0, 0,0,1,0,1,0,0,0, 0,1,0,0,0,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; boolean E [8][8] = {0,0,1,0,0,0,0,0, 0,0,1,0,1,1,0,0, 0,0,0,1,0,0,0,0, 0,1,1,0,1,0,0,0, 0,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; boolean F [8][8] = {0,0,1,0,0,0,0,0, 0,0,0,1,0,1,0,0, 0,0,1,1,1,0,0,0, 0,1,0,1,0,0,0,0, 0,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; void setup() { { DDRB = B11111111; DDRA = B11111111; } { PORTB = B11111111; } } void loop() { paint(A, v); delay(100); paint(B, v); delay(100); paint(C, v); delay(100); paint(D, v); delay(100); paint(E, v); delay(100); paint(F, v); delay(100); } void paint(boolean screen[8][8], int v) { int i, j; for (int c=0; c <v; c ++) { for (i=0; i<8; i++) for (j=0; j<8; j++) { if (screen[i][j]==1) { digitalWrite(row[i], LOW); digitalWrite(col[j], HIGH); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } else { digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } } } }voidpaint не удалось изменитьhttp://www.instructables.com/id/Persistence-of-Vision-Wand/
родственная тема.....
#include <avr/pgmspace.h> String povtext = " Z E N I T " ; byte RefreshRate = 2 ; int Dlina_Text = povtext.length() ; byte Data_B = 0 ; byte Data_C = 0 ; byte Data_D = 0 ; byte t ; byte l ; byte n ; //================================================================================================================================================================= boolean Letter_TEST []= { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, }; //================================================================================================================================================================= boolean Letter_A [] PROGMEM = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_B [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; //================================================================================================================================================================= boolean Letter_C [] PROGMEM = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, }; //================================================================================================================================================================= boolean Letter_D [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_E [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_F [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_G [] PROGMEM = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_H [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_I [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_J [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_K [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_L [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_M [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_N [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_O [] PROGMEM = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_P [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_Q [] PROGMEM = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_R [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_S [] PROGMEM = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, }; //================================================================================================================================================================= boolean Letter_T [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_U [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_V [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_W [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, }; //================================================================================================================================================================= boolean Letter_X [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; //================================================================================================================================================================= boolean Letter_Y [] PROGMEM = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, }; //================================================================================================================================================================= boolean Letter_Z [] PROGMEM = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; //================================================================================================================================================================= void sendToWand( boolean LetterArray[] ){ for ( t = 0 ; t < 12 ; t++ ){ for ( l = 0 ; l < 6 ; l++ ){ Data_B = Data_B << 1; Data_B |= pgm_read_byte_near( LetterArray + ( l * 12 + t ) ) ; } for ( l = 6 ; l < 14 ; l++ ){ Data_C = Data_C << 1 ; Data_C |= pgm_read_byte_near( LetterArray + ( l * 12 + t ) ) ; } for ( l = 14 ; l < 20 ; l++ ){ Data_D = Data_D << 1 ; Data_D |= pgm_read_byte_near( LetterArray + ( l * 12 + t ) ) ; } PORTB = Data_B ; PORTD = Data_C ; PORTC = Data_D ; // через сдвиговый резистор delay( RefreshRate ) ; Data_B = 0 ; Data_C = 0 ; Data_D = 0 ; // через сдвиговый резистор } } //================================================================================================================================================================= void sendToWandMW( boolean LetterArray[] ){ for ( t=0 ; t < 15 ; t++ ){ for ( l=0 ; l < 6 ; l++ ){ Data_B = Data_B << 1 ; Data_B |= pgm_read_byte_near( LetterArray + ( l * 15 + t ) ) ; } for ( l=6 ; l < 14 ; l++ ){ Data_C = Data_C << 1 ; Data_C |= pgm_read_byte_near( LetterArray + ( l * 15 + t ) ) ; } for ( l=14 ; l < 20 ; l++ ){ Data_D = Data_D << 1 ; Data_D |= pgm_read_byte_near( LetterArray + ( l * 15 + t ) ) ; } PORTB = Data_B ; PORTD = Data_C ; PORTC = Data_D ; // через сдвиговый резистор delay( RefreshRate ) ; Data_B = 0 ; Data_C = 0 ; Data_D = 0 ; // через сдвиговый резистор } } //================================================================================================================================================================= void setup() { DDRB = 0xFF ; DDRC = 0xFF ; DDRD = 0xFF ; for ( byte j = 0 ; j < 20 ; j++ ){ for ( byte i = 0 ; i < 6 ; i++ ){ Data_B = Data_B << 1 ; Data_B |= Letter_TEST [ ( i * 20 + j ) ] ; } for ( byte i = 6 ; i < 14 ; i++ ){ Data_C = Data_C << 1 ; Data_C |= Letter_TEST [ ( i * 20 + j ) ] ; } for ( byte i = 14 ; i < 20 ; i++ ){ Data_D = Data_D << 1 ; Data_D |= Letter_TEST [ ( i * 20 + j ) ] ; } PORTB = Data_B ; PORTD = Data_C ; PORTC = Data_D ; delay(150); } Data_B = 0 ; Data_C = 0 ; Data_D = 0 ; PORTB = Data_B ; PORTD = Data_C ; PORTC = Data_D ; } //================================================================================================================================================================= void loop() { PORTB = 0 ; PORTD = 0 ; PORTC = 0 ; delay( RefreshRate * 3 ) ; for ( n = 0 ; n < Dlina_Text ; n++ ) { if ( povtext.charAt( n ) == 'A' ) { sendToWand( Letter_A ) ; } else if ( povtext.charAt( n ) == 'B' ) { sendToWand( Letter_B ) ; } else if ( povtext.charAt( n ) == 'C' ) { sendToWand( Letter_C ) ; } else if ( povtext.charAt( n ) == 'D' ) { sendToWand( Letter_D ); } else if ( povtext.charAt( n ) == 'E' ) { sendToWand( Letter_E ) ; } else if ( povtext.charAt( n ) == 'F' ) { sendToWand( Letter_F ) ; } else if ( povtext.charAt( n ) == 'G' ) { sendToWand( Letter_G ) ; } else if ( povtext.charAt( n ) == 'H' ) { sendToWand( Letter_H ) ; } else if ( povtext.charAt( n ) == 'I' ) { sendToWand( Letter_I ) ; } else if ( povtext.charAt( n ) == 'J' ) { sendToWand( Letter_J ) ; } else if ( povtext.charAt( n ) == 'K' ) { sendToWand( Letter_K ) ; } else if ( povtext.charAt( n ) == 'L' ) { sendToWand( Letter_L ) ; } else if ( povtext.charAt( n ) == 'M' ) { sendToWandMW( Letter_M ) ; } else if ( povtext.charAt( n ) == 'N' ) { sendToWand( Letter_N ) ; } else if ( povtext.charAt( n ) == 'O' ) { sendToWand( Letter_O ) ; } else if ( povtext.charAt( n ) == 'P' ) { } else if ( povtext.charAt( n ) == 'Q' ) { sendToWand( Letter_Q ) ; } else if ( povtext.charAt( n ) == 'R' ) { } else if ( povtext.charAt( n ) == 'S' ) { } else if ( povtext.charAt( n ) == 'T' ) { sendToWand( Letter_T ) ; } else if ( povtext.charAt( n ) == 'U' ) { sendToWand( Letter_U ) ; } else if ( povtext.charAt( n ) == 'V' ) { sendToWand( Letter_V ) ; } else if ( povtext.charAt( n ) == 'W' ) { sendToWandMW( Letter_W ) ; } else if ( povtext.charAt( n ) == 'X' ) { sendToWand( Letter_X ) ; } else if ( povtext.charAt( n ) == 'Y' ) { sendToWand( Letter_Y ) ; } else if ( povtext.charAt( n ) == 'Z' ) { sendToWand( Letter_Z ) ; } else if ( povtext.charAt( n ) == ' ') { PORTB = 0 ; PORTD = 0 ; PORTC = 0 ; delay( RefreshRate * 3 ) ; } PORTB = 0 ; PORTD = 0 ; PORTC = 0 ; delay( RefreshRate ) ; } PORTB = 0 ; PORTD = 0 ; PORTC = 0 ; delay( RefreshRate * 3 ) ; } //=================================================================================================================================================================Получился такой код
Вместо такого можно сделать просто трехмерный массив, кстати говоря.
Вообще, лучше додумать, как показывать один конкретный кадр. Скетч должен выводить кадр из некого буфера (специального массива) бесконечно долго - тут задача динамической индикации: показать одну строку (столбец) кадра, через какое-то малое время показать следующую и т.д. А формировать сигналы на транзисторы образом, крайне похожим на код из #16 (предчувствуя затык - для PNP "сдвиг нуля" можно сделать побитовой инверсией "~" того, что будет от двигания единицы).
Потом по ходу работы загонять в буфер кадра другую картинку. И пока вы не наворотили дофига вложенных циклов с delay, изучите пример BlinkWithoutDelay.
Честно говоря весь код понимаю смутно. Точнее содержимое функций мне не понятно. Вот к примеру в #22 понятно только, что в setup обявлены порты. В loop порядок вывода значений на табло. Функция paint - вывод на массивов на табло,а то что в этой функции происходит не ясно.
На схему свою в #5 гляньте, код понятнее станет. В #22 в двух циклах просматриваются все 64 ячейки "кадра" (8 столбцов, 8 строк). Если светодиод надо зажечь (в ячейке массива - единица), выставляется единица на базу NPN транзистора и ноль на базу PNP транзистора. Тогда транзисторы открываются, ток течёт, светодиод загорается. Потом контроллер ждёт сколько-то микросекунд и вырубает этот светодиод обратными операциями. А вот коде для случая, если светодиод гореть не должен, в коде светодиод тушится дважды зачем-то. Либо по невнимательности писавшего, либо чтобы времени одинакого тратилось.
Это если двумерный массив, переданный в функцию таким способом, хавается прогой.
Прикупил для полной картины светодиодную матрицу 8х8.Для начала решил запустить просто бегущий ряд - полоса бегает то вправо, то влево(в общем бегущие огни) вот код
unsigned char upDown=1; // начинаем с движения вверх unsigned char cylon=0; // определяет очередность LED void setup() { DDRA = B11111111; DDRB = B11111111; } void loop() { PORTA = B10000000; PORTB = B00000000; if(upDown==1){ // если идем вверх, то cylon++; if(cylon>=7) upDown=0; // когда достигнут наибольший номер LED, то в след. цикле идем вниз } else { cylon--; if(cylon==0) upDown=1; // когда достигнут наименьший номер LED, то в след. цикле идем вверх } PORTA = 1 << cylon; //сдвиг delay(200); // пауза 200 мс }Возник вопрос как сделать чтобы полоса бегала только с права налево,а не туда сюда?
Удалить операторы if(upDown==1) и else и ещё один из оставшихся после этого блоков операторов.
Останется либо только
либо
Кто код-то писал? Всего 22 строчки - уж можно как-то в уме его выполнить и прикинуть, что получится.
При выше упомянутом изминении строка действительно бежит в одну из сторон,однако лишь однократно. Наверное нужно добавлять цикл?Нашел вот такой код
//программа 1 «Бегущие огни» int led = 1; // глобальная переменная, хранящая номер «зажигаемого» вывода void setup() { DDRA = 255; // все выводы порта A настраиваем как выходы DDRB = 255; } void loop() { PORTB = B00000000; PORTA = led; // «зажигаются» соответствующие выводы порта A delay(200); // задержка в 0,3 сек. led = led<<1; // сдвиг влево – если горел 1-й светодиод, то следующим зажжётся второй if (led > 128) // 128 = B10000000 led = 1; // после 8-го светодиода возвращаемся к первому }Строка бегает циклически в одном направлении,однако направление её движения слева направо, а хотелось бы справа налево(необходимо это для дальнейшего редактирования скетча и вместо полосы загонять символы).Редактировал код ,но ничего не вышлоДумаю направление(к чему двигаться в разработке бекущей строки из текста) взял правильно?
ПС. код из поста 27 вpят с сайта http://cxem.net
Так сделать наоборот и всё :)
led=128 вместо единицы изначально, сдвигать вправо >>. Потом if ( led < 1) led = 128. Даже как-то неудобно объяснять такие вещи.
Отредактировал код из
const int row[8]={23,25,27,29,31,33,35,37}; const int col[8]={39,41,43,45,47,49,51,53}; int v=1; int dms=800; boolean A[8][23] = {0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0, 0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0, 0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0, 0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0, 0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; void setup() { for (int x=0; x<8; x++) { pinMode(row[x],OUTPUT); pinMode(col[x],OUTPUT); } for (int x=0; x<8; x++) { digitalWrite(row[x],HIGH); } } void loop() { paint(A, v); scroll(A); } void paint(boolean screen[8][23], int v) { int x, y; for (int c=0; c <v; c ++) { for (x=0; x<8; x++) for (y=0; y<23; y++) { if (screen[x][y]==1) { digitalWrite(row[x], LOW); digitalWrite(col[y], HIGH); delayMicroseconds(dms); digitalWrite(row[x], HIGH); digitalWrite(col[y], LOW); } else { digitalWrite(row[x], HIGH); digitalWrite(col[y], LOW); delayMicroseconds(dms); digitalWrite(row[x], HIGH); digitalWrite(col[y], LOW); } } } } void scroll(boolean screen[8][23]) { boolean buf[8][1]; for (int x=0; x<8; x++) { buf[x][0]=screen[x][0]; } for (int x=0; x<8; x++) for (int y=0; y<23; y++) { screen[x][y]=screen[x][y+1]; } for (int x=0; x<8; x++) { screen[x][23-1]=buf[x][0]; } }#1 поста на
const int row[8]={53,52,51,50,10,11,12,13}; const int col[8]={22,23,24,25,26,27,28,29}; int v=5; int dms=400; boolean A[8][44] = {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0 }; void setup() { for (int i=0; i<8; i++) { pinMode(row[i],OUTPUT); pinMode(col[i],OUTPUT); } for (int i=0; i<8; i++) { digitalWrite(row[i],HIGH); } } void loop() { paint(A, v); scroll(A); } void paint(boolean screen[8][44], int v) { int i, j; for (int c=0; c <v; c ++) { for (i=0; i<8; i++) for (j=0; j<8; j++) { if (screen[i][j]==1) { digitalWrite(row[i], LOW); digitalWrite(col[j], HIGH); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } else { digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); delayMicroseconds(dms); digitalWrite(row[i], HIGH); digitalWrite(col[j], LOW); } } } } void scroll(boolean screen[8][44]) { boolean buf[44][1]; for (int i=0; i<44; i++) { buf[i][0]=screen[i][0]; } for (int i=0; i<8; i++) for (int j=0; j<44; j++) { screen[i][j]=screen[i][j+1]; } for (int i=0; i<8; i++) { screen[i][44-1]=buf[i][0]; } }