این پروزه منتظر می ماند تا یک پیام دریافت کند وسپس آن را از طریق مانیتور سریال چاپ می کند وسایل مورد نیاز یک Arduino متصل به GPS و سیم کارت می باشد .
سخت افزار مورد نیاز :
1- برد آردوینو
2- آردوینو به همراه محفظه GSM/GPRS
3- سیم کارت
================================================== =======
طرز قرار گرفتن اجزا در مدار به صورت زیر است:
ابتدا وارد کتابخانه GSM شوید
سیم کارت می تواند یک شماره پین (pin number ) را که از وظایف خود سیم کارت است فعال کند می توان پین را برای سیم کارت تعریف کرد اگرسیم کارت پین ندارد آن را می توان خالی گذاشت . یعنی کد زیر
مقدار دهی اولیه کلاس های که شما می خواهید استفاده کنید به هر دو کلاس GSM و GSM_SMS نیاز دارید .
کد:
GSM gsmAccess;
GSM_SMS sms;
ایجاد یک آرایه کاراکتری که تعداد پیامی را که در حال ارسال است دخیره کند :
کد:
char remoteNumber[20];
در راه اندازی یک اتصال دهنده سریال به کامپیوتر ایجاد کرده و بعد از آن ازسال یک پیام نشان دهنده شروع کار طرح می باشد .
کد:
void setup(){
Serial.begin(9600);
Serial.println("SMS Messages Receiver");
برای آنکه از وضعیت اتصال اطلاع پیدا کنیم باید یک متغیر محلی ایجاد کرد .این کار را از نگه داشتن طرح از زمان شروع تا زمانی که سیم کارت به شبکه متصل است انجام می دهیم.
کد:
boolean notConnected = true;
با فراخوانی ()gsmAccess.begin به شبکه متصل می شویم . این کار باعث می شود پین سیم کارت را به عنوان آرگومان بگیرد. با قرار دادن آن داخل یک حلقه () while می توان وضعیت اتصال را به طور مداوم بررسی کرد .
زمانی که مودم متصل باشد () gsmAccess به GSM_READY بازخواهد گشت . از این به عنوان یک پرچم استفاده خواهد شد تا متغیر را از حالت notConnected به true یا false تبدیل کند . بایک بار اتصال باقیمانده نصب ادامه پیدا خواهد کرد .
کد:
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
نصب با تعدادی اطلاعات بر روی صفحه نمایش سریال به پایان حواهد رسید.
کد:
Serial.println("GSM initialized.");
Serial.println("Waiting for messages");
}
پیام های sms توسط مودم دریافت می شود. سیم کارت مقداری فضای حافظه برای ذخیره پیام دریافتی دارد. تعداد پیام sms سیم کارت بسته به نوع سیم کارت می تواند حداقل 10 و حداکثر 200 باشد . شما باید مقدار حافظه سیم کارت را بررسی کنید .
در ()loop یک متغیر از نوع کاراکتری برای نگه داری موقت کارکترها برای هر پیام sms دریافتی ایجاد کرد. از () sms.available برای بررسی وجود هر پیامی در سیم کارت می توان استفاده کرد
کد:
void loop()
{
char c;
if (sms.available())
{
چنانچه اگر یک پیام sms وجود داشت تعداد فرستنده با فراخوانی (sms.remoteNumber(remoteNumber, 20 می توان دریافت کرد . آرگومان remoteNumber آرایه کاراکتری است که شما در ابتدا طرح مشخص کرده اید . آن نمی تواند بلندتر از 20 کاراکتر باشد . این تعداد را به صفحه نمایش سریال بفرستید .
کد:
Serial.println("Message received from:");
sms.remoteNumber(remoteNumber, 20);
Serial.println(remoteNumber);
با فراخوانی ()sms.flush می توان پیام های sms را حذف نمود. با استفاده از () sms.peek می توان تعداد پیام های sms را که امکان حذف دارد شناسایی نمود .
کد زیر نمی تواند پیام های sms را حذف کند اما از طریق یک حلقه for می توان آن را تصحیح کرد با تعداد مشخص را شناسایی یا حذف کرد
کد:
if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
{
برای خواندن یک پیام از ()sms.read استفاده می کنیم شما هر کاراکتری از این پیام را به متغیر تبدیل خواهید کرد و می توانید آنرا به همانطور که می خوانید چاپ کنید .
کد:
while(c=sms.read())
Serial.print(c);
که نشان می دهد که پیام کامل است و از حافظه با استفاده از ()sms.flush می توان خذف نمود .
کد:
Serial.println("\nEND OF MESSAGE");
sms.flush();
Serial.println("MESSAGE DELETED");
}
و یک تاخیر مختصر را به آن اضافه می کنیم و حلقه را می بندیم .
یکبار دیگر کدهای نوشته شده را بررسی کنید و صفحه نمایش سریال را باز کرده و با یک تلفن با سرویس های دیگر که قادر اند پیام کوتاه ارسال کنند یک پیام کوتاه به سیم کارت خود بفرستید باید یک پیام بر روی صفحه نمایش زمانی که آن می رسد ببینید.
کد:
/*
SMS receiver
This sketch, for the Arduino GSM shield, waits for SMS messages
and displays them through the Serial port.
Circuit:
* GSM shield
created 25 Feb 2012
by Javier Zorzano / TD
This example is in the public domain.
*/
// libraries
#include <GSM.h>
// PIN Number
#define PINNUMBER ""
// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;
char remoteNumber[20]; // Holds the emitting number
void setup()
{
// initialize serial communications
Serial.begin(9600);
Serial.println("SMS Messages Receiver");
// connection state
boolean notConnected = true;
// Start GSM shield
// If your SIM has PIN, pass it as a parameter of begin() in quotes
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
void loop()
{
char c;
// If there are any SMSs available()
if (sms.available())
{
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(remoteNumber, 20);
Serial.println(remoteNumber);
// This is just an example of message disposal
// Messages starting with # should be discarded
if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them
while(c=sms.read())
Serial.print(c);
Serial.println("\nEND OF MESSAGE");
// delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
منبع:
Arduino - GSMExamplesReceiveSMS
بهینه سازی شده توسط مدیر انجمن