2016-09-19 2 views
0

누군가이 코드가 작동하지 않는 이유를 알려주십시오. 메시지 발신자 번호를 추출한 다음 AT 명령을 사용하여 메시지를 전달하려고합니다. 보낸 사람 수를 추출하여 변수에 저장하지만 왜 그 번호로 메시지를 보내지 않습니까?추출한 번호로 메시지 보내기

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

을하지만 우리는 아래에 기록 된 라인을 작성하는 경우, 프로그램은 잘 작동합니다 :

#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.write("AT+CMGS=\""); 
Serial1.print(number); 
Serial1.write("\"\r"); 
관련 문제