2016-09-19 27 views
0

請有人告訴我爲什麼這段代碼不工作。我想提取消息發送者的號碼,然後使用AT命令將消息轉發給它。它提取發送者的數量並將其存儲在一個變量中,但爲什麼不發送消息給該數字?發送郵件到提取的號碼

#include <GSM.h> 
GSM_SMS sms; 

char RcvdMsg[200] = ""; 
int RcvdCheck = 0; 
int RcvdConf = 0; 
int index = 0; 
int RcvdEnd = 0; 
char MsgMob[15]; 
char MsgTxt[50]; 
int MsgLength = 0; 
char number1[12] = "xxxxxxxxxx"; 
String number; 
char inchar; 
char outString[22]; 

void setup() 
{ 
    Serial.begin(9600); 
    Serial1.begin(9600); 

    Serial1.print("ATE0\r"); 
    Serial1.print("AT\r"); 
    Serial1.print("AT+CMGF=1\r"); 
    Serial1.print("AT+CNMI=1,2,0,0,0\r"); 
    delay(1000); 
} 

void loop() 
{ 
    recSms(); 
} 

void recSms() 
{ 
    if(Serial1.available()) 
    { 
    char data = Serial1.read(); 
    if(data == '+'){RcvdCheck = 1;} 
    if((data == 'C') && (RcvdCheck == 1)){RcvdCheck = 2;} 
    if((data == 'M') && (RcvdCheck == 2)){RcvdCheck = 3;} 
    if((data == 'T') && (RcvdCheck == 3)){RcvdCheck = 4;} 
    if(RcvdCheck == 4){RcvdConf = 1; RcvdCheck = 0;} 

    if(RcvdConf == 1) 
    { 
     if(data == '\n'){RcvdEnd++;} 
     if(RcvdEnd == 3){RcvdEnd = 0;} 
     RcvdMsg[index] = data; 
     index++; 

     if(RcvdEnd == 2){RcvdConf = 0;MsgLength = index-2;index = 0;} 
     if(RcvdConf == 0) 
     { 
     Serial.print("Mobile Number is: "); 
     for(int x = 4;x < 17;x++) 
     { 
      number+=RcvdMsg[x]; 
      MsgMob[x-4] = RcvdMsg[x]; 
     } 
     Serial.print(number); 
     Serial.println(); 
     Serial.print("Message Text: "); 
     for(int x = 46; x < MsgLength; x++) 
     { 
      MsgTxt[x-46] = RcvdMsg[x]; 
      inchar=MsgTxt[x-46]; 
     } 
     Serial.print(inchar); 
     Serial.println(); 

     RcvdCheck = 0; 
     RcvdConf = 0; 
     index = 0; 
     RcvdEnd = 0; 
     MsgMob[15]; 
     MsgTxt[50]; 
     MsgLength = 0; 

     Serial.flush(); 
     Serial1.flush(); 

     if(inchar == '#') 
     { 
      sendInfo(); 
     } 

     } 
    } 
    } 
} 

void sendInfo() 
{ 
    Serial1.print("AA"); 
    delay(1000); //delay of 1 
    Serial1.println("AT"); 
    delay(1000); 
    Serial1.write("AT+CMGF=1\r\n");   //set GSM to text mode 
    delay(1000); 
    Serial1.write("AT+CPMS=\"SM\"\r\n");   //Preferred SMS Message Storage 
    delay(1000); 

    Serial1.print("AT+CMGS=\""); 
    Serial1.print(number1); 
    Serial1.print("\""); 

    delay(1000); 
    Serial1.print("HI"); 
    delay(1000); 
    Serial1.write(0x1A);   // sends ctrl+z end of message 
    delay(1000); 
    Serial.println("sms sent "); 
} //end sendInfo() 
+0

嘗試最小化您的測試用例。如果問題在於發送,請創建一個僅發送的文件。 –

回答

1

好了,這個問題似乎是與這些行:

Serial1.print("AT+CMGS=\""); 
Serial1.print(number1); 
Serial1.print("\""); 

但是,如果我們寫下面寫的行,程序工作得很好!

Serial1.write("AT+CMGS=\""); 
Serial1.print(number); 
Serial1.write("\"\r");