/* Указываем входы платы соответствующие строка матрицы по порядку. Первая строка соответствует 24 пину LED-матрицы - он подключен к 13 выходу платы Вторая строка соответствует 23 пину LED-матрицы - он подключен к 12 выходу платы ... За пятую строку отвечает 4 пин LED-матрицы - он подключен к выходу A3 и т.д. */ //int rowPins[] = {13, 12, 11, 10, A3, A2, A1, A0}; int rowPins[] = {A0, A1, 2, 3, A2, A3, A4, A5}; /* Указываем входы платы соответствующие столбцам матрицы по порядку Первый столбец соответствует 20 пину LED-матрицы - он подключен к 9 выходу платы Второй столбец соответствует 19 пину LED-матрицы - он подключен к 8 выходу платы ... */ //int colPins[] = {9, 8, 7, 6, 5, 4, 3, 2}; int colPins[] = {5, 6, 7, 8, 9, 11, 12, 13}; byte mask[8][8]= { {0, 1, 1, 0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; /*int mask[8][8] = { {0, 0, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 1, 0, 0, 1, 0, 1}, {1, 0, 1, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 1, 1, 1, 1, 0, 1}, {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0} };*/ int delays[]={300,200,100,50,20,10,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1}; void setup() { for (int i = 0; i < 8; ++i) { pinMode(rowPins[i], OUTPUT); // Определяем пины как выход pinMode(colPins[i], OUTPUT); // Определяем пины как выход } } int delayIndex=0; void loop() { for (int r = 0; r < 8; ++r) { for (int c = 0; c < 8; ++c) { /*Сначала присваиваем значения столбцам, чтобы при подключении напряжения к аноду загорелась сразу вся строка - если подавать сначала напряжение на анод, диоды будут разной яркости*/ digitalWrite(colPins[c], ((mask[r][c] == 1) ? LOW : HIGH)); } digitalWrite(rowPins[r], HIGH); /*Подаем напряжение на анод - зажигаем всю строку*/ /*Если значение паузы до видимого значения 100, то станет понятен механизм работы*/ delay(delays[delayIndex]); /*Делаем паузу, чтобы зафиксировать изображение*/ digitalWrite(rowPins[r], LOW); /*Убираем напряжение со строки, переходим к следующей*/ } if (delayIndex<30) ++delayIndex; }