пытаюсь вывести букву А на матрицу, но по непонятным причинам не удается. помогите пожалуйста
enum { SER, RCLK, SRCLK };
const uint8_t colRegPins[] = { 11, 12, 13 };
const uint8_t rowRegPins[] = { 2, 3, 4 };
void initReg(const uint8_t* pins)
{
pinMode(pins[SER], OUTPUT);
pinMode(pins[RCLK], OUTPUT);
pinMode(pins[SRCLK], OUTPUT);
}
void setReg(const uint8_t* pins, uint8_t bits)
{
digitalWrite(pins[RCLK], LOW);
shiftOut(pins[SER], pins[SRCLK], MSBFIRST, bits);
digitalWrite(pins[RCLK], HIGH);
}
void setup()
{
initReg(colRegPins);
initReg(rowRegPins);
cli();
TCCR2A = 0;
TCCR2B = 0;
TIMSK2 = 1 << TOIE2;
TCCR2B = 1 << CS22 | 1 << CS21; // prescaler = 128
sei();
}
const uint8_t chars[] PROGMEM = {
B00110000,
B01111000,
B11001100,
B11001100,
B11111100,
B11001100,
B11001100,
B00000000,
};
uint8_t activeRow = 0;
uint8_t prevColBits = 0;
uint8_t videoMemory[8] = { 0 };
void drawChar(uint8_t ch)
{
for (uint8_t i = 0, chIdx = ch * 8; i < 8; ++i)
{
videoMemory[i] = pgm_read_byte(chars + chIdx + i);
}
}
int letterNum = 0;
void loop()
{
drawChar(letterNum);
delay(3000);
letterNum = ++letterNum % 26;
}
ISR(TIMER2_OVF_vect)
{
uint8_t colBits = videoMemory[activeRow];
uint8_t rowBits = ~(1 << activeRow);
if (colBits == prevColBits)
{
setReg(rowRegPins, rowBits);
}
else
{
setReg(colRegPins, 0);
setReg(rowRegPins, rowBits);
setReg(colRegPins, colBits);
prevColBits = colBits;
}
for (int8_t i = 0; i < 8; ++i)
{
activeRow = ++activeRow % 8;
if (videoMemory[activeRow] != 0)
break;
}
}