MKRGSMExamplesReceiveVoiceCall

Bu çizim bir Arduino MKR GSM 1400'den sesli çağrı alır. Çağrı alındıktan ve bağlandıktan sonra, çağıran numarayı gösterir ve telefonu kapatır.

Gerekli Donanım

Devre

Kod

İlk olarak, MKRGSM kütüphanesini içe aktarın

#include <MKRGSM.h>

SIM kartların işlevlerinin kilidini açan bir PIN numarası olabilir. SIM'inizin PIN kodunu tanımlayın. SIM'inizde PIN yoksa boş bırakabilirsiniz:

#define PINNUMBER ""

Kullanacağınız sınıfların örneklerini başlatın. Hem GSM hem de GSMVoiceCall sınıfına ihtiyacınız olacak.

GSM gsmAccess;
GSMVoiceCall vcs;
[Kodu Al]

Gelen numarayı saklamak için bir karakter dizisi oluşturun:

karakter sayısı [ 20 ] ;

setup , bilgisayara seri bir bağlantı açın. Bağlantıyı açtıktan sonra çizimin başladığını belirten bir mesaj gönderin.

void setup ( ) {
Seri . başlar ( 9600 ) ;
Seri . println ( "Sesli Çağrı Al" ) ;

Bağlantı durumunu izlemek için yerel bir değişken oluşturun. SIM'in ağa bağlanmasına kadar çizimin başlamasını önlemek için bunu kullanırsınız:

boolean notConnected = true ;

gsmAccess.begin() çağırarak ağa bağlanın. SIM kartın PIN kodunu argüman olarak alır. Bunu bir while() döngüsünün içine yerleştirerek, bağlantının durumunu sürekli olarak kontrol edebilirsiniz. Modem bağlandığında, gsmAccess() GSM_READY değerini döndürür. notConnected değişkenini true veya false olarak ayarlamak için notConnected bayrak olarak kullanın. Bağlandıktan sonra, setup geri kalanı çalışır.

while ( bağlı değil )
{
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY )
notConnected = yanlış ;
Başka
{
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

Modemin gelen aramaları kabul etmeye hazır olduğundan emin olmak için hangCall() işlevini kullanın

vcs.hangCall();

Seri monitöre bazı bilgilerle setup tamamlayın.

Seri . println ( "GSM başlatıldı." ) ;
Seri . println ( "Çağrı bekleniyor." ) ;
}

loop , program akışını kontrol etmek için bir switch deyimi kullanın. getvoiceCallStatus() çağrıldığında durumunu döndürür.

void loop ( )
{
anahtarı ( vcs. getvoiceCallStatus ( ) )
{

getvoiceCallStatus() işlevi IDLE_CALL döndürürse, hiçbir şey olmaz.

vaka IDLE_CALL :

kırmak ;

Eğer getvoiceCallStatus() döndürür RECEIVINGCALL , birisi seni çağırıyor. Gelen sayıyı oluşturduğunuz numtel dizisine numtel için retrieveCallingNumber() numtel kullanın ve seri monitöre yazdırın.

answerCall() ses bağlantısını başlatmak için answerCall() kullanın.

vaka RECEIVINGCALL:

Seri . println ( "ÇAĞRI ALMA" ) ;

vcs. retrieveCallingNumber ( numtel , 20 ) ;

Seri . print ( "Sayı:" ) ;
Seri . println ( numtel ) ;

vcs. answerCall ( ) ;
kırmak ;

Aramayı cevapladıktan sonra, getvoiceCallStatus() , TALKING getvoiceCallStatus() döndürür. Çizim, yeni satır karakterinin hangCall() tetiklemesini ve bağlantıyı sonlandırmasını hangCall() .

switch ifadesini kapatın.

vaka KONUŞMA :

Seri . println ( "TALKING. Kesilecek satırı girin." ) ;
iken (Seri.) (okuma! = '\ n')
gecikme ( 100 ) ;
vcs. hangCall ( ) ;
Seri . println ( "HANG. Bekleyen Çağrı." ) ;
kırmak ;
}

loop ile devam etmeden önce küçük bir gecikme ekleyin:

gecikme ( 1000 ) ;
}

Kodunuz yüklendikten sonra seri monitörü açın. Seri monitörün yalnızca dönüşte yeni satır karakteri gönderecek şekilde ayarlandığından emin olun.

Çizimin tamamı aşağıdadır.

/ *
Sesli Çağrı Alma

Bu çizim, MKR GSM 1400 kartı için sesli çağrılar alır,
arayan numarayı görüntüler, birkaç saniye bekler ve telefonu kapatır.

Devre:
* MKR GSM 1400 kartı
* Anten
* Sesli aramaları kabul edebilen SIM kart

Mart 2012'de oluşturuldu
ile Javier Zorzano
* /


// GSM kütüphanesini dahil et
#include <MKRGSM.h>

#include "arduino_secrets.h"
// Lütfen hassas verilerinizi Gizli sekmesine veya arduino_secrets.h girin
// PIN numarası
const char PINNUMBER [ ] = SECRET_PINNUMBER ;

// kütüphane örneğini başlat
GSM gsmAccess ;
GSMVoiceCall vcs ;

// Gelen aramanın numarasını tutmak için dizi
karakter sayısı [ 20 ] ;

void setup ( ) {
// seri iletişimi başlatın ve portun açılmasını bekleyin:
Seri . başlar ( 9600 ) ;
while ( ! Seri ) {
; // seri portun bağlanmasını bekleyin. Yalnızca yerel USB bağlantı noktası için gereklidir
}

Seri . println ( "Sesli Çağrı Al" ) ;

// bağlantı durumu
bool bağlı = yanlış ;

// GSM kalkanını başlat
// SIM'iniz PIN içeriyorsa, tırnak işaretleri halinde begin () parametresi olarak iletin
while ( ! bağlı ) {
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY ) {
bağlı = doğru ;
} başka {
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

// Bu modemin gelen olayları doğru bir şekilde raporlamasını sağlar
vcs. hangCall ( ) ;

Seri . println ( "Arama bekleniyor" ) ;
}

void loop ( ) {
// Sesli aramanın durumunu kontrol etme
switch ( vcs. getvoiceCallStatus ( ) ) {
case IDLE_CALL : // Hiçbir şey olmuyor

kırmak ;

case RECEIVINGCALL : // Evet! Birisi bizi arıyor

Seri . println ( "ÇAĞRI ALMA" ) ;

// Aranan numarayı al
vcs. retrieveCallingNumber ( numtel , 20 ) ;

// Aranan numarayı yazdır
Seri . print ( "Sayı:" ) ;
Seri . println ( numtel ) ;

// Aramayı cevapla, aramayı oluştur
vcs. answerCall ( ) ;
kırmak ;

case TALKING : // Bu durumda çağrı yapılır

Seri . println ( "KONUŞMA. Telefonu kapatmak için enter tuşuna basın." ) ;
while ( Serial . read ( ) ! = ' \ n ' ) {
gecikme ( 100 ) ;
}
vcs. hangCall ( ) ;
Seri . println ( " Telefonu kapatıp bir sonraki çağrıyı beklerken." ) ;
kırmak ;
}
gecikme ( 1000 ) ;
}

See Also