Бегущая строка на 4 мах7219

leks
Offline
Зарегистрирован: 22.10.2017

Решил потренироваться на краденых скетчах (свои утомили).

Нашёл скетч "от Павла" , слегка его редактировал.

#include <SPI.h>
#include <LedControlSPI.h>//вариация библиотеки LedControl (переименована),использующая аппаратный SPI 
// https://github.com/jacken/LedControl_HW_SPI 


const int numDevices = 10;      // number of MAX7219s used
const long scrollDelay = 50;   // adjust scrolling speed
 
 
unsigned long bufferLong [14] = {0};
 
///////////////////////////////////////////////////////////////
LedControl lc = LedControl(10,4);// создаём объект класса для 4 индикаторов
// при этом выводы 11-DIN 13-CLK 10-CS //
/////////////////////////////////////////////////////////////// 
//LedControl lc=LedControl(12,11,10,numDevices);//инициализация матриц
 
///////////////////////////////////////////ТЕКСТЫ ПОЗДРАВИТЕЛЬНЫХ И РАБОЧИХ ФРАЗ///////////////////////////////////////////// 
//const unsigned char scrollText[]PROGMEM={" E GFDKF! "};
const unsigned char scrollTextA[]PROGMEM={" C YJDSV 2020 UJLJV! "};// С НОВЫМ 2020 ГОДОМ!
const unsigned char scrollTextB[]PROGMEM={" C GHFPLYBRJV 23 ATDHFKZ! "};// С ПРАЗНИКОМ 23 ФЕВРАЛЯ! 
const unsigned char scrollTextC[]PROGMEM={" C VT;LEYFHJLYSV ;TYCRBV LYTV 8 VFHNF! "};// С МЕЖДУНАРОДНЫМ ЖЕНСКИМ ДНЁМ 8 МАРТА!
const unsigned char scrollTextD[]PROGMEM={" GJPLHFDKZTV C LYTV GJ,TLS! "};// ПОЗДРАВЛЯЕМ С ДНЕМ ПОБЕДЫ!
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char scrollTextPer=scrollTextC;

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,0);       // Set the brightness to default value
lc.clearDisplay(x);         // and clear the display
}
}
 
 
void loop(){
scrollMessage(scrollTextPer);
//    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,
B10000000,
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,
 
 
B01110000,  //'(Э)
B10001000,
B00000100,
B00111100,
B00000100,
B10001000,
B01110000,
7,
 
 
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,
 
 
B10101000,  //;(Ж)
B10101000,
B01110000,
B00100000,
B01110000,
B10101000,
B10101000,
6,
 
 
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,
 
 
B00100000,  //A(Ф)
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
B00100000,
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,
 
 
B10101000,  //I(Ш)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111000,
6,
 
 
B01110000,  //J(О)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
 
 
B00111000,  //K(Л)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B10001000,
6,
 
 
B00111000,  //L(Д)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B11111000,
6,
 
 
B10000000,  //M(Ь)
B10000000,
B10000000,
B11110000,
B10001000,
B10001000,
B11110000,
6,
 
 
B11111000,  //N(Т)
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
6,
 
 
B01110000,  //O
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
 
 
B01110000,  //P(З)
B10001000,
B00001000,
B1110000,
B00001000,
B10001000,
B01110000,
6,
 
 
B01110000,  //Q(Й)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
6,
 
 
B10001000,  //R(К)
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
6,
 
 
B10000100,  //S(Ы)
B10000100,
B10000100,
B11100100,
B10010100,
B10010100,
B11100100,
7,
 
 
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,
B10001000,
B10001000,
B10001000,
B11110100,
7,
 
 
B10001000,  //X(Ч)
B10001000,
B10001000,
B01111000,
B00001000,
B00001000,
B00001000,
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( 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
}
}

 

leks
Offline
Зарегистрирован: 22.10.2017

Не хочется использовать прогмем. Для этого надо изменить строку 0020 и ей подобные (это я могу) и исправить (по тёмности своей я догадался - 1022). Вот в ней сплошной облом. То есть манипулировать заранее запомненными фразами можно, а как оперативно вносить информацию?(это риторический вопрос, отвечать не надо).  

leks
Offline
Зарегистрирован: 22.10.2017
#include <SPI.h>
#include <LedControlSPI.h>//вариация библиотеки LedControl (переименована),использующая аппаратный SPI 
// https://github.com/jacken/LedControl_HW_SPI 


const int numDevices = 10;      // number of MAX7219s used
const long scrollDelay = 50;   // adjust scrolling speed
unsigned long bufferLong [14] = {0};
 
///////////////////////////////////////////////////////////////
LedControl lc = LedControl(10,4);// создаём объект класса для 4 индикаторов
// при этом выводы 11-DIN 13-CLK 10-CS //
/////////////////////////////////////////////////////////////// 
//LedControl lc=LedControl(12,11,10,numDevices);//инициализация матриц

byte incomingByte = 0;   // для хранения полученного байта
byte tablA[100]={};//для хранения текста в кодах
int i=0;




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,0);       // Set the brightness to default value
lc.clearDisplay(x);         // and clear the display
Serial.begin(9600);
}
}
 
 
void loop(){

//    scrollFont();
while (Serial.available() > 0) {  //если есть доступные данные
        // считываем байт
  tablA[i]=Serial.read();i++;
   }
scrollMessage(); 
}
 
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
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,
B10000000,
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,
 
 
B01110000,  //'(Э)
B10001000,
B00000100,
B00111100,
B00000100,
B10001000,
B01110000,
7,
 
 
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,
 
 
B11111000,  //,(Б)
B10000000,
B10000000,
B11110000,
B10001000,
B10001000,
B11110000,
6,
 
 
B00000000,  //-
B00000000,
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
6,
 
 
B10010000,  //.(Ю)
B10101000,
B10101000,
B11101000,
B10101000,
B10101000,
B10010000,
6,
 
 
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,
 
 
B10101000,  //;(Ж)
B10101000,
B01110000,
B00100000,
B01110000,
B10101000,
B10101000,
6,
 
 
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,
 
 
B00100000,  //A(Ф)
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
B00100000,
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,
 
 
B10101000,  //I(Ш)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111000,
6,
 
 
B01110000,  //J(О)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
 
 
B00111000,  //K(Л)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B10001000,
6,
 
 
B00111000,  //L(Д)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B11111000,
6,
 
 
B10000000,  //M(Ь)
B10000000,
B10000000,
B11110000,
B10001000,
B10001000,
B11110000,
6,
 
 
B11111000,  //N(Т)
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
6,
 
 
B01110000,  //O
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
 
 
B01110000,  //P(З)
B10001000,
B00001000,
B1110000,
B00001000,
B10001000,
B01110000,
6,
 
 
B01110000,  //Q(Й)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
6,
 
 
B10001000,  //R(К)
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
6,
 
 
B10000100,  //S(Ы)
B10000100,
B10000100,
B11100100,
B10010100,
B10010100,
B11100100,
7,
 
 
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,
B10001000,
B10001000,
B10001000,
B11110100,
7,
 
 
B10001000,  //X(Ч)
B10001000,
B10001000,
B01111000,
B00001000,
B00001000,
B00001000,
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() {
int counter = 0;
int myChar=0;
do {
// read back a char
myChar =tablA[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
}
}

 

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

такой кодъ нада под спойлер прятать

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

leks пишет:
Переделал под передачу через монитор порта фразы на русском в английской раскладке. Жуть.
Типа вводим qwerty а получаем йцукен
А зачем? Потому что отсутствуют шрифты для кириллицы?

leks
Offline
Зарегистрирован: 22.10.2017

Добавил две строчки, теперь что пишем в монитор по русски, то и получаем на строке. Но мне хочется так - сказал в смартфон "Закрыто на обед" и побежала надпись по строке:)

Как этот спойлер ставить? Сын вроде показывал, опять забыл.

leks
Offline
Зарегистрирован: 22.10.2017

Сделал приложение, получилось нормально. Теперь можно электронные записки писать голосом:) прямо на дверь.

leks
Offline
Зарегистрирован: 22.10.2017

Баловался с часами на бегущей строке. Передавать время со смартфона - получается только при включённом приложении :(

С помощью модуля DS3231 вроде удобно получается, но модуль явно лишний. А если пользоваться millis() и смартфоном переодически подправлять значения? Пробовал кто?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

leks пишет:

Баловался с часами на бегущей строке. Передавать время со смартфона - получается только при включённом приложении :(

С помощью модуля DS3231 вроде удобно получается, но модуль явно лишний. А если пользоваться millis() и смартфоном переодически подправлять значения? Пробовал кто?

правильно ставить модуль точного времени любой а с внешнего источника только делать синхронизацию времени. если есть отличия более чем на Х мс

тем более цена таких модулей смешные 30-50р на али

leks
Offline
Зарегистрирован: 22.10.2017

Сделал с точностью до минуты - 4 знака и двоеточие пробегают примерно за 3 сек. по 4 матрицам друг за другом. Так спокойно, секунды бесят. Смартфоном подводить, думаю в сутки раз хватит для "миллис" (как добрые механические часы из детства). Вообщем "часы-строка сообщение" получилось.

Чего бы ещё сделать по мотивам интернета на MAX7219? (термометр-барометр не хочется). 

sadman41
Offline
Зарегистрирован: 19.10.2016

leks пишет:

Чего бы ещё сделать по мотивам интернета на MAX7219? (термометр-барометр не хочется). 

Индикатор шума в помещении (bar graph).

Green
Offline
Зарегистрирован: 01.10.2015

Если 3231 не хочется, можно 1307 + программная коррекция. Не хочется 1307 - тогда просто 32кгц кварц вместо родного.)

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

Green пишет:

Если 3231 не хочется, можно 1307 + программная коррекция. Не хочется 1307 - тогда просто 32кгц кварц вместо родного.)

взять сратый будильник, приделать к нему мотор для заводки, на на циферблат постаивть датчики положения стрелок и считывать их

как известно, что механические часы очень точные, практически можно вывести до долей секунды в год! - главное создать для них неизменные окружающие условия и уровень заводки - так что ставим его под стеклянный колпак и ваккумируем, подзаводить каждый час на уровень заводки в 1 час

тогда вообще будет мега крутой аппарат )

leks
Offline
Зарегистрирован: 22.10.2017

Даже интересно стало на сколько "миллис" уйдут за 12 часов - ставлю эксперимент:)

Из модулей у меня есть ещё 1302 - ни хрена я его не смог запустить:(

 

leks
Offline
Зарегистрирован: 22.10.2017

Ну ушло где то секунды на три, т.е. в пределах времени пробежки по экрану данных. Как-то даже неожиданно от миллис. Получается если делать часы с точностью до минуты + подводка со смартфона, то и модули RTC не нужны.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А прерывания на миллис как то воздействуют? По идеи не должны же...

leks
Offline
Зарегистрирован: 22.10.2017

Так нет прерываний в скетче. Всё что воздействует на миллис это точность частоты 16 МГц, т.е. насколько 1 миллисекунда в программе это действительно 1 миллисекунда в реальности.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я же вообще спросил, не о конкретном скетче. Просто интересно и думаю «в тему». Значит миллис никак не связаны с прерываниями. 

Green
Offline
Зарегистрирован: 01.10.2015

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

b707
Offline
Зарегистрирован: 26.05.2017

leks а чем у Вас связь со смартфоном сделана - блютуз? - в скетче что-то нет ничего

Вы бы код приложения выложили лучше, чем ардуино :) Только не в конфу, а на какой-нить ресурс

leks
Offline
Зарегистрирован: 22.10.2017

 

Связь со смартфоном через модуль блютуз в обе стороны. Никак с него (НС-05) "слездь" не могу. Просто и надёжно.  

Вот вариант проекта приложения в мит апп инвенторе 2.

https://yadi.sk/d/0nicernDXvwXVQ