Go Down

Topic: GSM interfacing with Arduino Uno board to send and receive SMS (Read 2833 times) previous topic - next topic

We had interfaced GSM modem(MTSMC-G-F1)  with arduino uno R3 board and also an LCD to display the received SMS.
How to send  AT commands to modem from arduino board and receive the reply from modem to display it in the LCD...
Give me the coding please....
our coding is not working..


i programmed the gsm for the reply 0 instead of OK ,because while using the modem in hyper terminal i got the reply as 0 for OK and 4 for error.


#include<LiquidCrystal.h>
LiquidCrystal lcd(9,8,7,6,5,4);
byte gsm_count=0;
byte reply=0;
byte d_count=0;
byte msg_flg=0;
byte msg_flag_2=0;
byte i=0;
byte j=0;
char Rec_Data=0;
byte message_rcd=0;
byte message_dpl=0;
char number[15];
char message[160];
void modem_initialization();
void gsm_read_message();
void clear_buffer();

void setup()
{
  delay(1000);
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Arduino with GSM");
  lcd.setCursor(0,1);
  lcd.print(" Interfacing ");
  delay(1000);
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("GSM Initialising      ");   
  modem_initialization();
}
void loop()
{   
  gsm_read_message();
  if(message_rcd==1)
      {
      lcd.clear();
      lcd.setCursor(0,0);lcd.print(number);
      lcd.setCursor(0,1);lcd.print(message);
      message_dpl=1;
      }
  if(message_dpl==1)
      {
    clear_buffer();
    Rec_Data =0;
    msg_flg=0;
    delay(100);
    array_clear();
    Serial.println("AT+CMGD=1");
    i=0;j=0;
      }
}
void modem_initialization()
{
  while(gsm_count<5)
  {
    clear_buffer();
    Serial.println("AT");
    delay(100);
    reply=Serial.read();
    if(reply!='0')
    {
      gsm_count++;
      modem_initialization();
    }
    else
    {
       lcd.setCursor(0,0);
       lcd.print("GSM Modem Found  ");
    }
  }
  if(gsm_count=='5')
  {
  lcd.setCursor(0,0);
  lcd.print("Error in GSM modem");
  }
}
void gsm_read_message()
{
  while(Serial.available() > 0) 
     {
            Rec_Data = Serial.read();
                        if( Rec_Data == '+'  && msg_flg == 0 )               
                            msg_flg=1;       
                   else if( Rec_Data == 'C' && msg_flg == 1 )
                            msg_flg=2;
                   else if( Rec_Data == 'M' && msg_flg == 2 )
                            msg_flg=3;
                   else if( Rec_Data == 'T' && msg_flg == 3 )
                            msg_flg=4;
                   else if( Rec_Data == 'I' && msg_flg == 4 )
                            {
                             clear_buffer();
                             Rec_Data =0;
                             msg_flg=0;
                             delay(300);
                             array_clear();
                             Serial.println("AT+CMGR=1");
                             i=0;j=0;
                              }
                else if( Rec_Data== 'G' && msg_flg == 3 )
                         msg_flg=4;
                else if( Rec_Data== 'R' && msg_flg == 4 )
                         msg_flg=5;
                else if( Rec_Data== ':' && msg_flg == 5 )
                         msg_flg=6;
                else if( Rec_Data == '"' && msg_flg == 6  )
                         d_count++;
                else if( Rec_Data != '"' && d_count==3 && msg_flg == 6)
                         number[i++] = Rec_Data;
                else if( Rec_Data=='*' && d_count>=5 &&  msg_flg == 8 )
                         msg_flag_2=1;
                else if( Rec_Data!='#' && msg_flag_2 == 1 &&  msg_flg == 8 && Rec_Data!=0X0D && Rec_Data!=0X0A )
                         message[j++]=Rec_Data;
                else if( Rec_Data=='#' && msg_flag_2 == 1 &&  msg_flg == 8)
                              {   
                              msg_flag_2 = 2;
                              number='\0';
                              message[j]='\0';
                              i=0;j=0;
                              message_rcd=1;
                              } 
     }
}
void array_clear()
{
byte k=0; 
  for( k=0;k<=15;k++)
              number[k]='\0';
  for( k=0;k<=160;k++)
              message[k]='\0';
}
void clear_buffer()
{
  char reply=0;
  while(Serial.available() > 0)
  reply = Serial.read(); 
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy