Давайте завершимо, останній штрих, сподіваюся, в підпрограмі range Кожен раз, натискаючи кнопку діапазону, ми збільшуємо значення змінної ran_num

Наводячи курсор на програмні елементи, усередині яких є записи, ви можете побачити «внутрішнє» зміст елемента Якщо почекати деякий час

Ця функція може бути не у всіх версіях програми В останніх версіях Flowcode вона є

Рис 2411 Підрахунок кількості спрацьовувань кнопки вибору діапазону

Але що робити, коли це значення перевалить за 3

Додамо рішення цієї проблеми в макрос range Можливо, там це і залишиться, немає, перенесемо

Рішення проблеми – це додавання розгалуження, коли змінна ren_num «Переросла» 3 У разі виконання умови, ми повернемо змінну до значення 1

У підсумку ми і повинні отримати циклічне перемикання діапазонів, як і планували

Рис 2412 Остаточний () Вид підпрограми вибору діапазону, range

Тепер ми можемо зайнятися оформленням роботи першого частотного діапазону в макросе ran1

У цій підпрограмі ми задамо змінної pause (Яку потрібно створити) середнє значення першого діапазону Тут же ми будемо опитувати кнопки (more  і less) Збільшення та зменшення частоти (змінні для цих кнопок теж слід додати) Всі змінні типу byte, цього достатньо І, якщо ми захочемо, ми повинні перемикати діапазон, тобто, опитувати кнопку range Поки все

Відпрацювати натиснуті кнопки можна в підпрограма, але спочатку ми розберемо це тут

Як і з перемиканням діапазонів, ми повинні стежити, щоб переходи всередині діапазону не вийшли за рамки допустимого Рішення, як уникнути цього, у нас вже є Подивимося, чи можна застосувати воно

Кнопка перемикання діапазонів повинна звертатися до вже готового макросу range І виклик цього макросу додано

У нас все готово для формування імпульсів на виведення В5 Приступимо

Рис 2413 Перший начерк підпрограми першого діапазону

Формування сигналу відбуватиметься так само, як ми і раніше формували імпульси І для цього знадобиться нескінченний цикл

Рис 2414 Формування імпульсів

Формування імпульсу відбувається в нескінченному циклі Займаючись цим, мікроконтролер не зможе побачити те, як змінюються його входи, коли ми натискаємо кнопки Тому опитування кнопок ми внесемо в цей цикл Зайві операції збільшать неточність тривалості імпульсів, але незначно в нашому випадку В іншому випадку слід шукати інше рішення

При опитуванні кнопок збільшення та зменшення частоти, як і у випадку з діапазоном, ми додамо змінні, які відстежуватимуть, скільки разів натиснуті кнопки Імена змінним дамо mor_num і les_num У блок ініціалізації програми додамо їх початкові нульові значення

Цей макрос за великої кількості елементів сильно «подовжився» Якщо ми почнемо і далі працювати над програмою, збільшуючи кількість елементів, то підпрограма стане важко читається Крім того, можливо, до цих елементів програми ми будемо звертатися неодноразово Є сенс додати макроси more і less І ще, ми не перший раз даємо однакові імена подпрограмме і змінної Це не найкращий підхід, але проблем в даному випадку виникнути не повинно

Рис 2415 Макрос збільшення частоти

Як ви бачите, він дуже схожий на те, що ми вже робили А на нього схожий, я б сказав майже копія, макрос less Тільки, якщо в першому макросі ми рухаємося по масиву в бік збільшення індексів масиву, то в другому будемо рухатися у зворотний бік

Рис 2416 Макрос зменшення частоти

Ми можемо повторити, поправивши, якщо потрібно і де потрібно, макрос цього діапазону для двох, що залишилися Це можна зробити, скопіювавши «текст» підпрограми А де потрібно підправити макроси ran2 і ran3

Якщо в першому діапазоні ми як одиниці вибрали мілісекунди, то в другому і третьому це будуть мікросекунди Ця зміна необхідно внести

Крім того, як ви памятаєте, тривалості виражалися великими числами, і ми прийняли рішення збільшити паузу, використовуючи той же масив, за рахунок багаторазового повторення в рахунковому циклі

Для другого діапазону множник, кількість повторів, дорівнює 100 Значить, потрібно додати рахунковий цикл з кількістю проходу 100

Для третього циклу кількість повторів 10 Все це треба не забути виправити

Рис 2417 Основна правка в макросе ran2

І є ще одне важливе зауваження

Щоб уникнути цього, можна застосувати різні прийоми Я вирішив вибрати такий:

Я додав перед викликом макросу more цикл Якщо кнопка more натиснута, тобто, змінна more стала дорівнювати нулю, програма переходить на гілку виклику макросу more Але перед цим потрапляє в цикл, який триває доти, поки кнопка натиснута

Всередині циклу програма тільки опитує кнопку, чекаючи, коли значення змінної стане дорівнює одиниці, тобто, кнопка буде відпущена

Рис 2418 Рішення проблеми «натиснутою кнопки»

Такі добавки слід зробити у всіх макросах ran1ran3 для всіх кнопок І я не виключаю, що доведеться внести ще одну зміну Брязкіт контактів, від якого не врятує попередня добавка Це можна вирішити, додавши невеликі паузи до і після доданого циклу

Рис 2419 Додавання «дляантідребезговой» пауз

Можливо, першим перевірку слід було провести набагато раніше Але краще пізно, ніж ніколи Зараз ми перейдемо до першій перевірці програми, яку спочатку зробимо в режимі покрокового проходу Потім перевіримо в інтерактивному режимі І, нарешті, перевіримо роботу програми в ISIS (Proteus)

Але перед цим я хочу привести на малюнку вид підпрограм, які вже насилу поміщаються

«В кадр»

        

Рис 2420 Вид підпрограм ran1, ran2 і ran3

Перед першою перевіркою додамо на панель три кнопки Я прибрав з панелі сітку і додав фаску Вона не потрібна, але ..

Кнопки, нагадаю, в розділі Входи і називаються SWITCH За замовчуванням – це тумблер Якщо клацнути правіше написи Расшир Св .. у вікні властивостей, то можна в діалозі властивостей задати потрібне

Рис 2421 Вибір потрібно виду і типу кнопок

Додавши три кнопки на панель, в остаточному вигляді вони не будуть фіксованими, але для покрокової налагодження вони те, що нам потрібно, можна ввести підписи до них Щоб додати текст, його потрібно знайти в пункті Обєкти, Додати клацанням На панелі зявиться виділена напис:

«Введіть текст» У вікні властивостей написи є в розділі Оформлення пункт Напис, Правіше якого і можна ввести потрібну напис

Під кнопками я додам написи «Діапазон», «Більше», «Менше» При перевірці буде ясно, яку кнопку натискати

Крім того, я додав елемент Фаска (З того ж розділу Обєкти), Швидше, для краси

Закінчивши з оформленням, до якого ми ще повернемося, можна починати покрокову налагодження Після запуску у вікно спостереження я додам змінні (клацання правою клавішею мишки у вікні спостереження та пункт Додати змінну..) І не забудемо підключити кнопки (використовуючи у властивостях кнопки розділ Подключе ..) До В0, В1 і В2, відповідно

Рис 2422 Покрокова налагодження програми

Зараз майже все зручно, крім того, що, можливо, це треба було зробити раніше На самому початку ми збиралися підключити світлодіоди всіх складових режиму роботи Їх зараз, як зясувалося, дуже не вистачає

Для індикації використовуємо: висновки D0, D1, D2 – індикація діапазонів, D3, D4, D5, D6, D7 – індикація частоти Це змінює вид макросу range

Рис 2423 Зміни в макросе range

Зміни торкнуться і макросів ran1-ran3 На самому початку, при вході в макрос, ми додаємо:

Рис 2424 Зміни в макросах ran1-ran3

І в макросах more і less слід додати висновки значень в порт D

                                                                         

Рис 2425 Зміни в макросах more і less

І, звичайно, слід додати світлодіоди на Панель І не забути їх підключити

Рис 2426 Зміна у вигляді Панелі

І, нарешті, можна додати ще один світлодіод на висновок B5, який буде показувати наявність сигналу Його можна зробити, наприклад, жовтим

З додаванням світлодіодів перевіряти стало помітно зручніше Крім того, якщо ви надумаєте втілити в життя цей пристрій, панель допоможе вам вибрати зручне розташування деталей на панелі реального пристрою

Працювати з програмою стало зручніше, і якось програма працює Я б сказав «дихає» Але чи так вона «дихає», як ми задумали

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012