===== Эксперимент 14. Секундомер ===== В прошлом эксперименте мы научились выводить данные на LED - индикатор. Усовершенствуем немного схему и программу, что бы получить простейший секундомер, который отсчитывает и отображает секунды и будет управляться кнопкой. ==== Схема эксперимента ==== {{ :products:ardu:exp14_shema_tk.png?nolink&400 |}} {{ :products:ardu:exp13_sch.png?nolink&400 |}} //Рисунок 1. Электрическая принципиальная схема эксперимента// {{ :products:ardu:exp14.png?direct&600 |}} //Рисунок 2. Монтажная схема эксперимента// ==== Программный код эксперимента ==== int a = 8; int b = 9; int c = 11; int d = 5; int e = 4; int f = 7; int g = 6; int h = 10; int keyPin = 12; // Цифра "Один" void display1(void) { digitalWrite(b,HIGH); digitalWrite(c,HIGH); } // Цифра "Два" 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() { 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;} } На первый взгляд программа может показаться очень сложной, но не стоит пугаться, давайте присмотримся повнимательнее.\\ В начале программы мы инициализируем переменные соответствующие номерам пинов к которым подключен LED - индикатор и кнопка.\\ Далее следуют одиннадцать функций очень похожих друг на друга. При выполнении функций ''display0()...display9()'' на LED - индикаторе зажигаются цифры от 0 до 9, а при выполнении функции ''clearDisplay()'' все сегменты индикатора гаснут.\\ В функции ''setup()'' настраиваем пины контроллера и запускаем на выполнение функцию ''display0()'', что-бы на индикаторе при запуске сразу загорелся **"0"**.\\ В функции ''loop()'' прописан обработчик кнопки, который запускает или останавливает смену цифр на LED - индикаторе.\\ Благодаря тому, что мы отображение цифр вынесли в отдельные функции, основной цикл программы более прост и легче читаем. Кроме того при допущении ошибки ее легче найти и исправить. ==== Дополнительное задание ==== Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F === Задание повышенной сложности === Напиши программу с аналогичным результатом используя массивы