
в отдельном проекте взял часть кода, стараясь сохранить исходную стилистику, наверное если включить в общий код, то анимированные эфекты сохраняца.
в fonts.hpp добавил таблицу символов
Код:
uint8_t font_matrix7219[] = {
0x7e, 0x81, 0x81, 0x81, 0x7e, //0x00 0
0x84, 0x82, 0xff, 0x80, 0x80, //0x01 1
0x82, 0xc1, 0xa1, 0x91, 0x8e, //0x02 2
0x42, 0x81, 0x89, 0x89, 0x76, //0x03 3
0x30, 0x28, 0x24, 0x22, 0xff, //0x04 4
0x4f, 0x89, 0x89, 0x89, 0x71, //0x05 5
0x7e, 0x89, 0x89, 0x89, 0x72, //0x06 6
0x01, 0xe1, 0x11, 0x09, 0x07, //0x07 7
0x76, 0x89, 0x89, 0x89, 0x76, //0x08 8
0x4e, 0x91, 0x91, 0x91, 0x7e, //0x09 9
0x06, 0x09, 0x09, 0x06, 0x00, //0x0A °
0xfc, 0x12, 0x11, 0x12, 0xfc, //0x0B A
0xff, 0x09, 0x09, 0x09, 0x06, //0x0C P
0x7e, 0x81, 0x81, 0x81, 0x42, //0x0D C
0xff, 0x08, 0x08, 0x08, 0xff, //0x0E H
0x00, 0x00, 0x00, 0x00, 0x00, //0x0F space
0x08, 0x08, 0x08, 0x08, 0x08, //0x10 -
0x66, 0x66, 0x00, 0x00, 0x00, //0x11 :
0x60, 0x60, 0x00, 0x00, 0x00, //0x12 .
0x80, 0xe0, 0x60, 0x00, 0x00, //0x13 ,
0x54, 0x14, 0x64, 0x08, 0x70 //0x14 wifi
};
на основе max7219segmentDisplay.hpp сделал вывод на матрицу
1. строка 21 - увеличил выходной массив
Код:
#define NUMBER_OF_DEVICES 8 //number of led matrix connect in series
uint8_t _mpixels[NUMBER_OF_DEVICES*8] = {0, }; //kolkasts stalbtsou
uint8_t _rpixels[NUMBER_OF_DEVICES*8] = {0, }; //kolkasts strok
uint8_t _mpixelsPrev[NUMBER_OF_DEVICES*8] = {0, };
2. void MAX7219_S::_print()
на каждый символ добавляеца по 5 столбцов изображэния, потом пробел и если нужно двоеточие (3 столбца)
Код:
for(uint8_t i=0,n=0; i<8; i++) {
int symvol ;
if(_dispImg[i] >= 100) symvol = (_dispImg[i] - 100 );
else symvol = _dispImg[i];
for(uint8_t j=0; j<5; j++) {
_mpixels[n++]=font_matrix7219[symvol*5+j];
};
_mpixels[n++]=font_matrix7219[0x0F*5]; // add space
if(_dispImg[i] >= 100) { // if :
for(uint8_t j=0; j<3; j++) {
_mpixels[n++]=font_matrix7219[0x11*5+j];// add :
};
}
if(_mpixelsPrev[i] != _mpixels[i]) {
_mpixelsPrev[i] = _mpixels[i];
updated = true;
}
}
3. получиную матрицу надо повернуть, добавил функцыю:
Код:
void MAX7219_M::rotatematrix()
{
for(int8_t n=0; n<_dispNum; n++) {
for(int8_t row=0; row<8; row++) {
uint8_t rotate=0;
for(int8_t col=7; col>=0; col--) {
rotate = rotate<<1;
rotate |= (1UL&(_mpixels[n*8 + col]>>row));
};
_rpixels[n*8 +7 - row]=rotate;
}
}
}
4. вывод в матрицу получился такой
Код:
void MAX7219_M::sendALLByte () {
for(uint8_t row=MAX7219_REG_DIGIT7; row>=MAX7219_REG_DIGIT0; row--) {
digitalWrite(_load,LOW);
// now shift out the data
for(int8_t i=NUMBER_OF_DEVICES; i>=0; i--) {
SPI.transfer16((row<<8) +_rpixels[i*8 + row-1]);
}
digitalWrite(_load, HIGH);
}
}