Как добавить доходность перед else if?
Итак, я запускаю свой проект на NodeMCU, но я не знаю, как добавить доходность перед else if. Это даст мне такую ошибку:
Arduino:1.8.12 (Windows 10), 開發板:"NodeMCU 1.0 (модуль ESP-12E), 80 МГц, Flash, Legacy (новый может возвращать nullptr), все шифры SSL (наиболее совместимые), 4 МБ (FS :2MB OTA:~1019KB), 2, v2 Меньшая память, отключено, нет, настройки Sketch + WiFi, 115200"
G:\資優班\科展\程式碼\Front_End\Main_Code_V5\Main_Server\Main_Server.ino: В функции 'void loop()':
Main_Server:84:5: ошибка: "иначе" без предыдущего "если"
статус выхода 1 'иначе' без предшествующего 'если'
В этом отчете будет больше информации с "Показать подробный вывод во время компиляции" опция включена в Файл -> Настройки.
Вот код:
#include <SPI.h>
#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 2
#define led LED_BUILTIN
WiFiServer server(80);
WiFiClient serverClients[MAX_SRV_CLIENTS];
IPAddress ip(10, 241, 241, 27);
IPAddress mask(255, 255, 255, 0);
IPAddress gateway(10, 241, 241, 254);
char ssid[] = "AP";
char pass[] = "Science_Fair";
void setup() {
Serial.begin(9600);
WiFi.config(ip, gateway, mask);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
yield();
}
server.begin();
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
uint8_t i;
Serial.setTimeout(10);
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
Serial.println("Pre 1");
if (server.hasClient()) {
Serial.println("Pre 2");
if (!serverClients[i] || !serverClients[i].connected()) {
Serial.println("Pre 3");
if (serverClients[i]) {
Serial.println("Pre 4");
serverClients[i].stop();
Serial.println("Pre 5");
}
Serial.println("Pre 6");
serverClients[i] = server.available();
Serial.println("Pre 7");
serverClients[i].setTimeout(10);
Serial.println("Pre 8");
Serial.print("New client: ");
Serial.println("Pre 9");
Serial.println(i);
Serial.println("Pre 10");
break;
}
}
yield();
}
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
String fromClient = serverClients[i].readStringUntil('e');
Serial.println("P1");
yield();
if (fromClient == "LR") {
Serial.println("LR");
String reply = Serial.readStringUntil('e');
Serial.println("P2");
yield();
if (reply == "Warn_B") {
yield();
Serial.println("Confirm");
Serial.println("P3");
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
serverClients[i].print("Warn_B");
Serial.println("P4");
yield();
}
}
}
yield(); // это выход, который мне нужно добавить
else if (fromClient == "RR") {
Serial.println("RR");
Serial.println("P5");
String reply = Serial.readStringUntil('e');
Serial.println("P6");
yield();
if (reply == "Warn_A") {
Serial.println("P7");
Serial.println("Confirm");
}
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
serverClients[i].print("Warn_A");
Serial.println("P8");
yield();
}
}
yield();
}
}
Мне нужен yield()
, но я не знаю, как сделать так, чтобы он выполнял else if. Пожалуйста, помогите мне, ребята, спасибо!
@Sax Ted, 👍0
Обсуждение1 ответ
Лучший ответ:
Прежде всего сделайте себе одолжение и прислушайтесь к своей IDE
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
и в случае если еще нет промежуточного варианта, так что либо пусть он работает как конечный автомат, особенно в вашем случае A != B != C != другое:
void subfunction(){
if(A){
// код для запуска
return;
}
yield();
if(B){
// код для запуска
return;
}
yield();
if(C){
// код для запуска
return;
}
else{} // поймать, если не A или B или C
yield();
}
или реализовать случай переключения (псевдокод)
switch(fromClient){
case "LR":
//код для запуска
yield();
break;
case "RR":
//код для запуска
yield();
break;
default:
//код для запуска
yield();
break;
}
Цепочки Id else подвержены ошибкам, так как в вашем случае это A != B != C != other
Спасибо! Но опять же я дома, я проверю это tmr в своей лаборатории, еще раз спасибо!, @Sax Ted
почему бы не yield() после переключения?, @Juraj
Я просто скопировал его "юзкейс" но вы правы он мог сделать это даже до кейсов и в кейсе (зависит от его WD таймера, @Codebreaker007
- Как запрограммировать Esp8266 удаленно через Wi-Fi?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Не удалось загрузить код в NodeMCU
- Как запрограммировать nodeMCU через OTA с помощью GPRS?
- Отдельный ATmega 2560 - включение одного светодиода - устранение неполадок
- Как отправить пакет данных UDP между двумя точками доступа?
- Запрограммировать сразу несколько ардуино
- Не удается загрузить скетчи или прошить Nodemcu 1.0 12E (CP2102), но у него есть драйверы и он реагирует на RST на последовательном мониторе
Как вы думаете, зачем вам нужна доходность там?, @Majenko
@Majenko Мм, потому что я использую свой NodeMCU, и у меня есть сторожевой таймер, я думаю, проблема в том, что он всегда выдает мне кучу ошибок, таких как
feefeffe
, @Sax TedДа, но почему там? Почему *между* двумя кусками кода, которые являются "или / или"? Если первый побежал, то второй нет. Если второй побежал, то первого не будет. В этом сценарии нет «между»., @Majenko
yield()
передif
- этоyield()
передelse
, @Juraj