Здравствуйте.
Есть бесконечный цикл такого плана:
Есть необходимость сделать звуковое оповещение об ошибках.
Звуковые оповещения могут быть разными. Они имеют три параметра:
1. Количество сигналов в порции сигналов
2. Длина сигнала (паузы)
3. Интервал между порциями сигнала
Например: 0.7 сек(2) - 3 сигнала(1), интервал 10 сек(3). Это значит, что каждые 10 сек воспроизводятся три сигнала длиной 0.7 сек и паузой в 0.7 сек, пока не исчезнет ошибка.
Мне пока приходит только такая реализация описанная у Гивера в разделе алгоритмы
Проблема в том, что оповещения могут быть разные с разными параметрами и заводить 3 переменных и определять три дефайна для каждого типа оповещений мне не кажется удобным. К тому же для каждого типа оповещений должен быть подобный обработчик в коде.
Быть может есть более лаконичный и удобный способ реализовать данную задумку?
Есть бесконечный цикл такого плана:
Основной цикл:
void loop() {
drawInterface();
readErrors();
readParameters();
}
Звуковые оповещения могут быть разными. Они имеют три параметра:
1. Количество сигналов в порции сигналов
2. Длина сигнала (паузы)
3. Интервал между порциями сигнала
Например: 0.7 сек(2) - 3 сигнала(1), интервал 10 сек(3). Это значит, что каждые 10 сек воспроизводятся три сигнала длиной 0.7 сек и паузой в 0.7 сек, пока не исчезнет ошибка.
Мне пока приходит только такая реализация описанная у Гивера в разделе алгоритмы
C++:
int alarmCounter = 0;
uint32_t alarmTimer = 0;
uint32_t alarmToneTimer = 0;
#define ALARM_PERIOD 10000
#define ALARM_TONE_PERIOD 700
#define ALARM_COUNT 3
#define TONE_PIN 8
void loop() {
if (millis() - alarmTimer >= ALARM_PERIOD) {
if (millis() - alarmToneTimer >= ALARM_TONE_PERIOD) {
alarmToneTimer = millis();
digitalToggle(TONE_PIN);
alarmCounter++;
}
if (alarmCounter == ALARM_COUNT*2)
{
alarmCounter = 0;
alarmTimer = millis();
}
}
}
Быть может есть более лаконичный и удобный способ реализовать данную задумку?