gpt4 book ai didi

c - Serial.print 只打印一次 Arduino

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:07 25 4
gpt4 key购买 nike

我有一个光传感器,可以将其输入值打印到串行监视器。它几乎是一根绊线,但当有物体挡住它时,它会每 1 毫秒打印一次值。如果我添加延迟,它不会触发第二个传感器,直到延迟完成。我怎样才能让它只打印一次,而不会干扰或干扰其他传感器?

void loop() {
if (analogRead(sensor1) == 0) {
timer.start ();
tStop = false;
//Serial.println (timer.elapsed());
Serial.println ("Start Time = 0");
}

最佳答案

这是一个非常有趣的问题,在正常的计算机世界中,我们会通过线程来解决这个问题。然而,当您在没有操作系统的情况下运行时,我们必须做以下两件事之一,实现协程(没有操作系统的假线程)或使用异步代码和中断。

我的理解是当一个物体第一次进入你的传感器时你会打印一些东西,因为 arduino uno 与 due 相比不容易实现协程,我们将尝试中断路由。

首先你可能会对这个图书馆感兴趣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
}

关于c - Serial.print 只打印一次 Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23387848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com