Как сделать переключаемый модуль инфракрасного обнаружения движения?

Я только что получил Arduino и инфракрасный модуль обнаружения движения. Я пытался сделать так, чтобы, если модуль обнаруживал движение, светодиод включался, а если он снова обнаруживал движение, он выключался. Поэтому я написал этот код и попытался найти решения в Интернете, но не смог его найти. Я действительно не знаю, что изменить в своем коде, чтобы он работал. Есть ли у кого-нибудь решения для этого?

(Значение датчика может быть 0 или 1, 0 означает, что ничего не обнаружено, 1 означает, что что-то обнаружено. После обнаружения значение автоматически возвращается к 0 через несколько секунд)

int Sensor = 4;
int led = 13;
bool bool1 = false;

void setup() {
pinMode(Sensor, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}

void loop() {
int SensorValue = digitalRead(Sensor);

if(SensorValue == 1){
  bool1 = !bool1;
  }

if(bool1 == true){
  digitalWrite(led, HIGH);
  }
if(bool1 == false){
  digitalWrite(led, LOW);
  }
}

, 👍1

Обсуждение

что изменить в моем коде, чтобы он работал .... что не так с тем, как код ведет себя сейчас?, @jsotola


1 ответ


2

Рассмотрите возможность использования конечного автомата с 4 состояниями. В настоящее время у вас есть только 2 состояния. Один, где «bool1» имеет значение TRUE, а другой, когда «bool1» имеет значение FALSE. Необходимы 4 состояния:

  1. Когда светодиод ВЫКЛ. PIR НЕ АКТИВЕН.
  2. Когда светодиод ВЫКЛ. PIR АКТИВЕН.
  3. Когда светодиод горит и PIR АКТИВЕН.
  4. Когда светодиод горит, а PIR НЕАКТИВЕН.

Когда вы путешествуете между этими 4 состояниями, вы обнаружите, что вам нужно включать светодиод только при путешествии между состояниями 2 и amp; 3. И вам нужно будет выключать светодиод только при перемещении между состояниями 4 и amp; 1.

,