这是一个非常有趣的问题,在正常的计算机世界中,我们会通过线程来解决这个问题。但是,当您在没有操作系统的情况下运行时,我们必须做两件事之一,实现协程(没有操作系统的假线程)或使用异步代码和中断。
我的理解是,当一个物体第一次进入你的传感器时,你会打印一些东西,因为 arduino uno 而不是由于它不容易实现协同程序,我们将尝试中断路由。
首先,您可能会对这个库感兴趣http://playground.arduino.cc/Code/Timer1
它允许您添加一个中断服务例程以在计时器上运行。为此,请使用库中的 attachInterrupt(function, period) 函数。
在您的中断服务例程中,您将要检查传感器,设置一个变量来说明自上次触发以来的时间,并在适当的情况下打印消息。这意味着您的主循环可以完全自由地运行其他代码,并且不会阻塞您的其他传感器。
例如:
void TimFun()
{
static int LastRead;
if(LastRead && (0 == analogRead(sensor1))
{
Serial.println("SensorTrip");
}
LastRead = analogRead(sensor1);
}
void loop()
{
// Do other stuff here
}
void setup()
{
Timer1.initialize(100000);
Timer1.attachInterrupt(TimFun);
// Rest of setup Here
}