sendATCommand не объявлен в этой области

это программа Arduino для GSM и GPS модема. В этом модеме GPS отправляет местоположение пользователю с помощью модема GSM, но постоянно получает эту ошибку.

здесь программа
Я получаю это снова и снова, даже после некоторых изменений в программе
ATCommand для модуля SIM908
int8_t answer;

int onModulePin= 2;
char aux_string[30];
int flag = 0;

char number [20];
char realnumber[9];
char mynumber[9];

int a=0;
int b=0;
int c=0;

//Your phone number

char phone_number[]="85274****5";char data[100];
int data_size;
char aux_str[30];
char aux;

int x = 0;
char N_S,W_E;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];void setup(){
mynumber[0]='8';
mynumber[1]='5';
mynumber[2]='2';
mynumber[3]='7';
mynumber[4]='4';
mynumber[5]='*';
mynumber[6]='*';
mynumber[7]='*';
mynumber[8]='*';
mynumber[9]='5';pinMode(onModulePin, OUTPUT); Serial.begin(115200);delay(5000);sendATcommand("AT+CPIN=****", "OK", 2000);delay(3000);while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 1000) ||         sendATcommand("AT+CREG?", "+CREG: 0,5", 1000)) == 0 );sendATcommand("AT+CLIP=1", "OK", 1000);while ( start_GPS() == 0);while (sendATcommand("AT+CREG?", "+CREG: 0,1", 2000) == 0);// sets APN , user name and password
sendATcommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"","OK", 2000);
sendATcommand("AT+SAPBR=3,1,\"APN\",\"*******\"", "OK",2000);
sendATcommand("AT+SAPBR=3,1,\"USER\",\"*******\"","OK", 2000);
sendATcommand("AT+SAPBR=3,1,\"PWD\",\"*******\"", "OK",2000);// gets the GPRS bearer

while (sendATcommand("AT+SAPBR=1,1", "OK", 20000) == 0)

{

delay(5000);

}delay(1000);

while(Serial.available() != 0)

{

Serial.read();

}

}

void loop(){answer = sendATcommand("", "+CLIP", 1000);  //Detect incomming call

if (answer == 1)

{

Serial.println("Incoming call");if ( flag == 0){for (int i=0; i<19; i++){ // read the incoming byte:while (Serial.available() == 0)

{

delay (50);

}

//Stores phone number number[i] = Serial.read();}

Serial.flush(); flag = 1;

}

//Stores phone calling number  for (int i=0; i<=14; i++){

if(number[i]== '"'){       i++;
realnumber[0]=number[i]; i++;
realnumber[1]=number[i]; i++;
realnumber[2]=number[i]; i++;
realnumber[3]=number[i]; i++;
realnumber[4]=number[i]; i++;
realnumber[5]=number[i]; i++;
realnumber[6]=number[i]; i++;
realnumber[7]=number[i]; i++;
realnumber[8]=number[i];

break;

}

}//Check phone number  for (int i=0;i<9;i++){

if (realnumber[i] == mynumber[i]){ a++;

if( a==9){

Serial.println("Correct number"); sendATcommand("ATH", "OK", 1000);

if(b==1){ b=0;
}else{ b=1; c=1;
}

break;

}

}else{

Serial.println("Wrong number");  break;

}

}

a=0; answer=0; flag = 0;

}

//Send SMS once and position to HTTP if (b==1){

get_GPS(); send_HTTP(); delay(500);

if (c==1){ sendSMS(); delay(100);

c=0;

}

}}void power_on(){uint8_t answer=0;digitalWrite(onModulePin,HIGH); delay(3000);
digitalWrite(onModulePin,LOW);

while (answer ==  0 ){  // Send AT every two seconds
and wait for the  answer

answer = sendATcommand("AT", "OK", 2000);

}

}int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int    timeout){uint8_t x=0, answer=0;  char response[100];  unsigned long previous;

memset(response,  '\0'  , 100 );        // Initialice the string
delay(100);
while ( Serial.available() > 0 ) Serial.read(); //Clean the input buffer
if (ATcommand[ 0  ] != '\0'   )

{

Serial.println(ATcommand);
}

x = 0;
previous = millis();// this loop waits for the answer  do{

if(Serial.available() != 0){ // if there are data in the UART input   buffer, reads it and checks for the asnwer

response[x] = Serial.read();  //Serial.print(response[x]);

x++;

if (strstr(response, expected_answer) != NULL) // check if the desired answer (OK) is in the response of the module

{

answer = 1;

}

}

}while((answer == 0) && ((millis() - previous) <timeout));  // Waits for the asnwer with time outreturn answer;

}void power_onGPS(){

uint8_t answer=0;    // checks if the module is started

answer = sendATcommand("AT", "OK", 2000);  if (answer == 0)

{

// power on pulse
digitalWrite(onModulePin,HIGH); delay(3000); digitalWrite(onModulePin,LOW);

// waits for an answer from the module while(answer == 0){

// Send AT every two seconds and wait for the answer

answer = sendATcommand("AT", "OK", 2000);

}

}}int8_t start_GPS(){unsigned long previous;previous = millis();  // starts the GPS

sendATcommand("AT+CGPSPWR=1", "OK", 2000); sendATcommand("AT+CGPSRST=0", "OK", 2000);

// waits for fix GPS

while(( (sendATcommand("AT+CGPSSTATUS?", "2D Fix", 5000) ||

sendATcommand("AT+CGPSSTATUS?", "3D Fix", 5000)) ==0 ) &&

((millis() - previous) < 90000));if ((millis() - previous) < 90000)

{

return 1;

}

else

{

return 0;

}

}int8_t get_GPS(){int8_t counter, answer;  long previous;// First get the NMEA string  // Clean the input buffer

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); // Initialize the string previous = millis();

// this loop waits for the NMEA string  do{if(Serial.available() != 0){ frame[counter] = Serial.read(); counter++;

// check if the desired answer is in the response of the module

if (strstr(frame, "OK") != NULL)

{

answer = 1;

}

}

// Waits for the asnwer with time out}

while((answer == 0) && ((millis() - previous) < 2000));frame[counter-3] = '\0';// Parses the string strtok(frame, ",");

strcpy(longitude,strtok(NULL, ",")); // Gets longitude
strcpy(latitude,strtok(NULL, ",")); // Gets latitude
strcpy(altitude,strtok(NULL, ".")); // Gets altitude
strtok(NULL, ",");

strcpy(date,strtok(NULL, ".")); // Gets date strtok(NULL, ",");

strtok(NULL, ","); strcpy(satellites,strtok(NULL, ",")); // Gets satellites

strcpy(speedOTG,strtok(NULL, ",")); // Gets speed over ground. Unit is knots.

strcpy(course,strtok(NULL, "\r")); // Gets courseconvert2Degrees(latitude);

convert2Degrees(longitude);return answer;

}/* convert2Degrees ( input ) - performs the conversion from input

* parameters in DD°MM.mmm’ notation to DD.dddddd° notation.* Sign '+' is set for positive latitudes/longitudes (North, East)

* Sign '-' is set for negative latitudes/longitudes (South, West)*/

int8_t convert2Degrees(char* input){float deg;

float minutes; boolean neg = false;  //auxiliar variable  char aux[10];

if (input[0] == '-')

{

neg = true;

strcpy(aux, strtok(input+1, "."));}

else

{

strcpy(aux, strtok(input, "."));

}  // convert string to integer and add it to final float variable

deg = atof(aux);strcpy(aux, strtok(NULL, '\0')); minutes=atof(aux); minutes/=1000000;
if (deg < 100)

{

minutes += deg; deg = 0;

}

else{

minutes += int(deg) % 100; deg = int(deg) / 100;

} // add minutes to degrees deg=deg+minutes/60;

if (neg == true)

{

deg*=-1.0;

}neg = false;if( deg < 0 ){ neg = true; deg*=-1;

}float numberFloat=deg;  int intPart[10];

int digit;

long newNumber=(long)numberFloat;  int size=0;while(1){ size=size+1; digit=newNumber%10;
newNumber=newNumber/10; intPart[size-1]=digit;

if (newNumber==0){  break;

}

}int index=0;

if( neg ){ index++; input[0]='-';

}

for (int i=size-1; i >= 0; i--)

{

input[index]=intPart[i]+'0'; index++;

}input[index]='.'; index++;numberFloat=(numberFloat-(int)numberFloat);  for (int i=1; i<=6 ; i++)

{

numberFloat=numberFloat*10; digit= (long)numberFloat;  numberFloat=numberFloat-digit; input[index]=char(digit)+48; index++;
}

input[index]='\0';}void send_HTTP(){uint8_t answer=0; // Initializes HTTP service

answer = sendATcommand("AT+HTTPINIT", "OK", 10000);  if (answer == 1)

{ // Sets CID parameter

answer = sendATcommand("AT+HTTPPARA=\"CID\",1", "OK", 5000);
if (answer == 1)

{

// Sets url sprintf(aux_str,

"AT+HTTPPARA=\"URL\",\"http://%s/demo_sim908.php?", url);     Serial.print(aux_str);

sprintf(frame,

"visor=false&latitude=%s&longitude=%s&altitude=%s&time=%s&s atellites=%s&speedOTG=%s&course=%s",

latitude, longitude, altitude, date, satellites, speedOTG, course);

Serial.print(frame);

answer = sendATcommand("\"", "OK", 5000);  if (answer == 1)

{

// Starts GET action

answer = sendATcommand("AT+HTTPACTION=0", "+HTTPACTION:0,200", 30000);
if (answer == 1)

{Serial.println(F("Done!"));

}

else

{

Serial.println(F("Error getting url"));

}}

else

{

Serial.println(F("Error setting the url"));}

}

else

{

Serial.println(F("Error setting the CID"));

}

}

else

{

Serial.println(F("Error initializating"));

}sendATcommand("AT+HTTPTERM", "OK", 5000);}void power_onSMS(){

uint8_t answer=0; // checks if the module is started

answer = sendATcommand("AT", "OK", 2000);  if (answer == 0)

{

// power on pulse digitalWrite(onModulePin,HIGH); delay(3000); digitalWrite(onModulePin,LOW);

// waits for  an  answer from the module
while
(answer ==  0    ){

answer = sendATcommand("AT", "OK", 2000);

}

}

}void sendSMS(){ sendATcommand("AT+CPIN=****", "OK", 2000);delay(3000);Serial.println("Connecting to the network...");while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 500) ||   sendATcommand("AT+CREG?", "+CREG: 0,5", 500))Serial.print("Setting SMS mode..."); sendATcommand("AT+CMGF=1", "OK", 1000); // sets theSMS mode to text
Serial.println("Sending SMS");sprintf(aux_string,"AT+CMGS=\"%s\"", phone_number); answer = sendATcommand(aux_string, ">", 2000); //

send the SMS number  if (answer == 1)

{

Serial.print("Theft Alert:");

Serial.print("Latitude: ");  int i = 0;  while(latitude[i]!=0){

Serial.print(latitude[i]);

i++;

}

Serial.print(" / Longitude: "); i = 0;

while(longitude[i]!=0){ Serial.print(longitude[i]);i++;

}

Serial.write(0x1A);

answer = sendATcommand("", "OK", 20000);  if (answer == 1)

{

Serial.print("Sent ");

}

else

{

Serial.print("error ");

}

}

else

{

Serial.print("error "); Serial.println(answer, DEC);

}}

введите описание изображения здесь

0

Решение

Если вы двигаете функцию

int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int    timeout)

перед первым использованием (перед функцией setup ()) он должен работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]