2017-12-16 115 views
1

私は、SMS /音声電話を送受信できるArduinoプログラムを作成しました。 しかし、私は電話を受ける方法を知らない。Arduino SIM900が電話を受ける

Get_Call()機能以外はすべて動作します。私はこの機能が私のSend_Call機能のようなシリアルコマンドで電話を受けてこの電話を止めることを望みます。

プログラムがATコマンドで電話を受ける方法が見つかりませんでした。

これは私のコードです:

#include <SoftwareSerial.h> 

SoftwareSerial SIM900(7, 8); 
char message=0; 

void setup() { 
    SIM900.begin(19200); 
    delay(25000); 
    Serial.begin(19200); 
    Serial.println("OK"); 
    digitalWrite(9, HIGH); 
    delay(1000); 
} 

void Send_Call() { 
    SIM900.println("ATD 0608446677;"); 
    delay(100); 
    SIM900.println(); 
    while(Serial.read() != '1') { 
    delay(100); 
    } 
    SIM900.println("ATH"); 
    delay(1000); 
} 

void Send_SMS() { 
    SIM900.print("AT+CMGF=1\r"); 
    delay(100); 
    SIM900.println("AT+CMGS=\"0608446677\""); 
    delay(100); 
    SIM900.println("test sms"); 
    delay(100); 
    SIM900.println((char)26); 
    delay(100); 
    SIM900.println(); 
    delay(5000); 
    Serial.println("SMS sent successfully"); 
} 

void Get_SMS() { 
    SIM900.println("AT+CNMI=2,2,0,0,0"); 
    delay(1000); 
} 

void Get_Call() { 
} 

void loop() { 
    if (Serial.available()>0) { 
    if(Serial.read() == 'p') { 
     Send_Call(); 
    } 
    if(Serial.read() == 's') { 
     Send_SMS(); 
    } 
    Get_SMS(); 
    Get_Call(); 
    } 

if (SIM900.available()>0) 
    Serial.write(SIM900.read()); 
} 

私はGet_Call()のためにこれを試してみました:

void Get_Call() { 
    SIM900.print("AT+ATA\r\n"); //accept call 
    SIM900.print("AT+CLIP=1\r\n"); //view phone number 
    while(Serial.read() != '1') { 
    delay(100); 
    } 
    SIM900.println("ATH"); //exit call when send in com '1' 
} 
+0

私のメッセージを更新しました。私はget_callコードを追加しました。 – sazearte

+0

このスケッチを実行すると何が得られますか?状況について多くの情報を与えることはありません。 – Billa

+0

私は何も持っていません...私は電話を受けるときに通知しません。 – sazearte

答えて

1

は、コールに応答するコマンド "ATA" を使用してください。私のプロジェクトでは、このコマンドをvoidループにしました。着信があると自動的に応答します。あなたはあなたの機能を同じに保つことができます。通話を切断するには「ATH」を使用します。 コードに以下のコードを追加してください:SIM900.println( "ATA");

+0

私はataコマンドSIM900.print( "AT + ATA \ r \ n")を使用します。多分私は正しいを使用していない?なぜ私の関数void Get_Call()は機能しませんか?エラーとは何ですか? – sazearte

+0

@AakhilShaik彼ははっきり言って、それは働かなかった。彼は関数(get_call)に関する問題をクリアしたかったのです。 – Billa

+0

SIM900.print( "AT + ATA \ r \ n")の代わりに。 /使用SIM900.println( "ATA");あなたの機能の中で。それは私のために働いた。 –

1

あなたのコードに問題が見つかりました。これはGet_Callにあります。問題は、コードの次の2行である:

char incoming_char=0; 
incoming_char=SIM900.read(); 

SIM900.read()は整数値を返すか、その文字値が「R」と等しくないことを理解します。

したがって、incoming_charをint変数とif条件に変更する必要があります。

コード:

int incoming_char=0; 
    incoming_char=SIM900.read(); 
    if(incoming_char==252) 
    { 
     SIM900.println("ATA\r\n"); 

     delay(5000000); 
     SIM900.println("ATH"); 
    } 

上記のコードでは、それを行うのに十分です。

N.B:4〜5回の呼び出し後に自動的に通話に参加します。

+0

条件(incoming_char == 252)が私のために働いていない場合... 条件と私がコードSIM900.println( "ATA \ r \ n")を呼び出す場合、私は削除します。私の電話を受け入れる – sazearte

+0

@sazearteとにかく素晴らしい仕事。私は前にそのような試みを見たことがないので。新しい何かをもたらすことは、IOTの成功への道です。 – Billa

+0

それはあなたのために働く。私はそれを聞いてうれしいです。それがあなたに役立つならばそれを受け入れ、upvoteし、それが類似の疑いを持つ他の人を助けるべきだと思うなら – Billa

関連する問題