MKRGSMToolsPinManagement

Bu örnek, Arduino MKR GSM 1400 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, MKRGSM kütüphanesini içe aktarın

#include <MKRGSM.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.

/ *

Bu örnek, PIN numarasını değiştirmenizi veya kaldırmanızı sağlar.
GSM kalkanına takılı bir SIM kart.

Devre:
* MKR GSM 1400 kartı
* Anten
* SIM kart

12 Haz 2012 tarihinde oluşturuldu
ile David del Peral
* /


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

// pin yöneticisi nesnesi
GSMPIN PINManager ;

// girişi seri olarak kullanıcı tarafından kaydet
String user_input = "" ;

// PIN kodu ile doğrulandı
bool auth = yanlış ;

// seri monitör sonuç mesajları
Dize oktext = "Tamam" ;
Dize errortext = "ERROR" ;

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
}

Seri . println ( "PIN örneğini değiştir \ n " ) ;
PINManager. begin ( ) ;

// SIM'in pin kilidinin olup olmadığını kontrol edin
while ( ! auth ) {
int pin_query = PINManager. isPIN ( ) ;
eğer ( pin_query == 1 ) {
// SIM kilitliyse, PIN kodunu girin
Seri . print ( "PIN kodunu girin:" ) ;
user_input = readSerial ( ) ;
// PIN kodunu kontrol et
eğer ( PINManager. checkPIN ( user_input ) == 0 ) {
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
} başka {
// PIN kodu doğrulanmamışsa
Seri . println ( "Yanlış PIN. 3 fırsatınız olduğunu unutmayın." ) ;
}
} else if ( pin_query == - 1 ) {
// PIN kodu kilitli, kullanıcı PUK kodunu girmelidir
Seri . println ( "PIN kilitlendi. PUK kodunu girin:" ) ;
String puk = readSerial ( ) ;
Seri . print ( "Şimdi yeni bir PIN kodu girin:" ) ;
user_input = readSerial ( ) ;
// PUK kodunu kontrol et
eğer ( PINManager. checkPUK ( puk , user_input ) == 0 ) {
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
} başka {
// PUK o veya yeni PIN yanlışsa
Seri . println ( "Hatalı PUK veya geçersiz yeni PIN. Tekrar deneyin !." ) ;
}
} else if ( pin_query == - 2 ) {
// en kötü durum, PIN ve PUK kilitli
Seri . println ( "PIN ve PUK kilitli. Cep telefonunda PIN2 / PUK2 kullanın." ) ;
while ( true ) ;
} başka {
// SIM kimlik doğrulaması gerektirmez
Seri . println ( "Pin gerekmez." ) ;
auth = doğru ;
}
}

// GSM kalkanını başlat
Seri . print ( "GSM şebekesindeki kayıt kontrol ediliyor ..." ) ;
eğer ( PINManager. checkReg ( ) == 0 ) {
Seri . println ( oktext ) ;
}
// dolaşım yoluyla bağlanıyorsanız
else if ( PINManager. checkReg ( ) == 1 ) {
Seri . println ( "ROAMING" + oktext ) ;
} başka {
// hata bağlantısı
Seri . println ( hata metni ) ;
while ( true ) ;
}
}

void loop ( ) {
// İşlev döngüsü pin yönetimi kullanıcı menüsünü uygular
// Sadece SIM tuş kilidi kullanıyorsanız, PIN kodunu değiştirebilirsiniz
// user_op değişkenleri kullanıcı kaydetme seçeneği

Seri . println ( "Bir seçenek belirleyin: \ n 1 - Açık / Kapalı PIN." ) ;
if ( PINManager. getPINUsed ( ) ) {
Seri . println ( "2 - PIN'i değiştir." ) ;
}
Dize user_op = readSerial ( ) ;
if ( user_op == "1" ) {
Seri . println ( "PIN kodunuzu girin:" ) ;
user_input = readSerial ( ) ;
// PIN kilidini etkinleştirme / devre dışı bırakma
PINManager. switchPIN ( kullanıcı_sayısı ) ;
} else if ( kullanıcı_op == "2" && PINManager. getPINUsed ( ) ) {
Seri . println ( "Gerçek PIN kodunuzu girin:" ) ;
String oldPIN = readSerial ( ) ;
Seri . println ( "Şimdi yeni PIN kodunuzu girin:" ) ;
Dize newPIN = readSerial ( ) ;
// pin'i değiştir
PINManager. changePIN ( oldPIN , newPIN ) ;
} başka {
Seri . println ( "Hatalı seçenek. Tekrar deneyin !." ) ;
}
gecikme ( 1000 ) ;
}

/ *
Giriş dizisini oku
* /

Dize readSerial ( ) {
Dize metni = "" ;
yaparken ( 1 ) {
while ( Seri . kullanılabilir ( ) > 0 ) {
char inChar = Seri . read ( ) ;
if ( inChar == ' \ n ' ) {
metin döndürme ;
}
eğer ( inChar ! = ' \ r ' ) {
metin + = inChar ;
}
}
}
}

See Also