نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
کد کامل sim800l

کد:
#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;
    }
  }
}
مهندس جان سلام دستتون درد نکنه با این کد تونستم شماره بگیرم و اس ام اس انگلیسی ارسال کنم ولی دریافت اس ام باز هم جواب نداد. کد رو که مرور میکمردم متوجه شدم که تو تابع دریافت اس ام اس از هیچ at کامندی استفاده نشده . دلیل خاصی داره؟