Receiving corrupted SMS messaage on Arduino+SIM900 shield


i sending sms message arduino+sim900 shield. sms message being corrupted when going thru debugger. corruption happening when send arduino, if send sms message phone, fine.
the code below. listed whole code completness, problem happening @ beginning when trying read message.
any appreciated. (i suspect in different character set or that).

code: [select]
// 
//   smscommand - active pin 13 on/off depending on received sms message (on/off).
//                soft send pin code sim card when appropriate.
//   based on serial relay. arduino still patch a  serial link between
//             computer , gprs shield @ 19200 bps 8-n-1.
//
//   *** configure serial monitor carriage return, 19200 bauds ***
//
//   *** important!!!                                  ***
//   *** reading sms, not forget change           ***
//   *** buffer size of newsoftserial 128 bytes      ***
//   ***   see line _newss_max_rx_buff in newsoftserial.h   ***
//
//
//      http://mchobby.be/wiki/index.php?title=geekonfire_gsm/gprs_shield
//
//
#include <softwareserial.h>

softwareserial myserial(7, 8);

// en: string buffer gprs shield message
// fr: mémoire tampon de type string pour les messages du shield gprs
string msg = string("");
// en: set 1 when next gprs shield message contains sms message
// fr: est mis à 1 quand le prochain message du shield gprs contiendra le contenu du sms
int smscontentflag = 0;

// en: pin of led turn on , off depending on received message
// fr: pin de la led allumer/éteindre en fonction du message reçu
int ledpin = 5;

// en: code pin of sim card (if applied)
// fr: code pin de la carte sim (si applicable)
string sim_pin_code = string( "3333" );

int8_t answer;
int x;
char sms[200];

void setup()
{
  myserial.begin(19200);               // gprs baud rate   
  serial.begin(19200);                 // gprs baud rate
  serial.println("started!");

  // initialize la pin
  pinmode( ledpin, output );
  digitalwrite( ledpin, high );
}

void loop()
{
    char serialinbyte;
   
    if(serial.available())
    {
       myserial.print((unsigned char)serial.read());
     } 
    else  if(myserial.available())
    {
        char serialinbyte;
        serialinbyte = (unsigned char)myserial.read();
       
        // relay arduino ide monitor - here corrupted characters!!!!!!!!!!!!

        serial.print( serialinbyte );       

        // -------------------------------------------------------------------
        // program listen gprs shield message.
        // -------------------------------------------------------------------

        // if message ends <cr> process message
        // -------------------------------------------------------------------
        if( serialinbyte == 13 ){
          // en: store char message buffer
          // ---------------------------------------------------
          processgprsmsg();
         }
         if( serialinbyte == 10 ){
            // en: skip line feed
            // -------------------------------------------------
         }
         else {
           // en: store current character in message string buffer
           // --------------------------------------------------------------
           msg += string(serialinbyte);
         }
         
      answer = 1;   
           
     if (answer == 1)
    {
        answer = 0;
        while(serial.available() == 0);
        // loop reads data of sms
        do{
            if(serial.available() > 0){    // if there data in uart input buffer, reads , checks asnwer
                sms[x] = serial.read();
                x++;
                if (strstr(sms, "ok") != null)    // check if desired answer (ok) in response of module
                {
                    answer = 1;
                    serial.println("got it!");
                }
            }
        }while(answer == 0);    // waits asnwer time out
       
        sms[x] = '\0';
       
        serial.print(sms);   
       
    }
    else
    {
        serial.print("error ");
        serial.println(answer, dec);
    }
         
         
     }   
}

// en: make action based on content of sms.
//     notice sms content result of processing of several gprs shield messages.
// --------------------------------------------------------------------------------------------
//
void processsms( string sms ){
  sms.tolowercase();
  serial.print( "processsms [" );
  serial.print( sms );
  serial.println( "]" );

  if( sms.indexof("on") >= 0 ){
    digitalwrite( ledpin, high );
    serial.println( "led on" );
    return;
  }
  if( sms.indexof("off") >= 0 ){
    digitalwrite( ledpin, low );
    serial.println( "led off" );
    return;
  }
}

// send sim pin code gprs shield
// ---------------------------------------------------
void gprssendpincode(){
  if( sim_pin_code.indexof("xxxx")>=0 ){
    serial.println( "*** oups! did not have provided pin code sim card. ***" );
    serial.println( "*** please, define sim_pin_code variable . ***" );
    return;
  }
  myserial.print("at+cpin=");
  myserial.println( sim_pin_code );
}

// request text mode sms messaging
// -------------------------------------------------------
void gprstextmodesms(){
  myserial.println( "at+cmgf=1" );
}

void gprsreadsmsstore( string smsstorepos ){
  // serial.print( "gprsreadsmsstore storepos " );
  // serial.println( smsstorepos );
  myserial.print( "at+cmgr=" );
  myserial.println( smsstorepos );
}

// clear gprs shield message buffer
// --------------------------------------------------------------
void cleargprsmsg(){
  msg = "";
}

// interpret gprs shield message , 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 sim pin code ***" );
     serial.println( "pin code *** send now" );
     //gprssendpincode();
  }

  if( msg.indexof( "call ready" ) >= 0 ){
     serial.println( "*** gprs shield registered on mobile network ***" );
     gprstextmodesms();
  }

  // unsolicited message received when getting sms message
  // ----------------------------------------------------------------
  if( msg.indexof( "+cmti" ) >= 0 ){
     serial.println( "*** sms received ***" );
     // coma in full message (+cmti: "sm",6)
     // in sample, sms stored @ position 6
     // --------------------------------------------------------------------
     int ipos = msg.indexof( "," );
     string smsstorepos = msg.substring( ipos+1 );
     serial.print( "sms stored @ " );
     serial.println( smsstorepos );

     // ask read sms store
     // ---------------------------------------------------
     gprsreadsmsstore( smsstorepos );
  }

  // sms store readed through uart (result of gprsreadsmsstore request) 
  // ---------------------------------------------------------------------------
  if( msg.indexof( "+cmgr:" ) >= 0 ){
    // next message contains body of sms
    // ---------------------------------------------------------------
    smscontentflag = 1;
    // following lines essentiel not clear flag!
    // -----------------------------------------------------------------
    cleargprsmsg();
    return;
  }

  // +cmgr message before indicate following grps shield message
  //     (this message) contains sms body
  // -------------------------------------------------------------------------------
  if( smscontentflag == 1 ){
    serial.println( "*** sms message content ***" );
    serial.println( msg );
    serial.println( "*** end of sms message ***" );
    processsms( msg );
  }

  cleargprsmsg();
  // clear flag
  // -------------------------------------------------------
  smscontentflag = 0;
}

what 'debugger'?

what message expecting receive, , receive? there pattern 'corruption'?

have made 'very important' change softwareserial library mentioned in code header?

have checked how free memory arduino has when sketch runs? if not, suggest add code that. you'll find sample code in playground.


Arduino Forum > Using Arduino > Programming Questions > Receiving corrupted SMS messaage on Arduino+SIM900 shield


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62