Eğitimler
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
- Arduino veya Genuino Kurulu
- Arduino + Telefonica GSM / GPRS Kalkanı
- Mikrofon ve hoparlör GSM kalkanına takılı
- SIM kart
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.
GSMVoiceCall vcs;
Aramak istediğiniz telefon numarasını saklamak için bazı değişkenler oluşturun:
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.
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:
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.
{
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 ( "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:
{
(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 ( remoteNumber. uzunluk ( ) < 20 )
{
Seri monitöre aradığınız numarayı yazdırın.
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.
{
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:
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:
{
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.
{
// 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
- GSMinşaatçı
- GSM.begin()
- GSM.shutdown()
- GSMVoiceCallinşaatçı
- getVoiceCallStatus()
- ready()
- voiceCall()
- answerCall()
- hangCall()
- retrieveCallingNumber()
- Arduino GSM Shield- Komple ürün açıklaması.
- Getting started with the GSM Shield- Her şeyi dakikalar içinde kurun.
- GSM library- GSM Kütüphanesi için referansınız.
- 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.