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