如何在 Arduino 中打破无限
Posted
技术标签:
【中文标题】如何在 Arduino 中打破无限【英文标题】:How to break infinite while in Arduino 【发布时间】:2016-02-11 23:09:27 【问题描述】:A-R-D-U-I-N-O 电路,包括焊盘编号和带有此代码的 LED
char keys[ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
void setup()
pinMode(13,OUTPUT);
Serial.begin(9600);
void loop()
char key = keypad.getKey();
if (key)
Serial.println(key);
switch(key)
case 'A':
while(1)
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
break;
我怎样才能制作另一个案例,例如(case 'D') 来停止这个无限循环?
【问题讨论】:
这是什么语言 你将无法做出这样的事情。以这种方式使用无限循环不应该是一个好主意。尝试另一种控制方式,例如用millis()
测量时间。
【参考方案1】:
您无法退出 while 循环,因此您将继续运行代码
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
为了能够运行案例“D”之类的案例,您将永远不会离开此循环。您需要在 while 循环中放置一个 if 语句,以检查您想要的任何内容。如果是真的那么你应该break;
if (statement) break;
【讨论】:
【参考方案2】:好吧,实际上您不能从外部中断该 while,因为程序只会在 while 循环内运行这些指令。也许你应该使用另一种策略。一种是使用另一个变量来保存选项。 比如:
void loop()
int option = 0;
char key = keypad.getKey();
if (key)
Serial.println(key);
switch(key)
case 'A': option = 1; break;
case 'B': option = 2; break;
if(option == 1)
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
else if(option == 2)
...
【讨论】:
【参考方案3】:看起来您的“switch”案例格式有点错误,我认为他们总是必须有一个默认案例。您的代码似乎也缺少键盘包含/定义。
至于问题可能总是有一个标志,即两个按钮打开/关闭,然后根据该标志闪烁 LED。
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
byte rowPins[ROWS] = 5, 6, 7, 8; //connect to the row pinouts of the keypad
byte colPins[COLS] = A3, A2, A1, A0; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(Keys), rowPins, colPins, ROWS, COLS);
//yes i know that looks horrible
//would always have a different name for the keypad myself
char keys[ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
int flag=0;
void setup()
pinMode(13,OUTPUT);
Serial.begin(9600);
void loop()
char key = keypad.getKey();
if (key)
Serial.println(key);
switch(key)
case 'A':
flag=1;
break;
case 'D':
flag=0;
break;
default:
break
if(flag)
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
唯一的问题是,在闪烁之间延迟时,它不会测试按键,因此要关闭标志,您必须按住“D”超过两秒钟,甚至可以点击它。我已经有一段时间没有使用这些键盘了。
【讨论】:
以上是关于如何在 Arduino 中打破无限的主要内容,如果未能解决你的问题,请参考以下文章