Візьмемо за основу частоту Тоді діапазони: 1-10 Гц, 10-100 Гц, 100-1000 Гц, 1-10 кГц, 10-100 кГц,

– Цілком нас влаштують Однак як, не маючи осцилографа, ми могли б фіксувати, в якому діапазоні ми працюємо Ми можемо кожне перемикання діапазону фіксувати за допомогою світлодіода, поряд з яким помістимо напис Для цього нам знадобиться 5 світлодіодів Перемикати діапазони ми можемо за допомогою однієї кнопки, перебираючи діапазони послідовно і циклічно Чи можемо ми це зробити Можемо

Далі Усередині кожного діапазону ми, використовуючи попередню напрацювання, можемо змінювати частоту Для цього нам знадобиться дві кнопки: збільшити частоту і зменшити частоту (міняти, нагадаю, ми будемо тривалості) Якщо в діапазоні 10-100 Гц міняти частоту з кроком 10 Гц, то кількість кроків буде цілком розумним Чи можемо ми це зробити Можемо

Звичайно, якщо ми захочемо, то всередині кроку в 10 Гц, ми можемо зробити точну настройку з кроком в 1 Гц Якщо захочемо Але, підемо далі

Було б зручно, якби ми могли бачити, яка частота в даний момент, коли ми кілька разів поклацав кнопками Ми могли б для всіх діапазонів зробити загальний індикатор, по суті, індикатор кількості кроків, що вимагатиме від нас 10 світлодіодів для індикації Чи можемо ми це зробити Можемо

А тепер давайте рахувати Будь розробка, велика чи маленька, завжди стикається з необхідністю порахувати, у що виливаються наші фантазії Отже

Дві кнопки для управління частотою і одна для перемикання діапазонів займуть у нас 3 виводу порту Пять світлодіодів для індикації діапазонів і десять світлодіодів для відображення результату всередині діапазону займуть у нас 15 висновків портів (кожен порт, зазвичай, має 8 висновків) Разом: 15 + 3 = 18 А висновок для сигналу 15 + 3 + 1 = 19

Мікроконтролери з великою кількістю висновків і декількома портами в природі є, але ми хотіли використовувати прості, дешеві, доступні моделі ..

Давайте будемо реалістами і помер наші запити до того моменту, коли, наприклад, навчимося працювати з дисплеями Використовуючи дисплей, ми можемо виводити всю інформацію, при меншій кількості задіяних висновків При цьому ми можемо використовувати цифрову клавіатуру, що, ймовірно, зменшить кількість висновків, зайнятих кнопками, дуже розширивши можливості по введенню керуючих сигналів Але про це, якщо ми і поговоримо, то не зараз

Зараз постараємося зрозуміти, що в наших запитах явно зайве

Поки я впевнений, що діапазон 1-10 Гц вам знадобиться не скоро (якщо коли-небудь знадобиться) Як часто ви будете користуватися діапазоном 10-100 кГц Думаю, не частіше, ніж попереднім

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

Вибравши як центральної частоти в діапазоні 10-100 Гц частоту 50 Гц, вибравши крок 20 Гц, ми отримаємо загальну кількість кроків рівне 4 Ось як у нас буде змінюватися частота 50-70-90 Гц або 50-30-10 Гц

Порахуємо ще раз Три кнопки для перемикання діапазонів і частоти, три світлодіоди, що відображають діапазони і чотири індикатори всередині діапазону, плюс виведення сигналу: 3 + 7

+ 1 Ми суттєво скоротили вимоги до кількості портів Два порти, що мають 16 висновків, цілком укладаються в наші наміри

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

У попередній версії програми ми формували імпульси в основній частині Але в тому випадку ми відразу вибирали одиниці вимірювання тривалості імпульсів Зараз нам знадобиться міняти ці одиниці Тому, не дарма ж ми «возилися» з макросом – Використовуємо макрос для формування імпульсу, залишивши в основній програмі опитування кнопок і ..

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

Ви можете спробувати вводити імена кирилицею, але якщо виникнуть проблеми, перемикайтеся на латиницю Адже можна писати і латиницею «по-російськи», хоча це і не дуже зручно

Як розміщувати компоненти програми, я залишаю, ви це вже знаєте Як створювати макрос ви теж знаєте

Тому перейдемо до того, що повинен робити макрос вибору діапазону

Рис 238 Початок роботи над програмою генератора з декількома діапазонами

А повинен макрос вибору діапазону в першу чергу перемикати нас між одиницями часу Давайте, визначимо одиниці, виходячи з частоти Тривалості (і період) – це величини зворотні частоті

Для діапазону 10-100 Гц період середини 50 Гц дорівнює 20 мс Для діапазону 100-1000 Гц період середини 500 Гц дорівнює 2 мс Для діапазону 1-10 кГц період середини 5 кГц дорівнює 200 мкс

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

Постараємося розібратися в цьому Почнемо з того, що переведемо вибрані частоти в періоди: 10-30-50-70-90 Гц перетворяться в періоди 100-33-20-14-11 мс

Ми формуємо меандр, тобто, імпульси з рівними значеннями високої та низької напруги, отже, тривалість імпульсу вдвічі менше Іншими словами нам потрібна послідовність наступних часів: 50-16-10-7-5 мс Це не будуть точні значення, але вони у нас і не вийдуть точними без великих складнощів

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

Додамо в програму розгалуження для переходу до макросу, якщо натиснута кнопка діапазону

Як і в попередніх випадках, ми вважаємо, що натиснута кнопка зєднує висновок із загальним проводом, землею

Коли кнопка натиснута, ми переходимо до обробки макросу

range

Створенням цього макросу і займемося

Рис 239 Галуження програми при кнопці діапазону

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

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

Рис 2310 Виділення елементів програми для перенесення

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

Рис 2311 Меню, що випадає команд

Вирізавши потрібні компоненти програми, перейдемо на закладку макросу Тепер в основному меню виберемо пункт Правка, А в ньому команду Вставити

Рис 2312 Вставка потрібних компонентів в інше місце програми

Як бачите, робота в редакторі програми Flowcode мало відрізняється від роботи в текстовому редакторі – можна вирізати, вставляти, копіювати і тп

Але повернемося до нашої послідовності Якщо нам потрібно зберігати дані, ми використовуємо змінні (або константи, якщо раз і назавжди) Мінлива може вмістити байт, ціле й інший тип даних, але тільки одне число або символ Для зберігання багатьох чисел в програмуванні використовують масиви даних Це виділена область памяті, де послідовно розташовуються різні, скажімо, числа (але не обовязково, звичайно, числа) Доступ до них реалізований за індексом масиву Тобто, кожен елемент масиву маркується імям масиву та індексом, порядковим номером елемента в масиві

Серед типів змінних в програмі Flowcode немає масивів Хоча масиви є в інших мовах програмування Зате є рядкові змінні Строкові масиви – це різновид масиву, від загального вигляду відрізняється тільки тим, що в осередках масиву зберігаються байти, що містять коди символів Тому набір символів утворює рядок, яка дала назву масиву рядків

Створимо масив значень, куди помістимо потрібні нам тимчасові інтервали

Масив, строкова змінна, створюється, як і будь-яка змінна Механізми створення змінних ми вже знаємо

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

Чому я кажу про змінної, тому що значення в ній можуть і змінюватися

І до використання масиву потрібно вставити в нього дані

Рис 2313 Створення масиву для зберігання тривалостей діапазону

Для заповнення масиву використовуємо програмний елемент Обчислення, Ми вже використовували його для операції привласнення Те, що ми робимо зараз, те ж саме, ми присвоюємо значення елементів масиву

Зверніть увагу, початок відліку, як і в мові програмування Сі, це нуль

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

Рис 2314 Заповнення масиву

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

Перевірити я хочу правильність запису поки в покроковому режимі налагодження, додавши змінну, скажімо, pause у вікно спостереження і надаючи їй різні значення з масиву Ця операція виконується в елементі Обчислення: Pause = ran1 [0] і тд

Рис 2315 Перевірки варіант макросу

Переконавшись, що числа виглядають правильно, можна видалити перевірочні блоки

Отже, ми впоралися з однією з неприємностей, повязаних із створенням потрібних значень тривалостей Але є ще одна неприємність Це наступний діапазон частот 100 Гц – 1 кГц

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