首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换LED和MotorFan状态无法在延迟后切换回

切换LED和MotorFan状态无法在延迟后切换回
EN

Stack Overflow用户
提问于 2016-09-20 04:59:23
回答 1查看 138关注 0票数 0

functionality:

用户接近连接到Arduino Uno的超声波/红外线传感器,如果接近距离小于20厘米,超声波/红外线传感器的triggerPin将从低到高切换到'0's的->列表中。

当超声波/红外线传感器从'0‘切换到'1’时,状态发光二极管和状态MotorFan将从低切换到高。只要超声波传感器返回的数据为“1”,这两种状态都将保持不变。

当用户离开超声波/红外线传感器的近距离时,超声波/红外线传感器的triggerPin将从高到低的->列表‘1’将切换到'0's列表。

然而,在这一点上,状态发光二极管和状态MotorFan将保持在状态高10s,然后切换到州低点。在这种情况下,另一个用户接近接近传感器,超声波/红外线传感器切换回'1‘在延迟的10s,状态发光二极管和状态MotorFan应该保持在状态高不切换。

因此,正确的流程如下:

超声波/红外线传感器返回'0's ->,但当感知用户距离< 20)超声波/红外线传感器切换到'1's时,MotorFan状态和LED状态将从低超声波/红外线传感器切换到'1's,当感知到近邻时,MotorFan状态和LED状态将恢复'1's,但当感知用户超过(距离> 20)超声波/红外线传感器切换到'0's时,MotorFan状态和LED状态在切换到低端之前将保持在10 s的高位。条件:当另一个用户在10s延迟之前接近时,MotorFan状态和LED状态将保持在较高的状态。

我所做的:

我已为下列可供选择的电子引脚指定下列数字引脚:

超声波传感器的trigPin为数字针,超声波传感器的echoPin为数字针,电机风扇的FanPin为数字针,5 FanPin为继电器。

其次,我尝试使用millis()来获得时间,如果它超过10000的极限,它将digitalWrite从高到低。

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

代码语言:javascript
复制
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);
}

发行:

传感器能够切换从'0‘到'1’当感觉接近,其次,它也能够切换到从低到高的发光二极管状态和motorFan状态。

然而,当Arduino传感器从高到低切换时,LED状态和motorFan切换回低位,而无需等待10s的延迟。

我想在这方面寻求一些帮助,因为我在这个问题上完全被困住了。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 07:12:24

Timer函数中为setup()分配一个值,这意味着在系统启动时只执行一次。我会把Timer = millis();移到if (distance < 20) {条件下。然后,如果用户移动如果感知距离,你将有一个时间“最后接触”。

记住:如果你只想在启动时执行某件事情--把它放在setup()中。如果您希望重复执行某项操作--将其放入loop()中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39585982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档