При компиляции этого кода он говорит: 'sendATcommand' was not declared in this scope

int8_t answer; 
int onModulePin= 2; 
int counter; 
char aux_str[150]; 
char aux; 
char frame[200]; 
char latitude[15]; 
char longitude[15]; 
char altitude[6]; 
char date[16]; 
char time[7]; 
char satellites[3]; 
char speedOTG[10]; 
char course[10]; 
int x = 0; 
char N_S,W_E;  
void setup() 
{ 
     
    //pinMode(onModulePin, OUTPUT); 
    Serial.begin(115200); 
     
    delay(3000); 
    delay(3000); 
 
 
     
    Serial.println("Starting..."); 
    delay(30000); 
    while (sendATcommand("AT+CREG?", "+CREG: 0,1", 2000) == 0); 
    // устанавливает APN , имя пользователя и пароль
    sendATcommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", "OK", 2000); 
    sendATcommand("AT+SAPBR=3,1,\"APN\",\"gpinternet\"", "OK", 2000); 
    sendATcommand("AT+SAPBR=3,1,\"USER\",\"\"", "OK", 2000); 
    sendATcommand("AT+SAPBR=3,1,\"PWD\",\"\"", "OK", 2000); 
// получает носитель GPRS 
     while (sendATcommand("AT+SAPBR=1,1", "OK", 20000) == 0) 
    { 
        delay(5000); 
    } 
     
    
    delay(3000); 
     
   // устанавливает APN, имя пользователя и пароль 
//    sendATcommand("AT+CGPSPWR=1", "OK", 2000); 
//    sendATcommand("AT+CGPSRST=0", "OK", 2000); 
     
    while( (sendATcommand("AT+CGPSSTATUS?", "2D Fix", 5000) ||  
            sendATcommand("AT+CGPSSTATUS?", "3D Fix", 5000) || 
            sendATcommand("AT+CGPSSTATUS?", "Unknown", 5000)) == 0 ); 
 
 
}  
int8_t get_GPS() 
{ 
    int8_t counter, answer; 
    long previous; 
    // Сначала получить строку NMEA 
    // Очистить входной буфер
    while( Serial. Available() > 0) Serial. Read();  
    // request Basic string 
    sendATcommand("AT+CGPSINF=0", "AT+CGPSINF=0\r\n\r\n", 2000); 
    counter = 0; 
    answer = 0; 
    memset(frame, '\0', 100);    // Инициализировать строку
    previous = millis(); 
// этот цикл ожидает появления строки NMEA
do 
{ 
        if(Serial.available() != 0){     
            frame[counter] = Serial.read(); 
            counter++; 
             // проверка, есть ли желаемый ответ в ответе модуля 
            if (strstr(frame, "OK") != NULL)     
            { 
                answer = 1; 
            } 
 
 
        } 
        // Waits for the asnwer with time out 
    } 
    while((answer == 0) && ((millis() - previous) < 2000));   
    frame[counter-3] = '\0';     // '\0' where it finds the token you supplied, and returns a pointer to the start of the string.                      
                                                            
// Parses the string  
    strtok(frame, ","); 
    strcpy(longitude,strtok(NULL, ",")); // Получает долготу
    strcpy(latitude,strtok(NULL, ",")); // Получает широту
    strcpy(altitude,strtok(NULL, ".")); // Получает высоту  
    strtok(NULL, ",");     
    strcpy(date,strtok(NULL, ".")); // Gets date 
    strtok(NULL, ","); 
    strtok(NULL, ",");   
    strcpy(satellites,strtok(NULL, ",")); // Получает спутники
    strcpy(speedOTG,strtok(NULL, ",")); // Получает скорость над землей. 
  return answer;  
    // преобразовать строку в целое число и добавить ее в конечную плавающую переменную
deg = atof(aux); 
    strcpy(aux, strtok(NULL, '\0')); 
    minutes=atof(aux); 
    if (deg < 100) 
    { 
        minutes += deg; 
 
 
        deg = 0; 
    } 
    else 
    { 
        minutes += int(deg) % 100; 
        deg = int(deg) / 100;     
    } 
     
    if( deg < 0 ) 
    { 
        neg = true; 
        deg*=-1; 
    } 
void loop()  
{ 
  
 delay(1000); 
delay(1000); 
 Serial.print("AT+CMGF=1\r");               // Команда AT для выбора формата SMS. 
 delay(100); 
 Serial.println("AT + CMGS = \"+880XXXXXXXXXX\"");   // Команда AT для отправки SMS на мобильный номер получателя,в международном формате.
                                                                                                     
                                                                                                      
delay(100); 
 Serial.println("Here is my latitude and longitude;"); 

 
 Serial.println(latitude);   
 Serial.println(longitude);  // сообщение для отправки
  
   delay(100); 
 Serial.println((char)26);                       // End AT command with a ^Z, ASCII code 26 
  delay(100); 
 Serial.println(); 
  delay(5000);             
} 
// Clean the input buffer 
    while( Serial.available() > 0) Serial.read();     
     
    Serial.println(ATcommand);    // Send the AT command  
    x = 0; 
    previous = millis(); 
 
    // this loop waits for the answer 
    do 
{ 
        if(Serial.available() != 0){     
            response[x] = Serial.read(); 
            x++; 
            // check if the desired answer is in the response of the module 
            if (strstr(response, expected_answer1) != NULL)     
            { 
 
 
                answer = 1; 
            } 
        } 
        // Waits for the asnwer with time out 
    }while((answer == 0) && ((millis() - previous) < timeout));     
  //response[x] = 0; 
  //Serial.println(response); 
    return answer; 
}  

, 👍1

Обсуждение

Извините, но похоже, что вы слепо скопировали и склеили некоторые коды, как Франкенштейн. Очевидно, что некоторые недостающие части (похоже, вы потеряли несколько объявлений функций, например, после " loop() и после get_GPS ()"). И, возможно, из-за этого у вас разные фигурные скобки. И действительно, "sendATcommand ()" нигде не объявляется. Вы не можете просто скопировать разные коды вместе, перепутав их, а затем подумать, что это все еще работает. Вам нужно действительно понять, что означают эти коды и как они работают. Пожалуйста, сделайте базовый учебник по C/C++, чтобы изучить синтаксис., @chrisl

Я голосую за то, чтобы закрыть этот вопрос, потому что он касается синтаксиса C/C++, а не Arduino., @chrisl

Если вы *не напишете* функцию " sendATcommand ()", остальная часть кода *никогда* не сможет ее найти! *Подумайте* о том, что вы делаете - не просто слепо копируйте и вставляйте случайные фрагменты кода со случайных веб-сайтов., @Majenko