===== Эксперимент 21. Анимация =====
Компьютерная анимация — последовательный показ (слайд-шоу) заранее подготовленных графических файлов.
Мы уже создавали анимацию на 7-ми сегментном LED - индикаторе, [[products:aruno:exp14|Эксперимент 14. Секундомер]], но там мы могли отображать только буквенно-цифровые символы.\\
LED - матрица с которой мы познакомились в [[products:aruno:exp20|предыдущем эксперименте]], позволяет не только отображать картинки 8х8 точек (пикселей), но и создавать простые игры.\\
В данном эксперименте сделаем анимацию подмигивающего смайлика.
==== Схема эксперимента ====
{{ :products:ardu:exp21_sch.png?nolink&400 |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
{{ :products:ardu:exp21.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
Для управления LED - матрицей понадобится 16 пинов контроллера. На выводы строк ставим токоограничительные резисторы 120 Ом.
==== Программный код эксперимента ====
int R[] = {2,7,A5,5,13,A4,12,A2};
int C[] = {6,11,10,3,A3,4,8,9};
unsigned char ris1[8][8] = {
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
0,1,1,0,0,1,1,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,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,
};
unsigned char ris2[8][8] = {
0,0,0,0,0,0,0,0,
0,1,1,0,0,0,0,0,
0,1,1,0,1,1,1,1,
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,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,
};
void setup() {
for(int i = 0;i<8;i++) {
pinMode(R[i],OUTPUT);
pinMode(C[i],OUTPUT);
}
}
void loop(){
for(int i = 0 ; i < 70 ; i++) {
Display(ris1);
}
for(int i = 0 ; i < 70 ; i++) {
Display(ris2);
}
}
void Display(unsigned char dat[8][8]) {
for(int r = 0; r<8 ; r++) {
digitalWrite(R[r],LOW);
for(int c = 0;c<8;c++) {
digitalWrite(C[c],dat[r][c]);
}
delay(1);
Clear();
}
}
void Clear() {
for(int i = 0;i<8;i++) {
digitalWrite(C[i],LOW);
digitalWrite(R[i],HIGH);
}
}
В программе пины контроллера по столбцам и строкам для удобства объединены в отдельные массивы **R[]** и **C[]**.\\
Для отрисовки вызываем функцию ''Display()''которая принимает в качестве аргумента массив зашифрованной картинки, и далее в первом цикле перебираются пины строк и подается сигнал **LOW**. Вложенный цикл перебирает столбцы и в соответствие с данными в массиве картинки присваивает соответствующему пину сигнал **LOW**, если в массиве значение 0 или сигнал **HIGH**, если значение 1. \\
==== Дополнительное задание ====
Создайте свою анимацию из нескольких картинок