#arduino
#arduino
Вопрос:
Я пытаюсь заставить цикл void в коде arduino запускаться только один раз. Каков алгоритм или команда для этого? Мой код:
#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 запускаться только один раз в этом коде. Кто-нибудь, пожалуйста, может мне помочь?
Еще одно сомнение. В строке цикла void № 18 я добавил задержку в 2000 мс, потому что без добавления задержки следующая строка в коде, то есть «while(s.available() > 0) «, не работает. Эта команда while выполняется настолько быстро, что требуется некоторая задержка, чтобы я мог ввести пароль «123456789». Что я должен сделать, чтобы этот цикл while не работал так быстро, пока я не нажму клавишу со своей клавиатуры? Пожалуйста, помогите!!
Комментарии:
1. поместите endlessloop (while(1); в конце вашего основного цикла. кстати. ваш код трудно читать без правильного отступа.
2. эта команда (while(1); выдает ошибку.
3. Если вы хотите, чтобы ваш код вызывался один раз, создайте из него функцию и вызовите ее в
setup()
функции. И добавить бесконечный while: syntex являетсяwhile(1){}
.
Ответ №1:
Поместите бесконечный цикл в конец основного цикла
....
}else {
Serial.print("Wrong ssid");
}
while(1) //endless loop
{
}
}
Комментарии:
1. почему задержка в цикле while?
2. Большое тебе спасибо @Mike
3. У меня есть еще одно сомнение, можете ли вы помочь?
4. В строке цикла void № 18 я добавил задержку в 2000 мс, потому что без добавления задержки следующая строка в коде, то есть «while(s.available() > 0) «, не работает. Эта команда while выполняется настолько быстро, что требуется некоторая задержка, чтобы я мог ввести пароль «123456789». Что я должен сделать, чтобы этот цикл while не работал так быстро, пока я не нажму клавишу со своей клавиатуры?
5. Я думаю, это новый вопрос.
Ответ №2:
Если вы хотите выполнить свой код только один раз в Arduino.
- Создайте отдельную функцию для подключения устройства к WiFi.
- Вызовите эту функцию из метода setup. Таким образом, ваша функция не вызывается повторно.
#include <ESP8266WiFi.h>
void setup()
{
Serial.begin(115200);
Serial.println();
// For first time connection with WiFi
ConnectWiFi();
}
void ConnectWiFi()
{
WiFi.begin("network-name", "pass-to-network");
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// if wifi disable inbetween and need to connect again
if(WiFi.status() != WL_CONNECTED)
{
ConnectWiFi();
}
}
Комментарии:
1. почему вы подключаетесь к wifi, если статус подключен? Я думаю, вам не хватает отрицания здесь
2. Спасибо за ваш отзыв, я обновил блок кода