2016-05-19 25 views
1

私のプロジェクトには奇妙な問題があります。私はSMSメッセージを送受信できますが、何らかの理由で同じプロジェクトではありません。sim900を使用してarduinoでSMSを送受信する

は、この小さな一は、メッセージを送信し、正常に動作している:

#include <SoftwareSerial.h> 
SoftwareSerial SIM900(7, 8); 
String no = "+38762701893"; 
String message = "this is some message"; 
void setup() { 
    SIM900.begin(19200); 
    delay(20000); 
} 
void sendSMS(String number, String mess) { 
    SIM900.print("AT+CMGF=1\r"); 
    delay(100); 
    SIM900.println("AT + CMGS = \"" + number + "\""); 
    delay(100); 
    SIM900.println(mess); 
    delay(100); 
    SIM900.println((char)26); 
    delay(100); 
    SIM900.println(); 
    delay(5000); 
} 
void loop() { 
    sendSMS(no, message); 
    do {} while (1); 
} 

しかし、私はこれと同じ機能が彼らにSMSメッセージを受信し、応答少し大きいプログラムの下で仕事をしたい場合は、それはdoesnの仕事。

これは動作していない例の完全なコードである:

#include <SoftwareSerial.h> 
SoftwareSerial SIM900(7, 8); 
String no = "+122333444";   //phone number 
String message = ""; 
char inchar; 
int b = 13; 
bool state = 0; 

void setup() 
{ 
    Serial.begin(19200); 
    SIM900.begin(19200); 
    delay(5000); 
    SIM900.print("AT+CMGF=1\r"); 
    delay(100); 
    SIM900.print("AT+CNMI=2,2,0,0,0\r"); 
    delay(100); 
    Serial.println("Ready..."); 
    SIM900.begin(19200); 
    delay(500); 
    pinMode(b, OUTPUT); 
} 

void sendSMS(String number, String mess) { 
    SIM900.print("AT+CMGF=1\r"); 
    delay(200); 
    SIM900.println("AT+CMGS=\"" + number + "\""); 
    delay(100); 
    SIM900.println(mess); 
    delay(100); 
    SIM900.println((char)26); 
    delay(100); 
    SIM900.println(); 
    delay(8000); 
} 

void loop() 
{ 
    if (state) { 
    sendSMS(no, message); 
    state = 0; 
    } 
    if (SIM900.available() > 0) { 
    inchar = SIM900.read(); 
    Serial.print(inchar); 
    if (inchar == '#') { 
     delay(10); 
     inchar = SIM900.read(); 
     Serial.print(inchar); 
     if (inchar == 'a') { 
     delay(10); 
     inchar = SIM900.read(); 
     Serial.print(inchar); 
     if (inchar == '0') { 
      digitalWrite(b, LOW); 
      message = "something is off"; 
     } else if (inchar == '1') { 
      digitalWrite(b, HIGH); 
      message = "something is on"; 
     } 
     } 
     state = 1; 
    } 
    } 
} 

このプログラムは、LEDをオン、またはそれをオフにし、SMSの内容に依存し、それは応答しないであろう、SMSを受信します何らかの理由で。どんな助けでも大歓迎です。

答えて

1

SMSを送信するためのコードが間違っています。私はarduinoのgsmlibのようなライブラリを使って、すべてのタスクを適切に処理することをお勧めします。

( "+ CMGF = R \ 1 AT")まず

SIM900.print。

これは、setup()で1回実行する必要があります。

SIM900.println("AT+CMGS=\"" + number + "\"");を送信した後、モデムが>で応答するのを待つ必要があります。その後、テキストを送信できます。あなたの場合、モデムが200ms以内にそれを送信したと仮定しています。

sendSMS(数字、テキスト)のような関数を使うことができ、他のすべてのものを扱うgsmライブラリがいくつかあります。

0

私はC#であることでしたが、あなたは簡単にアルドゥイーノに変換することができます:

private void sendSMS_GSM() 
{ 
    if (serialPort.IsOpen) 
    { 
     strResponseSim = ""; 
     serialPort.WriteLine("AT+CMGF=1\r\n"); 
     while (strResponseSim != "AT+CMGF=1\r\r\nOK\r\n") ; 
     strResponseSim = ""; 
     serialPort.WriteLine("AT+CSCS=\"GSM\"\r\n"); 
     while (strResponseSim != "AT+CSCS=\"GSM\"\r\r\nOK\r\n") ; 
     strResponseSim = ""; 
     serialPort.WriteLine("AT+CMGS=\"" + txtPhone.Text + "\"\r\n"); 
     serialPort.WriteLine(txtMessage.Text); 
     serialPort.Write(new byte[] { 26 }, 0, 1); 
     while (strResponseSim == "OK") ; 
     strResponseSim = ""; 
    } 
} 
関連する問題