Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp17 [2020/06/13 13:36] alexnikproducts:aruno:exp17 [2020/07/06 14:13] (текущий) alexnik
Строка 1: Строка 1:
-===== Эксперимент 17. Счетчик (Версия 3.0) =====+===== Эксперимент 17. Светофор =====
  
-Программное решение устранения эффекта ребезга" при нажатии кнопки.+Используя модуль "Светофор", соберем имитацию дорожного светофораработающего по нажатию кнопки и отсчитывающий секунды.
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
-{{ :products:ardu:exp14_shema_tk.png?nolink |}} +{{ :products:ardu:swetofor_sch17.png?nolink&400 |}} 
-{{ :products:ardu:exp13_sch.png?nolink |}}+{{ :products:ardu:exp14_shema_tk.png?nolink&400 |}} 
 +{{ :products:ardu:exp13_sch.png?nolink&400 |}}
 //Рисунок 1. Электрическая принципиальная схема эксперимента// //Рисунок 1. Электрическая принципиальная схема эксперимента//
  
-{{ :products:ardu:exp14.png?direct&600 |}}+{{ :products:ardu:exp17.png?direct&600 |}}
 //Рисунок 2. Монтажная схема эксперимента// //Рисунок 2. Монтажная схема эксперимента//
  
Строка 14: Строка 15:
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file cpp Exp15[enable_line_numbers="2", start_line_numbers_at="1"]> +<file cpp Exp17[enable_line_numbers="2", start_line_numbers_at="1"]> 
-int a = 8;  +const int a = 6;  
-int b = 9+const int b = 7
-int c = 11+const int c = 9
-int d = 5+const int d = 3
-int e = 4+const int e = 2
-int f = 7+const int f = 5
-int g = 6+const int g = 4
-int dp 10+const int 8
-int keyPin = 12;+const int keyPin = 10; 
 +int data [11][8] = {{1,1,1,1,1,1,0,1}, 
 +                    {0,1,1,0,0,0,0,1}, 
 +                    {1,1,0,1,1,0,1,1}, 
 +                    {1,1,1,1,0,0,1,1}, 
 +                    {0,1,1,0,0,1,1,1}, 
 +                    {1,0,1,1,0,1,1,1}, 
 +                    {1,0,1,1,1,1,1,1}, 
 +                    {1,1,1,0,0,0,0,1}, 
 +                    {1,1,1,1,1,1,1,1}, 
 +                    {1,1,1,1,0,1,1,1}, 
 +                    {0,0,0,0,0,0,0,0}};
  
-// Цифра "Один" +const int pinRed = 13
-void display1(void) {  +const int pinYellow = 12
-    digitalWrite(b,HIGH)+const int pinGreen = 11
-    digitalWrite(c,HIGH)+void displ(int);
-   }  +
-// Цифра "Два" +
-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(f,HIGH); +
-    digitalWrite(g,HIGH); +
-    digitalWrite(c,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);   +
-   } +
-//Очистка дисплея  +
-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() {  +void setup () { 
-    int i; +    for(int i = 2; i <= 13; i++) 
-    for(i=4;i<=11;i++) +
         pinMode(i,OUTPUT);         pinMode(i,OUTPUT);
     pinMode(keyPin,INPUT);     pinMode(keyPin,INPUT);
-    display0(); +    digitalWrite(pinRed,HIGH); 
- +    displ(0); 
 + }
  
-int x = -1  +int x = 0
-int button_old = 1+int button_old = 0; 
-void loop() {  +boolean btnStatus = false
-   if((digitalRead(keyPin) == LOW)&&(button_old == 1)) { +void loop() { 
-      x = x + 1; +     int mTime 1000; 
-    } +      if(x == 0) { 
-   if (x == 0) {clearDisplay(); display0();} +       digitalWrite(pinRed, HIGH); 
-   if (x == 1) {clearDisplay(); display1();} +       digitalWrite(pinYellow, LOW); 
-   if (x == 2) {clearDisplay(); display2();} +       digitalWrite(pinGreen, LOW); 
-   if (x == 3) {clearDisplay(); display3();} +       displ(x);   
-   if (x == 4) {clearDisplay(); display4();} +       mTime 20; 
-   if (x == 5) {clearDisplay(); display5();} +       btnStatus true; 
-   if (x == 6) {clearDisplay(); display6();} +      
-   if (x == 7{clearDisplay(); display7();} +      if((x <= 3) and (x > 0)) { 
-   if (== 8{clearDisplay(); display8();} +       digitalWrite(pinGreen, LOW); 
-   if (x == 9{clearDisplay(); display9();} +       delay(500); 
-   if (x > 9{x = 0;}+       digitalWrite(pinGreen, HIGH); 
 +       mTime = 500; 
 +       x--; 
 +      
 +      if((x <10) and (x >= 4)) { 
 +       digitalWrite(pinRed, LOW); 
 +       digitalWrite(pinYellow, LOW); 
 +       digitalWrite(pinGreen, HIGH); 
 +       x--; 
 +      
 +     if((x <15) and (x >11)) { 
 +       digitalWrite(pinYellow, HIGH); 
 +       x--; 
 +      
 +     if((x <20and (x >= 16)) {   
 +       x--; 
 +      
 +     if((digitalRead(keyPin) == LOW)&&(button_old == 1)&&(btnStatus == true)) { 
 +       x = 20; 
 +       btnStatus = false; 
 +      
 +      if(x >10) 
 +        displ(x-10); 
 +       else 
 +        displ(x);
    button_old = digitalRead(keyPin);    button_old = digitalRead(keyPin);
-   delay(10); +   delay(mTime); 
- }</file>+ }
  
 +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(h, data[num][j]); j = j + 1; 
 + }
 +</file>
  
 +В программе при нажатии кнопки устанавливаем переменную счетчика в 20 сек, и при каждом цикле начинаем ее уменьшать на единицу, условные блоки проверяют состояние счетчика и соответственно выполняют заложенные в них инструкции.
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F+Создайте свой вариант светофора, например добавьте к схеме светодиоды для пешеходного светофора.
 </WRAP> </WRAP>