Go Down

Topic: GSM tried turn on LED (Read 1 time) previous topic - next topic

vrooms23

I tried turn on the LED, nothing happens, but Serial Monitor have got received message fine.

Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

// EN: String buffer for the GPRS shield message

String msg = String("");
// EN: Set to 1 when the next GPRS shield message will contains the SMS message

int SmsContentFlag = 0;

// EN: Pin of the LED to turn ON and OFF depending on the received message

int ledPin = 6;

// EN: Code PIN of the SIM card (if applied)

//String SIM_PIN_CODE = String( "XXXX" );

void setup()
{
 mySerial.begin(2400);               // the GPRS baud rate  
 Serial.begin(9600);                 // the GPRS baud rate

 // Initialize la PIN
 pinMode( ledPin, OUTPUT );
 digitalWrite( ledPin, LOW );
}

void loop()
{
   char SerialInByte;

   if(Serial.available())
   {
      mySerial.print((unsigned char)Serial.read());
    }  
   else  if(mySerial.available())
   {
       char SerialInByte;
       SerialInByte = (unsigned char)mySerial.read();

       // EN: Relay to Arduino IDE Monitor
 
       Serial.print( SerialInByte );

       // -------------------------------------------------------------------
       // EN: Program also listen to the GPRS shield message.
 
       // -------------------------------------------------------------------

       // EN: If the message ends with <CR> then process the message
     
       if( SerialInByte == 13 ){
         // EN: Store the char into the message buffer
       
         ProcessGprsMsg();
        }
        if( SerialInByte == 10 ){
           // EN: Skip Line feed

        }
        else {
          // EN: store the current character in the message string buffer

          msg += String(SerialInByte);
        }
    }  
}

// EN: Make action based on the content of the SMS.
//     Notice than SMS content is the result of the processing of several GPRS shield messages.

void ProcessSms( String sms ){
 Serial.print( "ProcessSms for [" );
 Serial.print( sms );
 Serial.println( "]" );

 if( sms.indexOf("on") >= 0 ){
   digitalWrite( ledPin, HIGH );
   Serial.println( "LED IS ON" );
   return;
 }
 if( sms.indexOf("off") >= 0 ){
   digitalWrite( ledPin, LOW );
   Serial.println( "LED IS OFF" );
   return;
 }
}

// EN: Send the SIM PIN Code to the GPRS shield

//void GprsSendPinCode(){
//  if( SIM_PIN_CODE.indexOf("XXXX")>=0 ){
//    Serial.println( "*** OUPS! you did not have provided a PIN CODE for your SIM CARD. ***" );
//    Serial.println( "*** Please, define the SIM_PIN_CODE variable . ***" );
//    return;
// }
//  mySerial.print("AT+CPIN=");
// mySerial.println( SIM_PIN_CODE );


// EN: Request Text Mode for SMS messaging

void GprsTextModeSMS(){
 mySerial.println( "AT+CMGF=1" );
}

void GprsReadSmsStore( String SmsStorePos ){
 // Serial.print( "GprsReadSmsStore for storePos " );
 // Serial.println( SmsStorePos );
 mySerial.print( "AT+CMGR=" );
 mySerial.println( SmsStorePos );
}

// EN: Clear the GPRS shield message buffer

void ClearGprsMsg(){
 msg = "";
}

// EN: interpret the GPRS shield message and act appropiately

void ProcessGprsMsg() {
 Serial.println("");
 Serial.print( "GPRS Message: [" );
 Serial.print( msg );
 Serial.println( "]" );

//  if( msg.indexOf( "+CPIN: SIM PIN" ) >= 0 ){
//     Serial.println( "*** NEED FOR SIM PIN CODE ***" );
//    Serial.println( "PIN CODE *** WILL BE SEND NOW" );
//    GprsSendPinCode();
//  }

 if( msg.indexOf( "Call Ready" ) >= 0 ){
    Serial.println( "*** GPRS Shield registered on Mobile Network ***" );
    GprsTextModeSMS();
 }

 // EN: unsolicited message received when getting a SMS message
 // FR: Message non sollicit√© quand un SMS arrive
 if( msg.indexOf( "+CMTI" ) >= 0 ){
    Serial.println( "*** SMS Received ***" );
    // EN: Look for the coma in the full message (+CMTI: "SM",6)
    //     In the sample, the SMS is stored at position 6
    int iPos = msg.indexOf( "," );
    String SmsStorePos = msg.substring( iPos+1 );
    Serial.print( "SMS stored at " );
    Serial.println( SmsStorePos );

    // EN: Ask to read the SMS store
    GprsReadSmsStore( SmsStorePos );
 }

 // EN: SMS store readed through UART (result of GprsReadSmsStore request)  
 if( msg.indexOf( "+CMGR:" ) >= 0 ){
   // EN: Next message will contains the BODY of SMS
   SmsContentFlag = 1;
   // EN: Following lines are essentiel to not clear the flag!
   ClearGprsMsg();
   return;
 }

 // EN: +CMGR message just before indicate that the following GRPS Shield message
 //     (this message) will contains the SMS body

 if( SmsContentFlag == 1 ){
   Serial.println( "*** SMS MESSAGE CONTENT ***" );
   Serial.println( msg );
   Serial.println( "*** END OF SMS MESSAGE ***" );
   ProcessSms( msg );
 }

 ClearGprsMsg();
 // EN: Always clear the flag

 SmsContentFlag = 0;
}



Serial Monitor
Quote
GPRS Message: []

+CMT: "+614xxxxxxxx","","13/09/15,02:30:08+38"

GPRS Message: [
+CMT: "+614xxxxxxxx","","13/09/15,02:30:08+38"]

on

GPRS Message: [
on]

vrooms23

I solved, not this code, other code what need #include SIM900.h I have, for my GSM Shield which rest 2 and 3 pins are software use SIM900.h (libraries GSMSHIELD). Also with SoftwareSerial.h too. Perfect!

Go Up