GSMExamplesReceiveVoiceCall

Bu çizim, bir GSM kalkanı ile donatılmış bir Arduino veya Genuino kartından sesli bir çağrı alır. Çağrı alındıktan ve bağlandıktan sonra, aranan numarayı gösterir ve telefonu kapatır. Bağlı aramayı dinlemek ve sesinizi iletmek için bir hoparlör ve mikrofon bağlamanız gerekir.

Gerekli Donanım

Devre

Kod

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

#include <GSM.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, Arduino GSM kalkanı için sesli çağrılar alır,
arayan numarayı görüntüler, birkaç saniye bekler ve telefonu kapatır.

Devre:
* GSM kalkanı
* Ses devresi. GSM kalkanı başlangıç kılavuzuna başvurun
http://www.arduino.cc/en/Guide/ArduinoGSMShield#toc11 adresinde
* Sesli aramaları kabul edebilen SIM kart

Ses devresi olmadan çağrı bağlanır, ancak ses göndermez veya almaz

Mart 2012'de oluşturuldu
ile Javier Zorzano

Bu örnek kamu malıdır.

http: egitim.aspx e = GSMExamplesReceiveVoiceCall

* /


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

// PIN numarası
#define 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 notConnected = true ;

// GSM kalkanını başlat
// SIM'iniz PIN içeriyorsa, tırnak işaretleri halinde begin () parametresi olarak iletin
while ( notConnected ) {
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY ) {
notConnected = yanlış ;
} 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