2016-09-19 46 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");