GSMExamplesMakeVoiceCall

Bu çizim, GSM kalkanınızdan ve Arduino veya Genuino'dan gelen sesli aramayı seri monitörden girilen bir uzak telefon numarasına bağlar. Bağlı telefonu duymak 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]

Aramak istediğiniz telefon numarasını saklamak için bazı değişkenler oluşturun:

String remoteNumber = "" ;
char charbuffer [ 20 ] ;

setup , bilgisayara seri bir bağlantı açın. Bunu Arduino ya bir telefon numarası göndermek için kullanacaksınız. Bağlantıyı açtıktan sonra, Seri Monitöre çizimin başladığını belirten bir mesaj gönderin.

void setup ( ) {

Seri . başlar ( 9600 ) ;
Seri . println ( "Sesli Arama Yap" ) ;

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 ) ;
}
}

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

Seri . println ( "GSM başlatıldı." ) ;
Seri . println ( "Aranacak telefon numarasını girin." ) ;
}

loop , seri monitörden gelen baytları kabul eder ve sesli aramanızı bağlar.

İlk olarak, okunmayı bekleyen herhangi bir bilgi olup olmadığını görmek için seri arabelleği kontrol edin. Varsa, yerel bir değişkende saklayın:

void loop ( )
{
(Seri. mevcuttur ()> 0) ise
{
char inChar = Seri . read ( ) ;

Arabellek yeni satır karakteri içeriyorsa, girilen numaranın 20 basamaktan kısa olup olmadığını kontrol edin (teorik olarak, bundan daha fazla basamaklı bir numarayı asla arayamazsınız).

eğer ( inChar == ' \ n ' )
{
eğer ( remoteNumber. uzunluk ( ) < 20 )
{

Seri monitöre aradığınız numarayı yazdırın.

Seri . print ( "Şu numaraya sesleniyor:" ) ;
Seri . println ( remoteNumber ) ;
Seri . println ( ) ;

Aranacak numara remoteNumber adlı remoteNumber . voiceCall() işlevi bir char dizisi gerektirir. charbuffer adlı diziye charbuffer .

remoteNumber.toCharArray(charbuffer, 20);

Aramayı yapmak için vcs.voiceCall() kullanarak ulaşmak istediğiniz numarayı vcs.voiceCall() . voiceCall() çağrının durumunu döndürür; a 1 bağlı olduğunu gösterir. Bağlantının durumunu getvoiceCallStatus() ile kontrol edebilirsiniz.

Aramanızın bağlantısını kesmek için hangCall() işlevini başlatmak üzere yeni bir satır karakteri gönderin.

if ( vcs. voiceCall ( charbuffer ) )
{
Seri . println ( "Çağrı Kuruldu. Sona kadar satır girin" ) ;
while ( Serial . read ( ) ! = ' \ n ' && ( vcs. getvoiceCallStatus ( ) == KONUŞMA ) ) ;
vcs. hangCall ( ) ;
}

Çağrı tamamlandıktan sonra, telefon numarasını saklayan değişkeni temizleyin:

Seri . println ( "Çağrı Tamamlandı" ) ;
remoteNumber = "" ;
Seri . println ( "Aranacak telefon numarasını girin." ) ;
}

Seri monitöre girdiğiniz sayı 20 basamaktan uzunsa, remoteNumber Dizesini temizleyin ve yeniden başlayın:

Başka
{
Seri . println ( "Bir telefon numarası için çok uzun. Unutuyorum" ) ;
remoteNumber = "" ;
}
}

Seri monitörden bilgi okurken, gelen karakter yeni satır veya satır başı değilse, remoteNumber ekleyin ve loop kapatın.

Başka
{
// gönderilecek mesaja en son karakteri ekleyin:
eğer ( inChar ! = ' \ r ' )
remoteNumber + = inChar ;
}
}
}

Kodunuz yüklendikten sonra seri monitörü açın. "Aramak için telefon numarasını girin" mesajını gördüğünüzde, bir telefon numarası yazın ve "geri dön" tuşuna bası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 Arama Yap

Bu çizim, Arduino GSM kalkanı için, sesli arama yapar.
seri monitörden girdiğiniz bir uzak telefon numarası.
Çalıştırmak için seri monitörü açın ve
HAZIR mesajına bir telefon numarası yazın. Seri monitörün
return tuşuna bastığınızda yeni satırsonu gönderecek şekilde ayarlanmıştır.

Devre:
* GSM kalkanı
* Ses devresi.
Ses devresi olmadan çağrı herhangi bir ses gönderir veya almaz


Mart 2012'de oluşturuldu
ile Javier Zorzano

Bu örnek kamu malıdır.
* /


// kütüphaneler
#include <GSM.h>

// PIN numarası
#define PINNUMBER ""

// kütüphane örneğini başlat
GSM gsmAccess ; // hata ayıklama için bir 'true' parametresi dahil et
GSMVoiceCall vcs ;

String remoteNumber = "" ; // arayacağınız numara
char charbuffer [ 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 Arama Yap" ) ;

// 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 ) ;
}
}

Seri . println ( "GSM başlatıldı." ) ;
Seri . println ( "Aranacak telefon numarasını girin." ) ;

}

void loop ( ) {

// Dizeye gelen karakterleri ekleyin:
while ( Seri . kullanılabilir ( ) > 0 ) {
char inChar = Seri . read ( ) ;
// eğer yeni bir satırsa, arama yapmanız gerekir:
if ( inChar == ' \ n ' ) {
// telefon numarasının çok uzun olmadığından emin olun:
if ( remoteNumber. uzunluk ( ) < 20 ) {
// kullanıcıya aradığınızı bildirin:
Seri . print ( "Şu numaraya sesleniyor:" ) ;
Seri . println ( remoteNumber ) ;
Seri . println ( ) ;

// Uzak numarayı ara
remoteNumber. toCharArray ( karbüratör , 20 ) ;


// Alıcı ucun aramayı yanıtlayıp karşılamadığını kontrol edin
if ( vcs. voiceCall ( charbuffer ) ) {
Seri . println ( "Çağrı Kuruldu. Sona kadar satır girin" ) ;
// Satırdan bazı girdiler bekleyin
while ( Serial . read ( ) ! = ' \ n ' && ( vcs. getvoiceCallStatus ( ) == KONUŞMA ) ) ;
// Ve telefonu kapat
vcs. hangCall ( ) ;
}
Seri . println ( "Çağrı Tamamlandı" ) ;
remoteNumber = "" ;
Seri . println ( "Aranacak telefon numarasını girin." ) ;
} başka {
Seri . println ( "Bir telefon numarası için çok uzun. Unutuyorum" ) ;
remoteNumber = "" ;
}
} başka {
// gönderilecek mesaja en son karakteri ekleyin:
eğer ( inChar ! = ' \ r ' ) {
remoteNumber + = inChar ;
}
}
}
}

See Also



  • GSMExamplesReceiveVoiceCall- Çağrı alınır ve bağlanır, aranan numara seri monitörde gösterilir ve çağrı kapatılır.
  • GSMExamplesReceiveSMS- SMS mesajı nasıl alınır.
  • GSMExamplesSendSMS- Seri monitörden bir SMS giriş numarası ve metni nasıl gönderilir.
  • GSMExamplesWebServer- Bir istemciden istek alındığında Analog girişlerde okunan değeri geri gönderen bir web sunucusu.
  • GSMExamplesWebClient- Arduino.cc ana sayfasına bağlanın ve içindekileri seri monitör penceresinde yazdırın.
  • GSMToolsTestGPRS- Verilen APN ve kimlik bilgileriyle GPRS üzerinden internete erişmeye çalışır.