این طرح، یک تماس صوتی از یک آردینو متصل به یک GSM shield را دریافت می کند. به محض اتصال، شماره تماس را نشان داده و گوشی را نگه می دارد. شما برای شنیدن و ارسال صوت نیاز به اتصال یک بلندگو و میکروفون دارید.
سخت افزار موردنیاز
برد آردینو
Arduino + Telefonica GSM/GPRS Shield
میکروفون و بلندگو متصل به GSM shield
سیم کارت
مدار
تصویری از GSM shield آردینو بر روی آردینو UNO
ابتدا، کتابخانه GSM را وارد کنید.
سیم کارت ممکن است دارای یک PIN number باشد که قفل عملکرد آن را باز می کند. برای سیم کارت خود یک PIN تعیین کنید. اگر اگر سیم کارتتان PIN ندارد؛ شما می توانید آن را خالی رها کنید.
نمونه های اولیه از کلاس هایی که شما می خواهید استفاده کنید. شما به کلاس GSM و GSMVoiceCall نیاز خواهید داشت.
کد:
GSM gsmAccess;
GSMVoiceCall vcs;
یک آرایه کاراکتری برای ذخیره شماره دریافتی بسازید:
در setup ، یک اتصال سریال به کامپیوتر باز کنید شما از این برای ارسال شماره تلفن به آردینو استفاده خواهید کرد. بعد از باز کردن اتصال ، یک پیام به مانیتور سریال بفرستید که نشان می دهد طرح شروع شده است.
کد:
void setup(){
Serial.begin(9600);
Serial.println("Receive Voice Call");
یک متغیر محلی برای پی گیری وضعیت اتصال ایجاد کنید. شما از این برای نگهداری طرح از شروع تا اینکه SIM به شبکه متصل شود ؛استفاده خواهید کرد.
کد:
boolean notConnected = true;
با فراخوانی ()gsmAccess.begin به شبکه متصل شوید.آن پین های سیم کارت را به عنوان یک شناسه می پذیرد. با قرار دادن آن داخل یک حلقه ی ()while شما می توانید وضعیت اتصال به شبکه را به طور دائم چک کنید. وقتی مودم متصل می شود، gsmAccess() ، GSM_READY را باز میگرداند. از این به عنوان پرچم برای تنظیم متغیر notConnected به true یا false استفاده کنید. به محض اتصال ، باقیمانده setup اجرا خواهد شد.
کد:
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
در loop ، با استفاده از جمله switch روند برنامه را کنترل کنید. وضعیت آن را ()getvoiceCallStatusوقتی که تماس گرفته شد؛ برمی گرداند.
کد:
void loop()
{
switch (vcs.getvoiceCallStatus())
{
اگر getvoiceCallStatus() ، RECEIVINGCALL را برگرداند، (یعنی) کسی با شما تماس گرفته است. با استفاده از ()retrieveCallingNumber شماره دریافتی را در آرایه numtelکه (قبلا) ساختید؛ ذخیره کنید و آن را در مانیتور سریال چاپ کنید.
با استفاده از ()answerCall ، تماس صوتی با تماس گیرنده آغاز کنید.
کد:
case RECEIVINGCALL:
Serial.println("RECEIVING CALL");
vcs.retrieveCallingNumber(numtel, 20);
Serial.print("Number:");
Serial.println(numtel);
vcs.answerCall();
break;
به محض آنکه به تماس پاسخ دادید؛ getvoiceCallStatus() ، TALKING را برمی گرداند. این طرح برای بکار انداختن ()hangCall و پایان دادن اتصال ، منتظر کاراکتر خط جدید خواهد ماند.
عبارت switch را ببندید.
کد:
case TALKING:
Serial.println("TALKING. Enter line to interrupt.");
while(Serial.read()!='\n')
delay(100);
vcs.hangCall();
Serial.println("HANG. Waiting Call.");
break;
}
یک تاخیر کوچکی قبل از ادامه loop اضافه کنید.
هنگامی که کد آپلود شد، مانیتور سریال را باز کنید و مطمئن شوید که مانیتور سریال فقط به فرستادن کاراکتر خط جدید برای بازگشت تنظیم شده است.
کد:
#include <GSM.h>
// PIN شماره
#define PINNUMBER ""
// دادن مقدار اولیه به کتاب خانه نمونه
GSM gsmAccess; // برای فعال سازی اشکال زدایی 'true' قرار دادن پارامتر
GSMVoiceCall vcs;
char numtel[20]; // بافر برای تماس های ورودی
void setup()
{
// مقداردهی اولیه ارتباط سریال
Serial.begin(9600);
Serial.println("Receive Voice Call");
// وضعیت اتصال
boolean notConnected = true;
// GSM shield شروع به کار
// در نقل قول عبور کنید begin() اگر سیمکارت شما پین دارد، از آن مانند یک پارامتر از
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
// مطمئن شوید که مودم از دریافت درست رویدادها اطلاع می دهد.
vcs.hangCall();
Serial.println("Waiting Call");
}
void loop()
{
// را چک کنید voice call وضعیت
switch (vcs.getvoiceCallStatus())
{
case IDLE_CALL: // هیچ چیز اتفاق نیافتاده
break;
case CALLING: // این (امر) هرگز نباید اتفاق بیافتد چون ما تماسی برقرار نکردیم
Serial.println("CALLING");
break;
case RECEIVINGCALL: // بله یکی با ما تماس گرفته است
Serial.println("RECEIVING CALL");
// بزیابی شماره تماس
vcs.retrieveCallingNumber(numtel, 20);
// چاپ شماره تماس
Serial.print("Number:");
Serial.println(numtel);
//پاسخ به تماس، برقراری تماس
vcs.answerCall();
break;
case TALKING: //در این مورد تماس برقرار خواهد شد
Serial.println("TALKING. Enter line to interrupt.");
while(Serial.read()!='\n')
delay(100);
vcs.hangCall();
Serial.println("HANG. Waiting Call.");
break;
}
delay(1000);
}
لینک سایت:Arduino - GSMExamplesReceiveVoiceCall