【发布时间】:2019-04-08 04:14:13
【问题描述】:
我试图让 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");
}
}
}
当我运行此代码时,它一次又一次地显示“正确的 ssid 并输入您的密码”。这只是不停。那么,如何让 void 循环在这段代码中只运行一次。谁能帮帮我?
还有一个疑问。 在无效循环行号中。 18,我添加了 2000 毫秒的延迟,因为在不添加延迟的情况下,代码中的下一行即“while(s.available() >0)”不起作用。这个while命令非常快,需要一些延迟才能输入密码“123456789”。我应该怎么做才能让这个while循环在我按下键盘上的一个键之前不会这么快?请帮忙!!
【问题讨论】:
-
在 mainloop 的末尾放置一个无限循环 (while(1);。顺便说一句。如果没有正确的缩进,您的代码很难阅读。
-
这个命令 (while(1); 给出一个错误。
-
如果你希望你的代码被调用一次,创建它的一个函数并在
setup()函数中调用它。并添加无尽的while:syntex是while(1){}。
标签: arduino