Продолжить воспроизведение звука во время процедуры прерывания
Я пытаюсь воспроизвести тон (на Arduino Mega через библиотеку тонов) и сделать так, чтобы тон не прерывался, если во время воспроизведения тона вызывается процедура прерывания. Я не уверен, что это возможно. Блок кода ниже. Соответствующая функциональность:
-A цикл while выполняется бесконечно, пока не будет нажата кнопка S1. Нажатие кнопки S1 запускает процедуру обработки прерывания, в которой для параметра interruptFlag_s1 установлено значение 1.
-Это запускает воспроизведение звукового сигнала в течение 300 мс.
-Возможно, что в течение 300 мс будет вызвано прерывание по нажатию другой кнопки. Это прерывает звуковой сигнал примерно на 0,5 мс, что достаточно, чтобы сделать заметный перерыв в тональном сигнале, которого я хотел бы избежать.
-В идеале звуковой сигнал не прерывается процедурой прерывания.
while (restart == 0) {
if (interruptFlag_s1 == 1 || interruptFlag_s2 == 1) {
if (interruptFlag_s1 == 1) {
primary_sensor = 1;
interruptFlag_s1 = 0;
rBot = false;
gBot = true;
bBot = false;
} else if (interruptFlag_s2 == 1) {
primary_sensor = 2;
interruptFlag_s2 = 0;
rBot = false;
gBot = false;
bBot = true;
}
interruptFlag_rtc = 0;
finish_id = 0;
button_flag = 0;
time_diff = 0.00;
alt_finish_time = 0.00;
tone(speakerPin, 3000, 300); // Start tone
restart = 1;
}
}
@Jordan, 👍0
Обсуждение1 ответ
Звук сам генерируется процедурой прерывания. Поскольку одновременно может выполняться только одна процедура прерывания, если ваша собственная процедура прерывания занимает слишком много времени, вы получите прерывание звука.
Вы ничего не можете с этим поделать, кроме как сделать программу прерывания достаточно короткой, чтобы она не прерывала звук.
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Прерывания не должны влиять на
tone()
, если только ISR не занимает слишком много времени для выполнения. Держите свой ISR коротким, и все должно быть хорошо., @Edgar BonetВы пробовали это и столкнулись с разрывом?, @the busybee