首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serial.print只有一次Arduino

Serial.print只有一次Arduino
EN

Stack Overflow用户
提问于 2014-04-30 12:15:55
回答 3查看 7.2K关注 0票数 1

我有一个光传感器,它将输入的值打印到串行监视器。这几乎是一条跳线,但当一个物体挡住它的路时,它每1毫秒就打印一次这个值。如果我加一个延迟,它将不会触发第二个传感器,直到延迟完成。我如何才能使它只打印一次,而不受任何干扰或干扰其他传感器?

代码语言:javascript
复制
void loop() {
  if (analogRead(sensor1) == 0) {     
    timer.start ();
    tStop = false;
    //Serial.println (timer.elapsed());
    Serial.println ("Start Time = 0");
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-01 10:39:04

我设法在void设置之前创建了一个int,然后使用了while循环。在if语句中。

代码语言:javascript
复制
int i = 1;

代码语言:javascript
复制
if (analogRead(sensor1) == 0) {     
  timer.start ();
  tStop = false;

while (i == 1) {
  Serial.println ("Start Time = 0");
  i++;
 }    
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-30 13:51:48

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

我的理解是,当一个物体第一次进入你的传感器时,你会打印一些东西,因为arduino uno (相对于原来的)并不容易实现coroutines,我们将尝试中断路由。

首先,您可能对这个库http://playground.arduino.cc/Code/Timer1感兴趣,它允许您添加一个中断服务例程,以便在计时器上运行。为此,请使用库中的attachInterrupt(function )函数。

在您的中断服务例程中,您需要检查传感器,设置一个变量,说明上次触发它是多久以前,并在适当的情况下打印消息。这意味着主循环完全可以自由运行其他代码,不会阻塞其他传感器。

例如:

代码语言:javascript
复制
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
}
票数 1
EN

Stack Overflow用户

发布于 2014-05-01 18:59:26

您可能应该使用if,而不是只执行一次以上的while循环。

代码语言:javascript
复制
bool tripped = false;

void setup(){
    //setup stuff here
}

void loop() {
    if ( analogRead(sensor1) == 0 ) 
    {     
        timer.start ();
        tStop = false;

        if ( tripped == false ) 
        {
            Serial.println ("Start Time = 0");
            tripped = true;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23387848

复制
相关文章

相似问题

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