Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:aruno:exp17 [2020/06/12 19:24] – 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, | ||
| + | {0, | ||
| + | {1, | ||
| + | {1, | ||
| + | {0, | ||
| + | {1, | ||
| + | {1, | ||
| + | {1, | ||
| + | {1, | ||
| + | {1, | ||
| + | {0, | ||
| - | // Цифра " | + | const int pinRed = 13; |
| - | void display1(void) { | + | const int pinYellow = 12; |
| - | digitalWrite(b, | + | const int pinGreen = 11; |
| - | | + | void displ(int); |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display2(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(e, | + | |
| - | digitalWrite(d, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display3(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(g, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display4(void) { | + | |
| - | digitalWrite(f, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display5(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(f, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display6(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(f, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(e, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display7(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(c, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display8(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(e, | + | |
| - | digitalWrite(f, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display9(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(f, | + | |
| - | } | + | |
| - | // Цифра " | + | |
| - | void display0(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(e, | + | |
| - | digitalWrite(f, | + | |
| - | } | + | |
| - | // | + | |
| - | void clearDisplay(void) { | + | |
| - | digitalWrite(a, | + | |
| - | digitalWrite(b, | + | |
| - | digitalWrite(g, | + | |
| - | digitalWrite(c, | + | |
| - | digitalWrite(d, | + | |
| - | digitalWrite(e, | + | |
| - | digitalWrite(f, | + | |
| - | | + | |
| - | void setup() { | + | void setup () { |
| - | int i; | + | for(int i = 2; i <= 13; i++) |
| - | for(i=4;i<=11;i++) | + | |
| pinMode(i, | pinMode(i, | ||
| pinMode(keyPin, | pinMode(keyPin, | ||
| - | | + | |
| - | | + | displ(0); |
| + | } | ||
| - | int x = -1; | + | int x = 0; |
| + | int button_old = 0; | ||
| + | boolean btnStatus = false; | ||
| + | void loop() { | ||
| + | int mTime = 1000; | ||
| + | if(x == 0) { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | mTime = 20; | ||
| + | | ||
| + | } | ||
| + | if((x <= 3) and (x > 0)) { | ||
| + | | ||
| + | | ||
| + | | ||
| + | mTime = 500; | ||
| + | x--; | ||
| + | } | ||
| + | if((x <= 10) and (x >= 4)) { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | if((x <= 15) and (x >= 11)) { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | if((x <= 20) and (x >= 16)) { | ||
| + | | ||
| + | } | ||
| + | | ||
| + | x = 20; | ||
| + | | ||
| + | } | ||
| + | if(x >= 10) | ||
| + | displ(x-10); | ||
| + | | ||
| + | displ(x); | ||
| + | | ||
| + | | ||
| + | } | ||
| - | void loop() { | + | void displ(int num) { |
| - | if(digitalRead(keyPin) == HIGH ) { | + | int j = 0; |
| - | x = x + 1; | + | digitalWrite(a, data[num][j]); j = j + 1; |
| - | } | + | |
| - | if (x == 0) {clearDisplay(); display0(); | + | digitalWrite(c, data[num][j]); j = j + 1; |
| - | if (x == 1) {clearDisplay(); display1();} | + | digitalWrite(d, data[num][j]); j = j + 1; |
| - | if (x == 2) {clearDisplay(); display2();} | + | digitalWrite(e, data[num][j]); j = j + 1; |
| - | 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;} | + | |
| } | } | ||
| </ | </ | ||
| + | В программе при нажатии кнопки устанавливаем переменную счетчика в 20 сек, и при каждом цикле начинаем ее уменьшать на единицу, | ||
| ==== Дополнительное задание ==== | ==== Дополнительное задание ==== | ||
| <WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
| - | Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы | + | Создайте свой вариант светофора, например добавьте к схеме светодиоды для пешеходного светофора. |
| </ | </ | ||