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