Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp14 [2020/06/12 11:30] alexnikproducts:aruno:exp14 [2020/07/02 12:18] (текущий) alexnik
Строка 4: Строка 4:
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
-{{ :products:ardu:exp14_shema_tk.png?nolink |}} +{{ :products:ardu:exp14_shema_tk.png?nolink&400 |}} 
-{{ :products:ardu:exp13_sch.png?nolink |}}+{{ :products:ardu:exp13_sch.png?nolink&400 |}}
 //Рисунок 1. Электрическая принципиальная схема эксперимента// //Рисунок 1. Электрическая принципиальная схема эксперимента//
  
Строка 14: Строка 14:
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file cpp Exp13[enable_line_numbers="2", start_line_numbers_at="1"]>+<file cpp Exp14[enable_line_numbers="2", start_line_numbers_at="1"]>
 int a = 8;  int a = 8; 
 int b = 9; int b = 9;
Строка 22: Строка 22:
 int f = 7; int f = 7;
 int g = 6; int g = 6;
-int dp = 10;+int = 10
 +int keyPin = 12;
  
-void setup() {  +// Цифра "Один" 
-    int i+void display1(void) {  
-    for(i=4; i<=11; i++) pinMode(i,OUTPUT);+    digitalWrite(b,HIGH)
 +    digitalWrite(c,HIGH);
        
-void loop() {     +// Цифра "Два" 
 +void display2(void) { 
 +    digitalWrite(a,HIGH); 
 +    digitalWrite(b,HIGH); 
 +    digitalWrite(g,HIGH); 
 +    digitalWrite(e,HIGH); 
 +    digitalWrite(d,HIGH); 
 +   }  
 +// Цифра "Три" 
 +void display3(void) {  
 +    digitalWrite(a,HIGH); 
 +    digitalWrite(b,HIGH); 
 +    digitalWrite(c,HIGH); 
 +    digitalWrite(d,HIGH); 
 +    digitalWrite(g,HIGH); 
 +   }  
 +// Цифра "Четыре" 
 +void display4(void) {  
 +    digitalWrite(f,HIGH); 
 +    digitalWrite(b,HIGH); 
 +    digitalWrite(g,HIGH); 
 +    digitalWrite(c,HIGH); 
 +   }  
 +// Цифра "Пять" 
 +void display5(void) { 
     digitalWrite(a,HIGH);     digitalWrite(a,HIGH);
     digitalWrite(f,HIGH);     digitalWrite(f,HIGH);
Строка 34: Строка 60:
     digitalWrite(c,HIGH);     digitalWrite(c,HIGH);
     digitalWrite(d,HIGH);     digitalWrite(d,HIGH);
 +   
 +// Цифра "Шесть"
 +void display6(void) { 
 +    digitalWrite(a,HIGH);
 +    digitalWrite(f,HIGH);
 +    digitalWrite(g,HIGH);
 +    digitalWrite(c,HIGH);
 +    digitalWrite(d,HIGH);  
 +    digitalWrite(e,HIGH);  
 +   
 +// Цифра "Семь"
 +void display7(void) {   
 +    digitalWrite(a,HIGH);
 +    digitalWrite(b,HIGH);
 +    digitalWrite(c,HIGH);
 +   
 +// Цифра "Восемь"
 +void display8(void) { 
 +    digitalWrite(a,HIGH);
 +    digitalWrite(b,HIGH);
 +    digitalWrite(g,HIGH);
 +    digitalWrite(c,HIGH);
 +    digitalWrite(d,HIGH);  
 +    digitalWrite(e,HIGH);  
 +    digitalWrite(f,HIGH);  
 +   
 +// Цифра "Девять"
 +void display9(void) { 
 +    digitalWrite(a,HIGH);
 +    digitalWrite(b,HIGH);
 +    digitalWrite(g,HIGH);
 +    digitalWrite(c,HIGH);
 +    digitalWrite(d,HIGH);  
 +    digitalWrite(f,HIGH);  
 +   
 +// Цифра "Нуль"
 +void display0(void) { 
 +    digitalWrite(a,HIGH);
 +    digitalWrite(b,HIGH);
 +    digitalWrite(c,HIGH);
 +    digitalWrite(d,HIGH);  
 +    digitalWrite(e,HIGH);  
 +    digitalWrite(f,HIGH);  
    }    }
-</file>+//Очистка дисплея  
 +void clearDisplay(void) {  
 +    digitalWrite(a,LOW); 
 +    digitalWrite(b,LOW); 
 +    digitalWrite(g,LOW); 
 +    digitalWrite(c,LOW); 
 +    digitalWrite(d,LOW);   
 +    digitalWrite(e,LOW);   
 +    digitalWrite(f,LOW);   
 +   
  
-Программа эксперимента довольно простая, назначаем переменным пины контроллера, устанавливаем их в режим вывода и подаем сигнал на нужные.+void setup() {  
 +    int i; 
 +    for(i=4;i<=11;i++)  
 +        pinMode(i,OUTPUT); 
 +    pinMode(keyPin,INPUT); 
 +    digitalWrite(h,HIGH); 
 +    display0(); 
 + }  
 + 
 +int x = -1;   
 +int switchState = 0;  
 +int oldSwitchState = 0;  
 +boolean lightsOn = false; 
 +void loop() {  
 +   switchState = digitalRead(keyPin);  
 +   if (switchState != oldSwitchState) { 
 +      oldSwitchState = switchState; 
 +      if (switchState == HIGH) { 
 +        lightsOn = !lightsOn; 
 +      } 
 +    } 
 +   if(lightsOn) { 
 +      delay(100);  
 +      x = x + 1; 
 +    } 
 +   if (x == 0) {clearDisplay(); display0();
 +   if (x == 1) {clearDisplay(); display1();
 +   if (x == 2) {clearDisplay(); display2();
 +   if (x == 3) {clearDisplay(); display3();
 +   if (x == 4) {clearDisplay(); display4();
 +   if (x == 5) {clearDisplay(); display5();
 +   if (x == 6) {clearDisplay(); display6();
 +   if (x == 7) {clearDisplay(); display7();
 +   if (x == 8) {clearDisplay(); display8();
 +   if (x == 9) {clearDisplay(); display9();
 +   if (x > 9) {x = 0;} 
 + } 
 +</file> 
 +На первый взгляд программа может показаться очень сложной, но не стоит пугаться, давайте присмотримся повнимательнее.\\ 
 +В начале программы мы инициализируем переменные соответствующие номерам пинов к которым подключен LED - индикатор и кнопка.\\ 
 +Далее следуют одиннадцать функций очень похожих друг на друга. При выполнении функций ''display0()...display9()'' на LED - индикаторе зажигаются цифры от 0 до 9, а при выполнении функции ''clearDisplay()'' все сегменты индикатора гаснут.\\ 
 +В функции ''setup()'' настраиваем пины контроллера и запускаем на выполнение функцию ''display0()''что-бы на индикаторе при запуске сразу загорелся **"0"**.\\ 
 +В функции ''loop()'' прописан обработчик кнопки, который запускает или останавливает смену цифр на LED - индикаторе.\\ 
 +Благодаря тому, что мы отображение цифр вынесли в отдельные функции, основной цикл программы более прост и легче читаем. Кроме того при допущении ошибки ее легче найти и исправить.
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-  * Измени код программы, чтобы получить другие цифры на дисплее.+Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F
 </WRAP> </WRAP>
 +
 +=== Задание повышенной сложности ===
 +<WRAP center round tip 60%>
 +Напиши программу с аналогичным результатом используя массивы 
 +</WRAP>
 +