کد:
#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("0633064406270645060c002006220641062a0627062800200631062706cc062706460647\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;
}
}
}