===== Эксперимент 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. \\ ==== Дополнительное задание ==== Создайте свою анимацию из нескольких картинок