Отображается ошибка, так как 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

Обсуждение

Я уверен, что есть больше сообщений об ошибках. читай их, @Juraj


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(): никогда не используется.

,