Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
While loop 如何在Arduino中打破无限_While Loop_Arduino_Break_Infinite - Fatal编程技术网

While loop 如何在Arduino中打破无限

While loop 如何在Arduino中打破无限,while-loop,arduino,break,infinite,While Loop,Arduino,Break,Infinite,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.ge

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(例如(case'D')来停止这个无限while循环?

您不能退出while循环,因此您将继续运行代码

digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
为了能够运行案例(如案例“D”),您永远不会离开此循环。您需要在while循环中放入if语句,以检查您希望为真的内容。如果这是真的,那么你应该
break

if (statement) break;

您不能退出while循环,因此将继续运行代码

digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
为了能够运行案例(如案例“D”),您永远不会离开此循环。您需要在while循环中放入if语句,以检查您希望为真的内容。如果这是真的,那么你应该
break

if (statement) break;

实际上,你不能从外部中断它,因为程序只能在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)
{...}
}

实际上,你不能从外部中断它,因为程序只能在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)
{...}
}
看起来你的“开关”案例有点不正常,我以为他们总是有一个默认案例。您的代码似乎也缺少键盘包含/定义

至于问题,可能总是有一个标志,即两个按钮打开/关闭,然后根据该标志闪烁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);
  }
}
#包括
常量字节行=4;
常量字节COLS=4;
字节rowPins[行]={5,6,7,8}//连接至键盘的世界其他地区引脚
字节colPins[COLS]={A3,A2,A1,A0}//连接至小键盘的列引脚
小键盘=小键盘(makeyMap(键)、行PIN、列PIN、行、列);
//是的,我知道那看起来很可怕
//我自己的键盘总是有一个不同的名字
字符键[行][列]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*'、'0'、'#'、'D'}
};
int标志=0;
无效设置(){
pinMode(13,输出);
Serial.begin(9600);
}
void循环(){
char key=keypad.getKey();
如果(关键){
Serial.println(key);
开关(钥匙){
案例“A”:
flag=1;
打破
案例“D”:
flag=0;
打破
违约:
打破
}
}
国际单项体育联合会(旗){
数字写入(13,高);
延迟(1000);
数字写入(13,低);
延迟(1000);
}
}
唯一的问题是,当在闪烁之间延迟时,它不会测试按键,所以要关闭标志,你必须按住“d”两秒钟以上,甚至可能点击它。我已经有一段时间没有使用这些键盘了。

看起来你的“开关”外壳有点不正常,我想它们总是有一个默认的外壳。您的代码似乎也缺少键盘包含/定义

至于问题,可能总是有一个标志,即两个按钮打开/关闭,然后根据该标志闪烁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);
  }
}
#包括
常量字节行=4;
常量字节COLS=4;
字节rowPins[行]={5,6,7,8}//连接至键盘的世界其他地区引脚
字节colPins[COLS]={A3,A2,A1,A0}//连接至小键盘的列引脚
小键盘=小键盘(makeyMap(键)、行PIN、列PIN、行、列);
//是的,我知道那看起来很可怕
//我自己的键盘总是有一个不同的名字
字符键[行][列]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*'、'0'、'#'、'D'}
};
int标志=0;
无效设置(){
pinMode(13,输出);
Serial.begin(9600);
}
void循环(){
char key=keypad.getKey();
如果(关键){
Serial.println(key);
开关(钥匙){
案例“A”:
flag=1;
打破
案例“D”:
flag=0;
打破
违约:
打破
}
}
国际单项体育联合会(旗){
数字写入(13,高);
延迟(1000);
数字写入(13,低);
延迟(1000);
}
}

唯一的问题是,当在闪烁之间延迟时,它不会测试按键,所以要关闭标志,你必须按住“d”两秒钟以上,甚至可能点击它。我已经有一段时间没有用过那种键盘了。

这是什么语言?你不会做这种事情的。以这种方式使用无限循环应该不是一个好主意。试着用另一种方法来控制,例如,用
millis()
来测量时间。这是什么语言?你不能做这样的事情。以这种方式使用无限循环应该不是一个好主意。尝试另一种控制方法,例如,使用
millis()
测量时间。