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
如何阻止arduino中的无效循环?_Arduino - Fatal编程技术网

如何阻止arduino中的无效循环?

如何阻止arduino中的无效循环?,arduino,Arduino,我试图使arduino代码中的void循环只运行一次。此操作的算法或命令是什么? 我的代码是: #include <String.h> #include <SoftwareSerial.h> #include <ESP8266WiFi.h> SoftwareSerial s(D6,D5); // (Rx, Tx) String saavi="ABCD"; String saavi1="123456789"; String shab; String arr[4]

我试图使arduino代码中的void循环只运行一次。此操作的算法或命令是什么? 我的代码是:

#include <String.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
SoftwareSerial s(D6,D5); // (Rx, Tx)
String saavi="ABCD";
String saavi1="123456789";
String shab;
String arr[4];
int a=0;
String arr1[10];
const char* shab1="";
const char* shab3="";
String shab2;
std::string str;
int i,j,k,x;
bool check=true;
void setup() {
 s.begin(9600);
 Serial.begin(9600);
 Serial.print("enter ssid: ");
}
void loop() {
    s.write("s");
    while(s.available() >0) {
    char data=s.read();
    shab += data;
    Serial.print(data);
   }
    if(shab.length()==4) {
    for(i=0;i<shab.length();i++)
    {
      arr[i]=shab.substring(i);
    }
     shab1 = arr[0].c_str();
     //Serial.println(shab1);
      if(arr[0] == saavi)
    { Serial.println();
      Serial.println("correct ssid");
      Serial.println("Enter ur password");
      delay(2000);
      s.write("s");
    while(s.available() >0) {
    char data1=s.read();
    shab2 += data1;
    Serial.print(data1);
    if(shab2.length()==9) {
    for(k=0;k<shab2.length();k++)
    {
      arr1[k]=shab2.substring(k);
    }
    shab3 = arr1[0].c_str();
    //Serial.println(shab3);
    if(arr1[0] == saavi1)
    {
      Serial.println();
    Serial.println("correct password");
    delay(3000);
    Serial.println("Connecting to wifi: ");
    delay(2000);
    Serial.println(shab1);
    Serial.flush();
    WiFi.begin(shab1,shab3);
     while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
    Serial.println(" IP address: ");
    Serial.print(WiFi.localIP());
    delay(2000);
    break;
    }
    else
    {
    Serial.print("wrong password");
    }
    } 
    }
    }else {
      Serial.print("Wrong ssid");
     }  
 }

}
#包括
#包括
#包括
串行软件(D6,D5);//(接收、发送)
字符串saavi=“ABCD”;
字符串saavi1=“123456789”;
弦柄;
字符串arr[4];
int a=0;
字符串arr1[10];
const char*shab1=“”;
const char*shab3=“”;
字符串2;
std::字符串str;
int i,j,k,x;
布尔检查=真;
无效设置(){
s、 开始(9600);
Serial.begin(9600);
Serial.print(“输入ssid:”);
}
void循环(){
s、 写下(“s”);
而(s.available()>0){
char data=s.read();
shab+=数据;
串行打印(数据);
}
如果(shab.length()=4){
对于(i=0;i0){
char data1=s.read();
shab2+=data1;
串行打印(数据1);
if(shab2.length()==9){

对于(k=0;k在主循环的末尾放置一个无止境的循环

    ....
    }else {
        Serial.print("Wrong ssid");
    } 
    while(1)                     //endless loop
    {
    }
}

在主循环的末尾放一个无止境的循环

    ....
    }else {
        Serial.print("Wrong ssid");
    } 
    while(1)                     //endless loop
    {
    }
}

如果只想在Arduino中执行一次代码

  • 创建一个单独的功能,用于将设备与WiFi连接
  • 从setup方法调用该函数。这样,函数就不会重复调用
#包括
无效设置()
{
序列号开始(115200);
Serial.println();
//首次使用WiFi连接
连接WiFi();
}
void ConnectWiFi()
{
WiFi.begin(“网络名称”、“传递到网络”);
串行打印(“连接”);
while(WiFi.status()!=WL_已连接)
{
延迟(500);
连续打印(“.”);
}
Serial.println();
串行打印(“已连接,IP地址:”);
Serial.println(WiFi.localIP());
}
void循环(){
//如果wifi禁用中间连接,需要重新连接
如果(WiFi.status()!=WL_已连接)
{
连接WiFi();
}
}

如果您只想在Arduino中执行一次代码

  • 创建一个单独的功能,用于将设备与WiFi连接
  • 从setup方法调用该函数。这样,函数就不会重复调用
#包括
无效设置()
{
序列号开始(115200);
Serial.println();
//首次使用WiFi连接
连接WiFi();
}
void ConnectWiFi()
{
WiFi.begin(“网络名称”、“传递到网络”);
串行打印(“连接”);
while(WiFi.status()!=WL_已连接)
{
延迟(500);
连续打印(“.”);
}
Serial.println();
串行打印(“已连接,IP地址:”);
Serial.println(WiFi.localIP());
}
void循环(){
//如果wifi禁用中间连接,需要重新连接
如果(WiFi.status()!=WL_已连接)
{
连接WiFi();
}
}

在主循环的末尾放一个endlessloop(while(1))。顺便说一句,如果没有正确的缩进,你的代码很难读取。这个命令(while(1)),给出一个错误。如果你想让代码被调用一次,请创建一个函数,并在
setup()
函数中调用它。要添加无尽的while:syntex是
while(1){}
。在主循环的末尾放一个endlessloop(while(1))。顺便说一句,如果没有正确的缩进,你的代码很难读取。这个命令(while(1)),给出一个错误。如果你想让代码被调用一次,请创建一个函数并在
setup()
函数中调用它。要添加无尽的while:syntex是
while(1){}
。如果状态已连接,您为什么要连接到wifi?我认为您在此处缺少否定感谢您的反馈,我已更新代码块如果状态已连接,您为什么要连接到wifi?我认为您在此处缺少否定感谢您的反馈,我已更新代码块为什么while循环中出现延迟?非常感谢@MikeI还有一个疑问,您是否可以提供帮助?在void循环第18行中,我添加了2000ms的延迟,因为在不添加延迟的情况下,代码中的下一行,即“while(s.available()>0)”不起作用。这个while命令非常快,需要一些延迟,以便我可以输入密码“123456789”。我应该怎么做才能让这个while循环在我按下键盘上的一个键之前不会这么快工作?我想这是一个新问题。while循环中为什么会出现延迟?非常感谢@MikeI。如果你能帮忙,我还有一个疑问吗?在void循环第18行中,我添加了2000毫秒的延迟,因为在没有添加延迟的情况下,代码中的下一行就是“while”(s.available()>0)“不起作用。这个while命令很快,需要一些延迟,以便我可以输入密码“123456789”。我应该怎么做才能使这个while循环在我的键盘上按下一个键之前不起作用?我想这是一个新问题。