Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp21 [2020/06/25 10:56] alexnikproducts:aruno:exp21 [2020/06/25 19:29] (текущий) alexnik
Строка 2: Строка 2:
  
 Компьютерная анимация — последовательный показ (слайд-шоу) заранее подготовленных графических файлов. Компьютерная анимация — последовательный показ (слайд-шоу) заранее подготовленных графических файлов.
-Мы уже создавали анимацию на 7-ми сегментном LED - индикаторе, [[aruno:exp14|Эксперимент 14. Секундомер]]\\+Мы уже создавали анимацию на 7-ми сегментном LED - индикаторе, [[products:aruno:exp14|Эксперимент 14. Секундомер]], но там мы могли отображать только буквенно-цифровые символы.\\ 
 +LED - матрица с которой мы познакомились в [[products:aruno:exp20|предыдущем эксперименте]], позволяет не только отображать картинки 8х8 точек (пикселей), но и создавать простые игры.\\ 
 + 
 +В данном эксперименте сделаем анимацию подмигивающего смайлика. 
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
  
-{{ :products:ardu:exp19_sch.png?nolink&400 |}}+{{ :products:ardu:exp21_sch.png?nolink&400 |}}
 //Рисунок 1. Электрическая принципиальная схема эксперимента// //Рисунок 1. Электрическая принципиальная схема эксперимента//
  
-{{ :products:ardu:exp19.png?direct&600 |}}+{{ :products:ardu:exp21.png?direct&600 |}}
 //Рисунок 2. Монтажная схема эксперимента// //Рисунок 2. Монтажная схема эксперимента//
  
-Как и в предыдущем эксперименте контроллер передает последовательный сигнал на вывод DS микросхемы, который преобразуется в параллельный сигнал на выводах Q0...Q7. К этим выводам через токоограничительные резисторы подключаем LED - индикатор.+Для управления LED - матрицей понадобится 16 пинов контроллера. На выводы строк ставим токоограничительные резисторы 120 Ом. 
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file cpp Exp19[enable_line_numbers="2", start_line_numbers_at="1"]> +<file cpp Exp21[enable_line_numbers="2", start_line_numbers_at="1"]> 
-int a = 8;  +int R[] {2,7,A5,5,13,A4,12,A2}  
-int b = 9; +int C[] {6,11,10,3,A3,4,8,9}    
-int c = 11; +   
-int d = 5; +unsigned char ris1[8][8] = {   
-int e = 4; +                                0,0,0,0,0,0,0,0, 
-int f = 7; +                                0,1,1,0,0,1,1,0, 
-int g = 6+                                0,1,1,0,0,1,1,0, 
-int h = 10+                                0,0,0,0,0,0,0,0
-int keyPin = 3; +                                0,0,0,0,0,0,0,0, 
-int data [11][8] = {{1,1,1,1,1,1,0,1}//"Ноль" +                                0,1,0,0,0,0,1,0, 
-                    {0,1,1,0,0,0,0,1}//"Один" +                                0,0,1,1,1,1,0,0, 
-                    {1,1,0,1,1,0,1,1}//"Два" +                                0,0,0,0,0,0,0,0
-                    {1,1,1,1,0,0,1,1}//"Три" +                            };   
-                    {0,1,1,0,0,1,1,1}//"Четыре" +   
-                    {1,0,1,1,0,1,1,1}//"Пять" +unsigned char ris2[8][8] =  { 
-                    {1,0,1,1,1,1,1,1}//"Шесть" +                                0,0,0,0,0,0,0,0
-                    {1,1,1,0,0,0,0,1}//"Семь" +                                0,1,1,0,0,0,0,0
-                    {1,1,1,1,1,1,1,1}//"Восемь" +                                0,1,1,0,1,1,1,1, 
-                    {1,1,1,1,0,1,1,1}//"Девять" +                                0,0,0,0,0,0,0,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, 
-void displ (int); +                                0,0,1,1,1,1,0,0, 
- +                                0,0,0,0,0,0,0,0
-void setup() {  +                            };   
-    for(int i=4;i<=11;i++)  +   
-        pinMode(i,OUTPUT); +void setup() {   
-    pinMode(keyPin,INPUT); +  for(int i = 0;i<8;i++)  {   
-    displ(11);+    pinMode(R[i],OUTPUT);   
 +    pinMode(C[i],OUTPUT);   
 +    }   
 +   
 +   
 +void loop(){   
 +  for(int i = ; i < 70 ; i++) {   
 +    Display(ris1);   
 +       
 +  for(int = 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);   
 +   }  
    
- 
-int x = -1;   
-int button_old = 1; 
-void loop() {  
-   if((digitalRead(keyPin) == LOW)&&(button_old == 1)) { 
-      x = x + 1; 
-    } 
-   displ(11); 
-   displ(x); 
-   if (x > 9) {x = 0;} 
-    
-   button_old = digitalRead(keyPin); 
-   delay(20); 
- } 
- 
-void displ (int num) { 
-  int j = 0; 
-  digitalWrite(a, data[num][j]); j = j + 1; 
-  digitalWrite(b, data[num][j]); j = j + 1;  
-  digitalWrite(c, data[num][j]); j = j + 1;  
-  digitalWrite(d, data[num][j]); j = j + 1;  
-  digitalWrite(e, data[num][j]); j = j + 1;  
-  digitalWrite(f, data[num][j]); j = j + 1;  
-  digitalWrite(g, data[num][j]); j = j + 1;  
-  digitalWrite(dp, data[num][j]); j = j + 1;  
-} 
 </file> </file>
  
-В программе эксперимента используем двухмерный массив, в котором зашифровываем выводимые символы. Для вывода всех символов напишем универсальную функцию в которую будем передавать порядковый номер символа зашифрованного в массиве.+В программе пины контроллера по столбцам и строкам для удобства объединены в отдельные массивы **R[]** и **C[]**.\\ 
 +Для отрисовки вызываем функцию ''Display()''которая принимает в качестве аргумента массив зашифрованной картинки, и далее в первом цикле перебираются пины строк и подается сигнал **LOW**. Вложенный цикл перебирает столбцы и в соответствие с данными в массиве картинки присваивает соответствующему пину сигнал **LOW**, если в массиве значение 0 или сигнал **HIGH**, если значение 1\\
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-  * добавьте дополнительно еще буквы A, b, C, d, E, F +Создайте свою анимацию из нескольких картинок
-  * усовершенствуйте функцию ''displ()'',(подсказка - для этого вам понадобится изменить монтажную схему подключения+
 </WRAP> </WRAP>