Отображается ошибка, так как sendCommand не был объявлен в этой области. как это исправить
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,8,6,5,4,3);
#include <SoftwareSerial.h>
#define RX 9
#define TX 10
//КОД ESP8266
String AP = "OPPO F11 PRO"; // ИМЯ AP
String PASS = "bhargav123"; // ПАРОЛЬ АП
String API = "DWX3OYUU26GI5IJ7"; // Запись ключа API
String HOST = "api.thingspeak.com";
String PORT = "80";
int countTrueCommand;
int countTimeCommand;
boolean found = false;
int valSensor = 1;
SoftwareSerial esp8266(RX,TX);
void setup() {
// поместите сюда код установки для однократного запуска:
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Cable");
delay(1000);
lcd.setCursor(0,1);
lcd.print("Fault Detection");
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A3,INPUT);
pinMode(A4,INPUT);
pinMode(A5,INPUT);
//КОД ESP8266
esp8266.begin(115200);
sendCommand("AT",5,"OK");
sendCommand("AT+CWMODE=1",5,"OK");
sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
}
void loop() {
//КОД ESP8266
String getData = "GET /update?api_key="+ API +"&field1="+Insulation();
sendCommand("AT+CIPMUX=1",5,"OK");
sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK");
sendCommand("AT+CIPSEND=0," +String(getData.length()+4),4,">");
esp8266.println(getData);delay(1500);countTrueCommand++;
sendCommand("AT+CIPCLOSE=0",5,"OK");
String Insulation1(){
if(value>=500 && value1<=700)
int xoutput=0;
else
xoutput=1;
return String(xoutput);
}
int value1=analogRead(A0);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
Serial.println("value1");
Serial.println(value1);
if(value1>=500 && value1<=700)
{
Serial.println("Insulation at 1KM is good");
lcd.print("Insul good 1KM");
delay(3000);
lcd.clear();
}
else
{
Serial.println("Insulation at 1KM got damaged");
lcd.print("Insul damage 1KM");
delay(3000);
lcd.clear();
}
int value2=analogRead(A1);
Serial.println("value2 ");
Serial.print(value2);
delay(1000);
if(value2>=500 && value2<=700)
{
Serial.println("Insulation at 2KM is good");
lcd.print("Insul good 2KM");
delay(3000);
lcd.clear();
}
else{
Serial.println("Insulation at 2KM got damaged");
lcd.print("Insul damage 2KM");
delay(3000);
lcd.clear();
}
int value3=analogRead(A2);
Serial.println("value3 ");
Serial.print(value3);
if(value3>=1000)
{
Serial.println("short circuit at 1KM ");
lcd.print("Short at 1KM");
delay(3000);
lcd.clear();
}
int value4=analogRead(A3);
Serial.println("value4 ");
Serial.print(value4);
if(value4<=1000)
{
Serial.println("Open circuit at 1KM");
lcd.print("open at 1KM");
delay(3000);
lcd.clear();
}
int value5=analogRead(A4);
Serial.println("value5 ");
Serial.print(value5);
if(value5>=1000)
{
Serial.println("short circuit at 2KM");
lcd.print("short at 2KM");
delay(3000);
lcd.clear();
}
int value6=analogRead(A5);
Serial.println("value6 ");
Serial.print(value6);
if(value6<=1000)
{
Serial.println("open circuit at 2KM");
lcd.print("Open at 2KM");
delay(3000);
lcd.clear();
}
//КОД ESP8266
void sendCommand(String command, int maxTime, char readReplay[]) {
Serial.print(countTrueCommand);
Serial.print(". at command => ");
Serial.print(command);
Serial.print(" ");
while(countTimeCommand < (maxTime*1))
{
esp8266.println(command);//at+cipsend
if(esp8266.find(readReplay))//хорошо
{
found = true;
break;
}
countTimeCommand++;
}
if(found == true)
{
Serial.println("OYI");
countTrueCommand++;
countTimeCommand = 0;
}
if(found == false)
{
Serial.println("Fail");
countTrueCommand = 0;
countTimeCommand = 0;
}
found = false;
}
}
1 ответ
▲ 2
Первое: правильно отформатируйте код. Заявления, которые одновременно уровень вложенности должен иметь одинаковое количество отступов. Если вы найдете это правило слишком трудно следовать, вы можете попробовать функцию автоматического форматирования Arduino IDE (Ctrl-T).
После того, как в коде будет установлен правильный отступ, вся его структура должна стать прозрачный. Вот как это выглядит:
// Директивы препроцессора и объявления переменных...
// Определение функции "настройка":
void setup() {
// Какой-то код...
sendCommand("AT",5,"OK");
sendCommand("AT+CWMODE=1",5,"OK");
sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
}
// Определение функции "цикл":
void loop() {
// Какой-то код...
// Определение вложенной функции:
String Insulation1() {
// ...
}
// Еще код...
// Определение вложенной функции:
void sendCommand(String command, int maxTime, char readReplay[]) {
// ...
}
}
Язык C++ не поддерживает определения вложенных функций. Даже если
так оно и было, используя в setup()
функцию, которая определена только внутри
loop()
не будет работать. Решение простое: переместите определение
sendCommand()
из loop()
в глобальную область. ну и удалить
определение Insulation1()
: никогда не используется.
,
@Edgar Bonet
Смотрите также:
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
Я уверен, что есть больше сообщений об ошибках. читай их, @Juraj