0

我有一个通过 RS-232 命令控制我的投影仪的项目,投影仪向 arduino 发送反馈。因此,我有一个带按钮的 LCD 屏幕。为了让它更好,我有一个我想使用的超声波测距仪,这样当你靠近设备时,LCD 背光会打开 30 秒,然后再关闭。我不能使用延迟,因为我需要继续从投影仪轮询按钮和串行信息。

有像 Timer.h 和 SimpleTimer.h 这样的社区库,但它们只做振荡等。

我想做的是:

distance = measureUltrasonicDistance(ultrasonicPin); //returns in cm
if (distance <= 10) {
    //digitalWrite(baclkightPin,HIGH);
    //have this turn off 30 seconds later
}
4

2 回答 2

1

这似乎是事件熔断库的典型应用。

于 2013-10-05T15:48:47.587 回答
1

首先要意识到 loop() 是不断调用的,并且您可以使用“看门狗”模式来保持灯亮,而无需使用计时器。

unsigned long timeoff;

void setup() {

   timeoff = millis();

}

void loop() {

   distance = measureUltrasonicDistance(ultrasonicPin); //returns in cm
   if (distance <= 10) {
       digitalWrite(baclkightPin,HIGH);

       // compute boundary of when light should be off
       timeoff = millis() + 30L*1000L;   
   }

   if (timeoff < millis()) {

      digitalWrite(backlightPin, LOW);

   }

}

希望这会有所帮助,如果有任何问题,请告诉我。

于 2013-10-05T03:01:34.167 回答