خدارو شکر
قدم اول اینه که بتونی اس ام اس که برات ارسال میشه رو ببینی .
یه مدل ساده کد نویسیش میشه این:
الان با این کد ممکنه یه سری چیزهای اضافی هم ببینی که مهم نیست .کد:#include <SoftwareSerial.h> SoftwareSerial mySerial(9, 10); //tx gsm = 9 rx arduino , rx gsm = 10 tx arduino int pir = 3; void setup() { mySerial.begin(9600); Serial.begin(9600); delay(1000); pinMode(pir, INPUT); gsmConfig() ; Serial.println("start"); } void loop() { int a = digitalRead(pir); if ( a == 1) { Serial.println("motion"); ensms(); } else { mySerial.println("AT+CMGD=1,2\r"); delay(1000); } showSms() ; } void gsmConfig() { mySerial.println("AT+CMGF=1\r"); // set SMS mode to text delay(100); mySerial.println("AT+CNMI=2,2,0,0,0\r"); delay(100); mySerial.println("AT+CFUN=1"); delay(2000); mySerial.println("AT+CREG?"); delay(1000); } void ensms() { mySerial.println("AT+CSCS=\"IRA\""); delay(200); mySerial.println("AT+CMGF=1"); delay(200); mySerial.println("AT+CSMP=17,167,0,0"); delay(200); mySerial.println("AT+CMGS=\"09...\""); delay(500); mySerial.println("Motion Alarm\x1A"); delay(2000); } void showSms() { char incoming_char = 0; if (mySerial.available() > 0) { incoming_char = mySerial.read(); //Get the character from the cellular serial port. Serial.print(incoming_char); //Print the incoming character to the terminal. } }
چک کن با این کد میتونی متن sms رو ببینی
مهندس یکم توو انتن دهی بد عمل میکنه تغذیه مناسب رو بهش دادم ( 4.2 ولت با امپر بالا) انتنشم انتن PCB هست ولی در حد 2 سانت جا به جا که میکنی جواب نمیده . زنگ که میزنم بهش گاهی زنگ میخوره.گاهی با یه بوق کوچیک قطع میشه . واسه این کد هم 2تا اس انگلیسی دادم دریافت نکرد . سومی رو که فرستادم یهو 3تاش باهم اومد. بعدش یه اس فارسی دادم که فکر کنم به کد اسکی دریافت کرده . چندثانیه بعد هم خودش یه چی دیگه دریافت کرد . کل دریافتا اینه:
start
AT+CMGF=1
OK
AT+CNMI=2,2,0,0,0
OK
AT+CFUN=1
OK
AT+CR
+CMT: "+989180698600","","16/08/10,11:04:36+14"
Salam
+CMT: "+989180698600","","16/08/10,11:06:07+14"
Salam1
+CMT: "+989180698600","","16/08/10,11:09:21+14"
Salam2
+CMT: "+989180698600","","16/08/10,11:10:01+14"
0633064406270645
+CMT: "+989180698600","","16/08/10,11:16:08+18"
00530068006F006D0061002000320033002000740061006D00 610073006500200061007A0020006400610073007400200072 0061006600740065006800200061007A0020002B0039003800 39003100380030003600390038003600300030002000640061 0072002000300039002F00300038002F003200300031003600 2000310036
امتحان میکنماز این انتن کوچیک فنری ها هم دارم . باید لحیم بشه. اونا دسی بلش بالاتر هست ؟
حالا یه اس رو چطوری بگم اگه یه متن خاص بود یه خروجی بده ؟
راستی یه چی دیگه. من هرکاری میکنم واسه اینکه میس بزنم به ماژول که با میس یه چی فعال بشه نمیشه ! یعنی یبار که زنگ میخوره دیگه میوفته توو حلقه و با همون یه میس 1000بار تکرار میکنه
این کدش:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9, 10); //tx gsm = 9 rx arduino , rx gsm = 10 tx arduino
void setup()
{
mySerial.begin(9600);
Serial.begin(9600);
delay(1000);
Serial.println("start");
}
void loop()
{
while (mySerial.available())
Serial.println("zang khordan");
}
با اینا هم امتحان کردم
if (mySerial.available()>0)
if (mySerial.available()== HIGH)
و...
ویرایش توسط feredy2011 : 08-10-2016 در ساعت 08:09 AM
میدونی کدی که نوشتی داره چیکار می کنه؟
داره میگه هر موقع سیم 800 یه چیزی ارسال کرد ( که اصلا مهم نیست اون چیزه چیه ) تو برو فلان کار رو بکن. خب معلومه تو لوپ میفته
از این لینک لیست کامندها رو ببین :
https://cdn-shop.adafruit.com/datash...nual_v1.01.pdf
طبق چیزی که نوشته زمانی که یکی بهت زنگ بزنه تو کنسول سریال باید Ring رو ببینی
بنابراین باید تو کدنویسیت بگه اگه داده ای که سیم 800 برمیگردونه Ring هست فلان کار رو بکن
مرسی مهندس تلاشمو میکنم نتیجه رو میگم . بازم ممنون