MKRGSMExamplesMakeVoiceCall

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]

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, MKR GSM 1400 kartı 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:
* MKR GSM 1400 kartı
* Anten
* Sesli arama gönderebilen SIM kart


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


// kütüphaneler
#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 ; // 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 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 ) ;
}
}

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