Привет! Четвертый месяц пошел как я втянулся в тему ардуинки, и решил замутить сигналку для элвелика + еще плюшки. В общем я столкнулся с некоторыми проблемами:
Всё работает прекрасно до того момента, как вибраций больше 2 и прошло менее 5 сек.
Нужно что бы после условия запускалась функция Blink, значения с датчика больше не обрабатывались, секундомер был не активен, а флаг "radioFlag" оставался "true".
Помогите пожалуйста грамотно организовать код.
Gyver'у большущее спасибо за огромный вклад
Всё работает прекрасно до того момента, как вибраций больше 2 и прошло менее 5 сек.
Нужно что бы после условия запускалась функция Blink, значения с датчика больше не обрабатывались, секундомер был не активен, а флаг "radioFlag" оставался "true".
Помогите пожалуйста грамотно организовать код.
Функция:
void alarm() {
if (radioFlag == true) {
digitalWrite(GREEN_LED, HIGH);
vibrationDetect = digitalRead(VIB_PIN); // Ззначение с вибродатчика
if (vibrationDetect) {
if (millis() - timer >= 1000) { // Антидребезг вибрации 1 сек
timer = millis();
vibrationDetectCount++; // Счетчик вибраций
Serial.print("Количество вибраций: ");
Serial.println(vibrationDetectCount);
}
}
if (vibrationDetectCount >= 1) { // Если количество вибраций 1, запуск таймера
if (millis() - globaltimer > 1000) {
globaltimer = millis();
SEC = SEC + 1;
if (SEC > 59) {
SEC = 0;
}
digitalWrite(RED_LED, HIGH);
Serial.println(SEC);
}
}
if (SEC >= 10 && vibrationDetectCount <= 1) {
vibrationDetectCount = 0;
SEC = 0;
digitalWrite(RED_LED, LOW);
}
if (vibrationDetectCount >= 2 && SEC <= 5) { // Если вибраций 2 или больше и прошло меньше или равно 5 сек
digitalWrite(RED_LED, HIGH); // Аларм!!!
alarmEnableFlag = true;
gabaritn();
}
} else if (radioFlag == false) {
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
SEC = 0;
vibrationDetect = 0;
vibrationDetectCount = 0;
alarmEnableFlag = false;
}
}
Blink:
void gabaritn() {
static uint32_t tmr;
if (millis() - tmr >= 100) { //СКОРОСТЬ
tmr = millis();
digitalWrite(MOSFET, !digitalRead(MOSFET));
}
}