Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:aruno:exp17 [2020/06/19 11:19] – alexnik | products:aruno:exp17 [2020/07/06 14:13] (текущий) – alexnik | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== Эксперимент 17. Счетчик (Версия 3.0) ===== | + | ===== Эксперимент 17. Светофор ===== |
- | Программное решение устранения эффекта "дребезга" | + | Используя |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== | ||
- | {{ : | + | {{ : |
- | {{ : | + | {{ : |
+ | {{ : | ||
// | // | ||
- | {{ : | + | {{ : |
// | // | ||
Строка 14: | Строка 15: | ||
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== | ||
- | <file cpp Exp15[enable_line_numbers=" | + | <file cpp Exp17[enable_line_numbers=" |
- | 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 h = 8; |
- | int keyPin = 12; | + | const int keyPin = 10; |
int data [11][8] = {{1, | int data [11][8] = {{1, | ||
- | | + | |
- | {1, | + | {1, |
- | {1, | + | {1, |
- | {0, | + | {0, |
- | {1, | + | {1, |
- | {1, | + | {1, |
- | {1, | + | {1, |
- | {1, | + | {1, |
- | {1, | + | {1, |
- | {0, | + | {0, |
- | void displ (int); | + | const int pinRed = 13; |
+ | const int pinYellow = 12; | ||
+ | const int pinGreen = 11; | ||
+ | void displ(int); | ||
- | void setup() { | + | void setup () { |
- | for(int i=4;i<=11;i++) | + | for(int i = 2; i <= 13; i++) |
pinMode(i, | pinMode(i, | ||
pinMode(keyPin, | pinMode(keyPin, | ||
- | displ(11); | + | |
- | | + | |
+ | } | ||
- | int x = -1; | + | int x = 0; |
- | int button_old = 1; | + | int button_old = 0; |
- | void loop() { | + | boolean btnStatus = false; |
- | | + | void loop() { |
- | x = x + 1; | + | int mTime = 1000; |
- | } | + | |
- | displ(11); | + | |
- | displ(x); | + | |
- | | + | |
- | | + | displ(x); |
+ | | ||
+ | | ||
+ | } | ||
+ | if((x <= 3) and (x > 0)) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | mTime = 500; | ||
+ | x--; | ||
+ | | ||
+ | if((x <= 10) and (x >= 4)) { | ||
+ | | ||
+ | digitalWrite(pinYellow, | ||
+ | digitalWrite(pinGreen, HIGH); | ||
+ | x--; | ||
+ | } | ||
+ | if((x <= 15) and (x >= 11)) { | ||
+ | | ||
+ | x--; | ||
+ | } | ||
+ | if((x <= 20) and (x >= 16)) { | ||
+ | x--; | ||
+ | } | ||
+ | | ||
+ | x = 20; | ||
+ | | ||
+ | | ||
+ | if(x >= 10) | ||
+ | displ(x-10); | ||
+ | | ||
+ | displ(x); | ||
| | ||
- | | + | |
} | } | ||
- | void displ (int num) { | + | void displ(int num) { |
int j = 0; | int j = 0; | ||
digitalWrite(a, | digitalWrite(a, | ||
Строка 68: | Строка 104: | ||
digitalWrite(f, | digitalWrite(f, | ||
digitalWrite(g, | digitalWrite(g, | ||
- | digitalWrite(dp, data[num][j]); | + | digitalWrite(h, data[num][j]); |
- | } }</ | + | } |
+ | </ | ||
+ | В программе при нажатии кнопки устанавливаем переменную счетчика в 20 сек, и при каждом цикле начинаем ее уменьшать на единицу, | ||
==== Дополнительное задание ==== | ==== Дополнительное задание ==== | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы | + | Создайте свой вариант светофора, например добавьте к схеме светодиоды для пешеходного светофора. |
</ | </ | ||