首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使按钮保持变量并在循环结束时运行代码

使按钮保持变量并在循环结束时运行代码
EN

Stack Overflow用户
提问于 2016-03-22 20:30:20
回答 2查看 68关注 0票数 0
代码语言:javascript
复制
  void setup() {

  for (int i = 0; i < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}

void loop() {      
      digitalWrite(1,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(11,HIGH);
      delay(10000);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      delay(2500);
      digitalWrite(1,LOW);
      digitalWrite(2,LOW);
      digitalWrite(3,HIGH);
      digitalWrite(7,LOW);
      digitalWrite(4,HIGH);
      digitalWrite(5,HIGH);
      delay(5000);
      digitalWrite(4,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(11,LOW);
      delay(10000);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      delay(2500);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      delay(5000);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      digitalWrite(10, HIGH);
      delay(2500);
      digitalWrite(10, LOW);
      digitalWrite(11, HIGH);
      digitalWrite(3, LOW);
  }

我们正在制作一个“高级停车灯”,所以我需要在代码中添加它,这样当按钮在任何时间被按下时,在循环结束时它就会运行代码,我该怎么做呢?

我试过几种方法,但每次都不起作用,有什么简单的解决方案呢?

EN

回答 2

Stack Overflow用户

发布于 2016-03-22 20:55:05

您是否尝试过在按下按钮时设置标志,然后在循环结束时检查标志是否已设置。

当标志被设置时,你知道按钮已经被按下,这样你就可以执行代码了。就像这样。

代码语言:javascript
复制
boolean buttonPressed = false;

void setup() {    
  for (int i = 0; i < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}

void loop() {      
      digitalWrite(1,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(11,HIGH);
      delay(10000);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      delay(2500);
      digitalWrite(1,LOW);
      digitalWrite(2,LOW);
      digitalWrite(3,HIGH);
      digitalWrite(7,LOW);
      digitalWrite(4,HIGH);
      digitalWrite(5,HIGH);
      delay(5000);
      digitalWrite(4,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(11,LOW);
      delay(10000);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      delay(2500);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      delay(5000);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      digitalWrite(10, HIGH);
      delay(2500);
      digitalWrite(10, LOW);
      digitalWrite(11, HIGH);
      digitalWrite(3, LOW);
      if(buttonPressed)
      {
           //code goes here
      }
  }

所有你需要添加的就是当你的按钮被按下时,设置buttonPressed = true

票数 0
EN

Stack Overflow用户

发布于 2016-03-22 21:31:13

如果我理解正确的话,您希望运行整个周期,而不管按钮是否被按下,然后根据按钮在周期中是否被按下来运行(或不运行)特殊代码。

如果是这样,您可以编写一个函数my_delay(毫秒)并在周期内调用它,而不是延迟。在my_delay中,您会有一个循环,如果按钮被按下,直到请求的时间过去,就会重复测试:

代码语言:javascript
复制
static int lpressed = 0 ;

void my_repeat(int msec)
{
   long start = millis() ;
   for( ; millis()-start < msec; )
   {
      if (digitalRead(button_pin)==PRESSED)
         lpressed = 1 ;
   }
}

然后,在周期结束时,您只需测试(可能还会重置)变量lpressed并执行相应的操作:

代码语言:javascript
复制
void loop()
{
   // your unconditional code goes here
   if (lpressed)
   {
      lpressed = 0 ; // reset so we can check again in next cycle
      // your conditional code goes here
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36154447

复制
相关文章

相似问题

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