Каталог
|
Як же без delay()?2023-02-13 Все статьи →Інколи хочеться додати до пристрою на Ардуїно якусь озвучку, але є побоювання, що звук буде "тормозити" роботу програми. Так зазвичай буває, якщо використовувати функцію delay(), яка "заморожує" роботу програми. Готових рішень я не знайшов, довелося написати самому. Я не програміст, отже не впевнений, що все оптимально, але працює, отже: Пропоную скетч для програвання мелодії у фоновому режимі з використанням millis() і tone(). Скетч не використовує delay() та не створює затримок при роботі. На початку скетчу дефайни нот, це не що інше, як присутній в "павутині" заголовковий файл pitches.h Ця таблиця нот була написана Бреттом Хангманом (Brett Hagman), на працях яких і була заснована робота функції tone() Його допустимо використати, як дефайни на початку скетчу, або як файл в папці зі скетчем, тоді в скетчі треба посилання #include "pitches.h" Далі присутня пара одновимірних масивів - один для нот note[], інший для їх тривалості dur[], дуже бажано, щоб кількість елементів масивів була однаковою (жарт), А от щоб не було жартів, є процедура перевірки співпадіння з виводом результатів в послідовний порт. Далі необхідні змінні:
Функція, що забезпечує відтворення мелодії void music(), її ім'я необхідно помістити в loop() ось так: music (); Більше пояснень в скетчі. P.S. Створено на основі мелодії Telex 2023 м. Кременчук.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Кирилл
16.05.2023 16:39:42
Статья неинтересна - очень много информации выложено в Интернете о том, что описано здесь.
Богдан
28.02.2023 00:10:31
Якщо перевести на micropython то delay() це time.sleep() а millis() це time.tick_ms(), а далі схема подібна
Олександр
24.02.2023 10:59:28
Чудова стаття!
|