GSMToolsPinManagement

Bu örnek, Arduino GSM Shield için sağlanan araçların bir parçasıdır ve bir SIM kartın PIN'ini değiştirmenize veya çıkarmanıza yardımcı olur.

Gerekli Donanım

Devre

Kod

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

#include <GSM.h>

GSMPin sınıfının bir örneğini başlatın .

GSMPIN PINManager ;

Seri monitörden girişi tutmak için bir String ile başlayarak değişkenlerinizi oluşturun. SIM'in kimlik doğrulaması yapıldığını kontrol etmek için seri bayrağı için bir bayrak ve mesajlar da gönderin.

String user_input = "";

boolean auth = false;

String oktext = "OK";
String errortext = "ERROR";
[Kodu Al]

setup , bilgisayara seri bir bağlantı açın. Bağlantıyı açtıktan sonra, Seri Monitöre çizimin başladığını belirten bir mesaj gönderin. Modemi sıfırlamak için PINManager .begin() .

void setup ( ) {
Seri . başlar ( 9600 ) ;
Seri . println ( "PIN örneğini değiştir \ n " ) ;
PINManager. begin ( ) ;

SIM'in PIN ile kilitlenip kilitlenmediğini kontrol edin

while ( ! auth ) {
int pin_query = PINManager. isPIN ( ) ;
eğer ( pin_query == 1 )
{

Kilitliyse, seri monitörden PIN kodunu isteyin. Bilgileri ayrıştırmak için readSerial() adlı özel bir işlev kullanırsınız.

Seri . print ( "PIN kodunu girin:" ) ;
user_input = readSerial ( ) ;

PIN geçerliyse, auth bayrağını true . Seri monitöre sonucu belirten bir durum mesajı gönderin. Yanlış PIN girerseniz, tekrar deneyebilirsiniz. 3 cevapsız denemeden sonra PIN kilitlenir ve kilidi açmak için PUK numarasına ihtiyacınız vardır.

eğer ( PINManager. checkPIN ( user_input ) == 0 )
{
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
}
Başka
{
Seri . println ( "Yanlış PIN. 3 fırsatınız olduğunu unutmayın." ) ;
}
}

SIM PUK kilidi modundaysa, PUK kodunu ve yeni bir PIN kodu isteyin

else if ( pin_query == - 1 )
{
Seri . println ( "PIN kilitlendi. PUK kodunu girin:" ) ;
String puk = readSerial ( ) ;
Seri . print ( "Şimdi yeni bir PIN kodu girin:" ) ;
user_input = readSerial ( ) ;
eğer ( PINManager. checkPUK ( puk , user_input ) == 0 )
{
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
}
Başka
{
Seri . println ( "Hatalı PUK veya geçersiz yeni PIN. Tekrar deneyin !." ) ;
}
}

Bir hata varsa ve hem PIN numarası hem de PUK kilitliyse, uygun bir durum mesajı gönderin:

else if ( pin_query == - 2 )
{
Seri . println ( "PIN ve PUK kilitli. Cep telefonunda PIN2 / PUK2 kullanın." ) ;
while ( true ) ;
}

PIN numarası yoksa, auth bayrağını true

Başka
{
// SIM kimlik doğrulaması gerektirmez
Seri . println ( "Pin gerekmez." ) ;
auth = doğru ;
}
}

GSM şebekesindeki kaydı kontrol edin ve bağlı olup olmadığınızı ve dolaşımda olup olmadığınızı belirtin.

Seri . print ( "GSM şebekesindeki kayıt kontrol ediliyor ..." ) ;
eğer ( PINManager. checkReg ( ) == 0 )
Seri . println ( oktext ) ;
else if ( PINManager. checkReg ( ) == 1 )
Seri . println ( "ROAMING" + oktext ) ;
Başka
{
Seri . println ( hata metni ) ;
while ( true ) ;
}
}

Seri monitörden seri girişi işlemek için özel bir işlev oluşturacaksınız. String türünde adlandırılmış bir işlev yapın.

Dize readSerial ( )
{

Kullanılabilir seri bilgiler varken yeni bir Dize halinde okuyun. Yeni satır karakteri ile karşılaşılırsa, ana programa dönün.

Dize metni = "" ;
süre ( 1 )
{
(Seri. mevcuttur ()> 0) ise
{
char inChar = Seri . read ( ) ;
eğer ( inChar == ' \ n ' )
{
metin döndürme ;
}
eğer ( inChar ! = ' \ r ' )
metin + = inChar ;
}
}
}

loop() , PIN'i açmanıza veya kapatmanıza ve değiştirmenize olanak tanıyan bir PIN yönetim aracı olarak işlev görür.

void loop ( )
{

Seri . println ( "Bir seçenek belirleyin: \ n 1 - Açık / Kapalı PIN." ) ;
eğer ( PINManager. getPINUsed ( ) )
Seri . println ( "2 - PIN'i değiştir." ) ;
Dize user_op = readSerial ( ) ;
eğer ( user_op == "1" )
{
Seri . println ( "PIN kodunuzu girin:" ) ;
user_input = readSerial ( ) ;

PINManager. switchPIN ( kullanıcı_sayısı ) ;
}
else if ( user_op == "2" ve PINManager. getPINUsed ( ) )
{
Seri . println ( "Gerçek PIN kodunuzu girin:" ) ;
String oldPIN = readSerial ( ) ;
Seri . println ( "Şimdi yeni PIN kodunuzu girin:" ) ;
Dize newPIN = readSerial ( ) ;

PINManager. changePIN ( oldPIN , newPIN ) ;
}
Başka
{
Seri . println ( "Hatalı seçenek. Tekrar deneyin !." ) ;
}
gecikme ( 1000 ) ;
}

Kodunuz yüklendikten sonra, PIN ile çalışmak için seri monitörü açın.

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

/ *
Bant Yönetimi

Bu çizim, Arduino GSM kalkanı için bandı kontrol ediyor
şu anda modemde yapılandırılmış ve değiştirmenize izin veriyor
o.

Lütfen http://www.worldtimezone.com/gsm.html adresini kontrol edin
Genel konfigürasyonlar:
Avrupa, Afrika, Orta Doğu: E-GSM (900) + DCS (1800)
ABD, Kanada, Güney Amerika: GSM (850) + PCS (1900)
Meksika: PCS (1900)
Brezilya: GSM (850) + E-GSM (900) + DCS (1800) + PCS (1900)


Devre:
* GSM kalkanı

oluşturuldu 12 Haziran 2012
Hazırlayan: Javier Zorzano, Scott Fitzgerald

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


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

// kütüphane örneğini başlat
GSM Bant bandı ;

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 Leonardo için gerekli
}

// Bant yöneticisinin başlaması modemi yeniden başlatır
Seri . println ( "Modem yeniden başlatılıyor ..." ) ;
grup. begin ( ) ;
Seri . println ( "Modem yeniden başlatıldı." ) ;

} ;


void loop ( ) {
// Geçerli bandı al
Dize bandName = bant. getBand ( ) ; // Bant adını alma ve yazdırma
Seri . print ( "Geçerli bant:" ) ;
Seri . println ( bantAdı ) ;
Seri . println ( "Bulunduğunuz grubu değiştirmek ister misiniz?" ) ;
String newBandName ;
newBandName = askUser ( ) ;
// Kullanıcıya ne yapmak üzere olduğumuzu anlatın…
Seri . print ( " \ n Band konfigürasyonu" ) ;
Seri . println ( newBandName ) ;
// Bandı değiştir
bool işlemi Başarısız ;
operationSuccess = bant. setBand ( newBandName ) ;
// Kullanıcıya işlemin uygun olup olmadığını söyle
if ( operationSuccess ) {
Seri . println ( "Başarı" ) ;
} başka {
Seri . println ( "Bant değiştirilirken hata oluştu" ) ;
}

if ( operationSuccess ) {
while ( true ) ;
}
}

// Bu işlev kullanıcıya farklı seçenekler sunar
// Seri arayüz üzerinden
// Kullanıcı birini seçer
Dize askUser ( ) {
String newBand ;
Seri . println ( "Bant seçin:" ) ;
// Farklı seçenekleri yazdırın
Seri . println ( "1: E-GSM (900)" ) ;
Seri . println ( "2: DCS (1800)" ) ;
Seri . println ( "3: PCS (1900)" ) ;
Seri . println ( "4: E-GSM (900) + DCS (1800) ör: Avrupa" ) ;
Seri . println ( "5: GSM (850) + PCS (1900) Ör: ABD, Güney Amerika" ) ;
Seri . println ( "6: GSM (850) + E-GSM (900) + DCS (1800) + PCS (1900)" ) ;

// Gelen arabelleği boşalt
while ( Seri . kullanılabilir ( ) ) {
Seri . read ( ) ;
}

// Bir cevap bekleyin, sadece ilk karaktere bakın
while ( ! Serial . available ( ) ) ;
char c = Seri . read ( ) ;
if ( c == '1' ) {
newBand = GSM_MODE_EGSM ;
} else if ( c == '2' ) {
newBand = GSM_MODE_DCS ;
} else if ( c == '3' ) {
newBand = GSM_MODE_PCS ;
} else if ( c == '4' ) {
newBand = GSM_MODE_EGSM_DCS ;
} else if ( c == '5' ) {
newBand = GSM_MODE_GSM850_PCS ;
} else if ( c == '6' ) {
newBand = GSM_MODE_GSM850_EGSM_DCS_PCS ;
} başka {
newBand = "GSM_MODE_UNDEFINED" ;
}
newBand döndürür;
}

See Also



  • GSMToolsTestGPRS- Verilen APN ve kimlik bilgileriyle GPRS üzerinden internete erişmeye çalışır.
  • GSMToolsBandManagement- Modemde yapılandırılmış olan bandı kontrol eder ve değiştirmenize izin verir.
  • GSMToolsGsmScanNetworks- Kullanılabilir ağları tarar ve IMEI ve SIM kart numarası hakkında bilgi yazdırır.
  • GSMToolsTestModem- GSM kalkanı modemin doğru çalışıp çalışmadığını test eder.
  • GSMToolsTestWebServer- Hiçbir şeyi yanıtlamayan, ancak istemcinin isteğini ve sunucu IP adresini yazdıran basit bir web sunucusu.
  • GSMExamplesMakeVoiceCall- Mikrofon ve hoparlör ile sesli arama nasıl yapılır.