首页 文章

切换后的LED和MotorFan State在延迟后无法切换回来

提问于
浏览
0

functionality:

用户接近连接到Arduino Uno的超声波/红外线传感器,如果接近距离小于20cm,超声波/红外线传感器的triggerPin将从LOW切换到HIGH - >'0'列表将切换到'1'的列表 .

当超声波/红外线传感器从“0”切换到“1”时,状态LED和状态MotorFan将从LOW切换到HIGH . 只要来自超声波传感器的返回数据为“1”,两种状态都将保持不变 .

当用户离开超声波/红外线传感器的附近时,超声波/红外线传感器的triggerPin将从HIGH切换到LOW - >'1'的列表将切换到'0'的列表 .

但是,此时,状态LED和状态MotorFan将保持高电平状态10秒,然后切换到状态LOW . 在这种情况下,另一个用户接近接近传感器并且超声波/红外传感器在10秒的延迟内切换回“1”,状态LED和状态MotorFan应保持在HIGH状态而不切换 .

因此,正确的流程如下:

超声波/红外线传感器返回'0' - >但当感应用户在(距离<20)内超声/红外传感器在超声波/红外线传感器切换到'1时切换到'1',MotorFan状态和LED状态将切换从LOW超声波/红外线变为高电流传感器在感应到接近时返回'1'>但当感测用户更多(距离> 20)超声波/红外线传感器切换到'0'时,此时,MotorFan状态和LED状态将在切换到LOW之前保持高电平状态10秒 . 条件:当另一个用户在10秒延迟之前接近时,MotorFan状态和LED状态将保持在HIGH状态 .

What I have done:

我已为以下可修改分配了以下数字引脚:

超声波传感器的trigPin是数字引脚8超声波传感器的echoPin数字引脚9电机风扇的扇形数字引脚5 LED分配给继电器4 .

其次,我试图利用millis()来获取时间,如果它应该超过10000的限制,它将从HIGH状态数字写入LOW状态 .

Code: const int trigPin = 8; const int echoPin = 9; //电机风扇连接到arduino引脚号const int FanPin = 5;字节中继= 4;

long duration;
int distance;
unsigned long Timer;
unsigned long Interval = 10000; //teh repeat Interval

void setup() {
  Timer = millis();
  pinMode(FanPin, OUTPUT); // Set pinMode for FanPin as OUTPUT, display  
  pinMode(trigPin, OUTPUT);
  pinMode(relay, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600); // Open serial port to communicate with the Ultrasaonic Sensor
}

void loop() {

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distance = duration * 0.034 / 2;

  if (distance < 20) {
    // Write a pin of HIGH
    Serial.println("1");
    //Set motor-fan to operate
    digitalWrite(FanPin, HIGH);
    digitalWrite(relay, HIGH);
  } else {

    Serial.println("0");
    //Check if Timer is longer than 10s

    if ((millis() - Timer) > Interval) {
      digitalWrite(FanPin, LOW);
      digitalWrite(relay, LOW);
    }

  }
  delay(100);
}

Issue:

传感器能够在感应接近时从“0”切换到“1”,其次,它还能够将LED状态和motorFan状态从LOW切换为HIGH .

但是,当Arduino传感器从HIGH切换到LOW而不等待10s延迟时,LED状态和motorFan都会切换回LOW .

我想请求一些帮助,因为我完全坚持这个问题 .

谢谢

1 回答

  • 0

    setup() 函数中为 Timer 赋值,这意味着在系统启动时只执行一次 . 我会将 Timer = millis(); 移至 if (distance < 20) { 条件 . 然后,如果用户在感应距离时移出,则您的时间已经为"last contact" .

    记住:如果你想在启动时执行某些操作 - 请将其放在 setup() 中 . 如果你想要重复执行某些东西 - 把它放在 loop() 中 .

相关问题