У меня настроен Arduino с печатью нескольких датчиков на последовательный порт. Первоначально у меня был встроен ИК-датчик с несколькими встроенными задержками, чтобы он не спамил сообщение об обнаружении движения. Однако функция delay (), конечно, приостанавливает весь код и мешает работе других датчиков.
Что я хочу сделать:
1) Когда датчик движения имеет высокий уровень для x количество времени, распечатайте ОДИН сообщение на серийный номер
2) Укажите здесь короткий промежуток времени, когда он не обнаруживает движение
3) Если датчик движения высок в течение времени
Общая идея заключается в том, чтобы использовать программное обеспечение для минимизации ложных срабатываний. Я пытался использовать функцию 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);
}
Я знаю, что это абсолютно неправильно, так как я думаю, что способ, установленный сейчас l oop, никогда не будет введен. Я пробовал несколько других структур, но я не вижу, что мне нужно делать. Это ситуация, в которой мне нужно по сути построить конечный автомат? Любая помощь, продумавшая это, будет оценена!