У меня установлена Arduino с несколькими датчиками, печатающими на последовательный порт. Изначально у меня был датчик PIR с несколькими встроенными задержками, чтобы он не спамил сообщение об обнаружении движения. Однако функция delay (), конечно же, приостанавливает весь код и мешает другим датчикам.
Что я хочу сделать:
1) Когда датчик движения находится в высоком состоянии в течение x времени, распечатайте ОДНО сообщение на серийный номер.
2) Вставьте здесь короткий промежуток времени, когда он не обнаруживает движения
3) Если датчик движения высокий в течение времени ‹x, он ничего не делает.
Общая идея состоит в том, чтобы использовать программное обеспечение также для минимизации ложных срабатываний. Я пытался использовать функцию millis () для управления им, но без особого успеха. Вероятно, это действительно простое решение, и я его просто не вижу.
void loop() {
// Get value from motion sensor
pirValue = digitalRead(pirPin); //detectedPin
// See if motion Detected
unsigned long currentMillis = millis();
if (pirValue == 1 && (currentMillis - previousMillis >= interval) ){
previousMillis = millis();
// Display Triggered LED for 3 seconds
digitalWrite(detectedLED, HIGH);
motionDetected = 1;
Serial.println("motion detected");
//delay(3000);
} else {
digitalWrite(detectedLED, LOW);
}
Я знаю, что это абсолютно неправильно, так как я думаю, что способ, которым он установлен сейчас, в цикл никогда не войдет. Я пробовал несколько других структур, но не вижу, что мне нужно делать. Это ситуация, когда мне нужно по существу построить конечный автомат? Любая помощь в осмыслении этого будет оценена!