Receive messages using SIM900 module and Arduino UNO

We are using Arduino UNO and a SIM900 GSM Module. We figured out how to send a message from the module to a phone. We are unable to figure out which AT commands to use to recevie a message and read it. We used the standard Rx and Tx pins and did not use the SoftwareSerial library. Can someone please help us out? :slightly_frowning_face: :slightly_frowning_face:

Example code availble in gsm library:

you need to download IDE v1.5.8 or greater than that for windows platform. code is as below

#include <GSM.h>

#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

void setup()
{
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  Serial.println("SMS Messages Sender");

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }
  
  Serial.println("GSM initialized");
}

void loop()
{

  Serial.print("Enter a mobile number: ");
  char remoteNum[20];  // telephone number to send sms
  readSerial(remoteNum);
  Serial.println(remoteNum);
    
  // sms text
  Serial.print("Now, enter SMS content: ");
  char txtMsg[200];
  readSerial(txtMsg);
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);
  
  // send the message
  sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS(); 
  Serial.println("\nCOMPLETE!\n");
}

/*
  Read input serial
 */
int readSerial(char result[])
{
  int i = 0;
  while(1)
  {
    while (Serial.available() > 0)
    {
      char inChar = Serial.read();
      if (inChar == '\n')
      {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if(inChar!='\r')
      {
        result[i] = inChar;
        i++;
      }
    }
  }
}

That seems to be a sender. This is a receiver I have. I assume it came with the GSM library

#include <GSM.h>
GSM gsmAccess;
GSM_SMS sms;
char senderNumber[20];  
int led=13;

void setup() 
{
Serial.begin(9600);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
while (!Serial) {
  ;
} 
Serial.println("SMS Messages Receiver");
boolean notConnected = true;
while(notConnected)
{
if(gsmAccess.begin("6442")==GSM_READY)
  notConnected = false;
else
{
    Serial.println("Not connected");
    delay(1000);
}
}  
      Serial.println("GSM initialized");
      Serial.println("Waiting for messages");
}

  void loop() 
  {
  char c;
  int val=0;
  val=digitalRead(led);
  if (val==HIGH){
  digitalWrite(led,HIGH);
  }
  if (sms.available())
  {
  Serial.println("Message received from:");
  sms.remoteNumber(senderNumber, 20);
  Serial.println(senderNumber);

if(sms.peek()=='#')
{
  Serial.println("Discarded SMS");
  sms.flush();
}
   while(c=sms.read())   
  if(c='off'){
  digitalWrite(led,LOW);
}else{
  digitalWrite(led,HIGH);
  Serial.print(c);
}
  Serial.println("\nEND OF MESSAGE");
  sms.flush();
  Serial.println("MESSAGE DELETED");
}
  delay(1000);
}

Simple answer...

You poll the GSM modem for any received messages the simplest poll os

AT + CMGL = ALL

The answer will be a responce of the form

CMGL: N where N = number of messages then you get message body..

The list terminates with an OK and a carriage return line feed

If there are no messages the responce to the Poll is simply OK carriage return Line feed.