این طرح یک تماس صوتی از GSM shield و آردینو شما ، به یک تلفن از راه دو وارد شده از مانیتور سریال را برقرار می کند. شما برای شنیدن و ارسال صوت نیاز به اتصال یک بلندگو و میکروفون دارید.
سخت افزار موردنیاز
برد آردینو
Arduino + Telefonica GSM/GPRS Shield
میکروفون و بلندگو متصل به GSM shield
سیم کارت
مدار
تصویری از GSM shield آردینو بر روی آردینو UNO
ابتدا، کتابخانه GSM را وارد کنید.
سیم کارت ممکن است دارای یک PIN number باشد که قفل عملکرد آن را باز می کند. برای سیم کارت خود یک PIN تعیین کنید. اگر اگر سیم کارتتان PIN ندارد؛ شما می توانید آن را خالی رها کنید.
نمونه های اولیه از کلاس هایی که شما می خواهید استفاده کنید. شما به کلاس GSM و GSMVoiceCall نیاز خواهید داشت.
کد:
GSM gsmAccess;
GSMVoiceCall vcs;
چند متغیر برای ذخیره شماره تلفنی که می خواهید تماس حاصل کنید؛ ایجاد کنید.
کد:
String remoteNumber = "";
char charbuffer[20];
در setup ، یک اتصال سریال به کامپیوتر باز کنید شما از این برای ارسال شماره تلفن به آردینو استفاده خواهید کرد. بعد از باز کردن اتصال ، یک پیام به مانیتور سریال بفرستید که نشان می دهد طرح شروع شده است.
کد:
void setup(){
Serial.begin(9600);
Serial.println("Make 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);
}
}
setup با (ارسال) بعضی اطلاعات به مانیتور سریال پایان می یابد.
کد:
Serial.println("GSM initialized.");
Serial.println("Enter phone number to call.");
}
Loop بایت های ورودی از مانیتور سریال را می پذیرد و تماس صوتی شما برقرار می شود.
ابتدا بافر سریال را برای دیدن هر گونه اطلاعات در حال انتظار برای خواندن چک کنید. اگر وجود داشت ، آن را در متغیر محلی ذخیره کنید.
کد:
void loop()
{
while (Serial.available() > 0)
{
char inChar = Serial.read();
اگر بافر یک کاراکتر خط جدید نگهداشت، چک کنید ببینید چنانچه که طول ارقام عدد وارد شده کمتر از 20 باشد. (از لحاظ تئوری ،شما هرگز قادر به شماره گیری یک شماره با رقم بیش از آن نیستید.)
کد:
if (inChar == '\n')
{
if (remoteNumber.length() < 20)
{
شماره تماس خود را در مانیتور سریال چاپ کنید.
کد:
Serial.print("Calling to : ");
Serial.println(remoteNumber);
Serial.println();
شماره تماس در رشته ای به نام remoteNumber ذخیره خواهد شد. تابع voiceCall() نیازمند یک آرایه کراکتری است. رشته را در آرایه به نام charbuffer ،کپی کنید.
کد:
remoteNumber.toCharArray(charbuffer, 20);
با قراردادن، با استفاده از ()vcs.voiceCall ، برای رسیدن شماره ای که می خواهید به آن برسید، از آن عبور کنید، ()voiceCall ،وضعیت تماس را برمیگرداند؛ یک 1 به معنی آنکه، متصل است. شما می توانید وضعیت اتصال را با()getvoiceCallStatus چک کنید.
برای قطع تماس تان، یک کاراکتر خط جدید برای بکار انداختن ()hangCall بفرستید.
کد:
if(vcs.voiceCall(charbuffer))
{
Serial.println("Call Established. Enter line to end");
while(Serial.read()!='\n' && (vcs.getvoiceCallStatus()==TALKING));
vcs.hangCall();
}
هنگامی که تماس کامل شد؛ متغیری که شماره تلفن در آن ذخیره شد را پاک کنید.
کد:
Serial.println("Call Finished");
remoteNumber="";
Serial.println("Enter phone number to call.");
}
اگر شماره که شما در مانیتور سریال وارد کردید از بیش از 20 رقم است؛ رشته ی remoteNumber را پاک کرده و دوباره شروع کنید:
کد:
else
{
Serial.println("That's too long for a phone number. I'm forgetting it");
remoteNumber = "";
}
}
وقی که اطلاعات را از مانیتور سریال می خوانید اگر کارکتر دریافتی در خط جدید یا سرسطر نیست؛ رشته remoteNumber را افزوده و loop را نزدیک کنید.
کد:
else
{
// add the latest character to the message to send:
if(inChar!='\r')
remoteNumber += inChar;
}
}
هنگامی که کد شما آپلود شد؛ مانیتور سریال را باز کنید، به محض آن شما پیام "Enter phone number to call" را می بینید، یک شماره تلفن تایپ کنید و “return” را فشار دهید. مطمئن شوید که مانیتور سریال فقط به فرستادن کاراکتر خط جدید برای بازگشت تنظیم شده است.
کد:
#include <GSM.h>
// PIN شماره
#define PINNUMBER ""
// دادن مقدار اولیه به کتاب خانه نمونه
GSM gsmAccess; // برای فعال سازی اشکال زدایی 'true' قرار دادن پارامتر
GSMVoiceCall vcs;
String remoteNumber = ""; // شماره که شما می خواهید تماس بگیرید.
char charbuffer[20];
void setup()
{
// مقداردهی اولیه ارتباط سریال
Serial.begin(9600);
Serial.println("Make 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);
}
}
Serial.println("GSM initialized.");
Serial.println("Enter phone number to call.");
}
void loop()
{
// افزودن هر کاراکتر دریافتی به رشته:
while (Serial.available() > 0)
{
char inChar = Serial.read();
// اگر یک خط جدید است یعنی اینکه باید تماس برقرار کنید:
if (inChar == '\n')
{
// مطمئن شوید که شماره تلفن خیلی طولانی نباشد:
if (remoteNumber.length() < 20)
{
// به کاربر اجازه دهید از تماس شما اطلاع یابد:
Serial.print("Calling to : ");
Serial.println(remoteNumber);
Serial.println();
// شماره همراه را بگیرید
remoteNumber.toCharArray(charbuffer, 20);
// بررسی کنید که آیا دریافت پایانی تماس به دست آمده است.
if(vcs.voiceCall(charbuffer))
{
Serial.println("Call Established. Enter line to end");
// انتظار برای ورودی از خط
while(Serial.read()!='\n' && (vcs.getvoiceCallStatus()==TALKING));
// و قطع (تماس)
vcs.hangCall();
}
Serial.println("Call Finished");
remoteNumber="";
Serial.println("Enter phone number to call.");
}
else
{
Serial.println("That's too long for a phone number. I'm forgetting it");
remoteNumber = "";
}
}
else
{
// افزودن آخرین کاراکتر به پیام برای ارسال:
if(inChar!='\r')
remoteNumber += inChar;
}
}
}
لینک سایت:Arduino - GSMExamplesMakeVoiceCall