مهندس جان اول اینکه با سریال تونستم اس ام اس هم دریافت کنم با هون کامندی که تو کد دریافت نمیکنه. دوم اینکه این هم خدمت شما کدی که مگ مگ ماری عزیز زحمتشو کشیدن. البته تو این کد به نظرم هیچ کامندی برای دریافت به ماژول ارسال نمیشه.
#include <SoftwareSerial.h>
SoftwareSerial SIM900(2, 3);
#define GSMReset 5
void setup() {
Serial.begin(9600); // for serial monitor
SIM900.begin(9600); // for GSM shield
gsmPower();
gsmConfig();
}
void loop() {
commandDetect();
smsProcess();
}
//************************************************** *******************************
void gsmConfig() {
pinMode(GSMReset, OUTPUT);
sendCommand("AT+CMGF=1\r", 100); // set SMS mode to text
sendCommand("AT+CNMI=2,2,0,0,0\r", 100);
sendCommand("AT+CFUN=1", 2000);
sendCommand("AT+CREG?", 1000);
Serial.println("The end of Config process");
Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms");
}
//************************************************** ********************************
void showSms() {
char incoming_char = 0;
if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Get the character from the cellular serial port.
Serial.print(incoming_char); //Print the incoming character to the terminal.
}
}
//************************************************** *********************************
void smsProcess() {
char incoming_char = 0;
if (SIM900.available() > 0)
{
incoming_char = SIM900.read();
if (incoming_char == 'H')
{
delay(10);
Serial.print("horaaaaaaaaaaaaaaaaaaay");
}
}
}
//************************************************** *********************************
void gsmPower() {
Serial.println("Turning GSM ON");
digitalWrite(GSMReset, HIGH);
delay(10);
digitalWrite(GSMReset, LOW);
delay(100);
digitalWrite(GSMReset, HIGH);
delay(7000);
Serial.println("config process...");
}
//************************************************** ********************************
void sendCommand(String cmd, int t)
{
SIM900.println(cmd);
delay(t);
readSerial();
}
//************************************************** ************************************
void readSerial() {
while (SIM900.available())
Serial.write(SIM900.read());
}
//************************************************** *********************************
void dialNumber(String number) {
Serial.println("Dialing...");
sendCommand("ATD" + number + ";", 100);
Serial.println("End of Dial process");
delay(2000);
Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms");
}
//************************************************** **********************************
void ensms()
{
Serial.println("Sending SMS");
sendCommand("AT+CSCS=\"IRA\"", 200);
sendCommand("AT+CMGF=1", 200);
sendCommand("AT+CSMP=17,167,0,0", 200);
sendCommand("AT+CMGS=\"09331424592\"", 500);
sendCommand("Salam\r\n AftabRayaneh !\x1A", 0);
Serial.println("End of English SMS process");
delay(2000);
Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms");
}
//************************************************** **************************************
void farsisms()
{
Serial.println("Sending SMS");
sendCommand("AT+CSCS=\"HEX\"", 100);
sendCommand("AT+CMGF=1", 100);
sendCommand("AT+CSMP=17,167,0,8", 100);
sendCommand("AT+CMGS=\"+09331424592\"", 500);
sendCommand("0633064406270645060C002006220641062A0 627062800200631062706CC062706460647\x1A", 0);
Serial.println("End of Persian SMS process");
delay(2000);
Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms");
}
//************************************************** *****************************************
void commandDetect() {
if (Serial.available() > 0)
{
char data = Serial.read();
switch (data)
{
case 'd' : dialNumber("09331424592");
break;
case 'e' : ensms();
break;
case 'f' : farsisms();
break;
}
}
}
ولی کامندی که من فرستادم تو سریال و جواب دادAT+CNMI=1,2,0,0,0 بود. حالا میشه ازتون خواهش کنم با ارتباط سریال نرم افزاری یه تابع دریافت اس ام اس برام بنویسید؟ ولی قبلش خودتون تست کنید و اینجا تو تنجمن پست بگذارید که همه استفاده کنن؟