Мелодия на ардуино без «delay»
- Войдите на сайт для отправки комментариев
Чт, 03/01/2019 - 19:33
Доброго времени суток. Подскажите пожалуйста как можно написать скетч, что бы проигрывалась мелодия при достижении определенного уровня, без DELAY???
#include <hcsr04.h> #define TRIG_PIN 7 #define ECHO_PIN 8 HCSR04 hcsr04(TRIG_PIN, ECHO_PIN, 20, 4000); int level_water; // уровень воды в мм. int stop_level = 35; // уровень при которотом срабатывает звуковой сигнал int volume_now; // переменная текущего уровня жидкости с датчика int volume_ratio = 2; // коэфициент объема жидкости, переводит уровень в объем (мл) int p = 9; const byte COUNT_NOTES = 39; int frequences [COUNT_NOTES] = { 392, 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622, 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392 }; int durations [COUNT_NOTES] = { 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 250, 100, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 750 }; void setup () { pinMode (p, OUTPUT); Serial.begin(9600); } void loop() { hc_sdr (); if (level_water <= stop_level) { sound (); } } void hc_sdr () { // функция замера уровня жидкости level_water = hcsr04.distanceInMillimeters(); volume_now = (level_water_max - level_water) * volume_ratio; Serial.println(level_water); } void sound () { for (int i = 0; i <= COUNT_NOTES; i++) { tone(p, frequences[i], durations[i] * 2); delay (durations[i] * 2); noTone(p); } }
без DELAY???
Других требований нет? Только без delay? Тогда - не вопрос.
Замените строку №48 на такую
и будет много щщастья и никаких делэев.
Не идеально но можно так #142
У меня карочи!
А у меня длинее ;))
Ок). Подскажите пожалуйста тогда, как сделать так, чтобы при проигрывание мелодии не останавливалась работа программы?
Ну это через автоматы Пуха. Но Пух занят, у него облом. :))
Ок). Подскажите пожалуйста тогда, как сделать так, чтобы при проигрывание мелодии не останавливалась работа программы?
"blink без delay"
Ок). Подскажите пожалуйста тогда, как сделать так, чтобы при проигрывание мелодии не останавливалась работа программы?
Шо-то я нипонял. Был вопрос, на него был ответ. Конкретный такой ответ прямо в виде работающего кода. И вот смотрю я в свой стакан, а там пусто - спасибы никакой! Но зато уже второй вопрос поступил. Как-то это направильна! Так нидалжно быть!
А у меня длинее ;))
У моего кота толще.
Ок). Подскажите пожалуйста тогда, как сделать так, чтобы при проигрывание мелодии не останавливалась работа программы?
Я бы сделал на прерывании таймера.
tone() сработает из обработчика?
tone() сработает из обработчика?
Почему нет, если прерывание используется от другого таймера?
Просто интересуюсь. Не пищу ардуиной.
Не пищу ардуиной.
А чем пищите?
А ничем не пищу. Или баззером активным, если просят.
А ничем не пищу. Или баззером активным, если просят.
А к чему тогда был вопрос?
Написал же выше - просто интересуюсь. Вдруг придётся пискнуть.