ist es Arduino-Programm für GSM und GPS-Modem. In diesem GPS-Modem senden Sie den Standort an den Benutzer mit Hilfe von GSM-Modem, aber diesen Fehler kontinuierlich zu bekommen.sendATCommand nicht in diesem Bereich angegeben
hier das Programm ich bin immer dies immer wieder auch nach einigen Änderungen für das Programm ATCommand für die SIM908 Modul ist int8_t Antwort;
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 out
return 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 course
convert2Degrees(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);
}
}
Bitte veröffentlichen Sie ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve), da niemand gerne mehrere Seiten Code liest, um Ihren speziellen Fehler zu finden. In diesem Fall ist es ziemlich offensichtlich (Sie verwenden die Funktion vor der Deklaration), aber das ist nicht immer richtig. – Anedar
'' '#include" Sim908.h "' '' Ich denke –
Der ganze Code wird als Referenz angegeben, wenn ein Körper interessiert ist, aber Sie können den Fehler im Bild sehen, und ich habe den Befehl viele Male darüber verwendet, wo es gibt kein Fehler, aber in dieser Anweisung rief es einen Fehler – rohitpanwar77