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);
}我们正在制作一个“高级停车灯”,所以我需要在代码中添加它,这样当按钮在任何时间被按下时,在循环结束时它就会运行代码,我该怎么做呢?
我试过几种方法,但每次都不起作用,有什么简单的解决方案呢?
发布于 2016-03-22 20:55:05
您是否尝试过在按下按钮时设置标志,然后在循环结束时检查标志是否已设置。
当标志被设置时,你知道按钮已经被按下,这样你就可以执行代码了。就像这样。
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
发布于 2016-03-22 21:31:13
如果我理解正确的话,您希望运行整个周期,而不管按钮是否被按下,然后根据按钮在周期中是否被按下来运行(或不运行)特殊代码。
如果是这样,您可以编写一个函数my_delay(毫秒)并在周期内调用它,而不是延迟。在my_delay中,您会有一个循环,如果按钮被按下,直到请求的时间过去,就会重复测试:
static int lpressed = 0 ;
void my_repeat(int msec)
{
long start = millis() ;
for( ; millis()-start < msec; )
{
if (digitalRead(button_pin)==PRESSED)
lpressed = 1 ;
}
}然后,在周期结束时,您只需测试(可能还会重置)变量lpressed并执行相应的操作:
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
}
}https://stackoverflow.com/questions/36154447
复制相似问题