Help with code

Hello, i have an icomsat v1.1 gsm shield. it is a wonderful shield but i lack understanding on it. i want to activate a relay via a particular SMS. for example, when i SMS "on" a Pin on arduino will be HIGH and vice versa.

i tried modifying a code, but the result is every time The GSM receives ANY SMS, the pin will be high. can someone assist on making the SMS more specific?

/* GSM Shield example

created 2011
by Boris Landoni

This example code is in the public domain.

http://www.open-electronics.org
http://www.futurashop.it
*/
int led = 13;
#include <SoftwareSerial.h>
#include <GSM_Shield.h>

//**************************************************************************
char number[]="+39123456789"; //Destination number
char text[]="hello world"; //SMS to send
byte type_sms=SMS_UNREAD; //Type of SMS
byte del_sms=0; //0: No deleting sms - 1: Deleting SMS
//**************************************************************************

GSM gsm;
char sms_rx[122]; //Received text SMS
//int inByte=0; //Number of byte received on serial port
char number_incoming[20];
int call;
int error;

void setup()
{
Serial.begin(9600);
Serial.println("system startup");
gsm.TurnOn(9600); //module power on
gsm.InitParam(PARAM_SET_1);//configure the module
gsm.Echo(0); //enable AT echo

}

void loop()
{
char inSerial[5];
int i=0;
delay(2000);

Check_Call(); //Check if there is an incoming call
Check_SMS(); //Check if there is SMS
//Check data serial com

if (Serial.available() > 0)
{
while (Serial.available() > 0) {
inSerial*=(Serial.read()); //read data *

  • i++; *
  • }*
    _ inSerial*='\0';_
    Check_Protocol(inSerial);
    _
    }*_

*} *
void Check_Protocol(String inStr)
*{ *
* Serial.print("Command: ");*
* Serial.println(inStr);*

* Serial.println("Check_Protocol");*

* switch (inStr[0])*
* {*
* case 'a' : //Answer *
* if (gsm.CallStatus()==CALL_INCOM_VOICE){
_
gsm.PickUp();_
_
Serial.println("Answer");_
_
}_
_
else*_
* {*
* Serial.println("No incoming call");*
* }*
* break;*

* case 'c': // C //Call*
* if (inStr.length()<2) //To call variable 'number' comand c*
* {*
* Serial.print("Calling ");*
* Serial.println(number); *
* gsm.Call(number);*
* }*
* if (inStr.length()==2) //To call number in phone book position comand cx where x is the SIM position*
* {*
* error=gsm.GetPhoneNumber(inStr[1],number);*
* if (error!=0)*
* {*
* Serial.print("Calling ");*
* Serial.println(number);*
* gsm.Call(number);*
* }*
* else*
* {*
* Serial.print("No number in pos ");*
* Serial.println(inStr[1]);*
* }*
* }*
* break;*

* case 'h': //H //HangUp if there is an incoming call*
* if (gsm.CallStatus()!=CALL_NONE)
_
{_
_
Serial.println("Hang");_
_
gsm.HangUp(); _
_
}_
_
else*_
* {*
* Serial.println("No incoming call");*
* } *
* break;*

* case 's': //S //Send SMS*
* Serial.print("Send SMS to ");*
* Serial.println(number);*
* error=gsm.SendSMS(number,text); *
* if (error==0) //Check status*
* {*
* Serial.println("SMS ERROR \n");*
* }*
* else*
* {*
* Serial.println("SMS OK \n"); *
* }*
* break;*

* case 'p': //Read-Write Phone Book*
* if (inStr.length()==3)*
* {*

* switch (inStr[1])*
* {*
* case 'd': //Delete number in specified position pd2*
* error=gsm.DelPhoneNumber(inStr[2]);*
* if (error!=0)*
* {*
* Serial.print("Phone number position ");*
* Serial.print(inStr[2]);*
* Serial.println(" deleted");*
* }*
* break;*

* case 'g': //Read from Phone Book position pg2*
* error=gsm.GetPhoneNumber(inStr[2],number);*
* if (error!=0) //Find number in specified position*
* {*
* Serial.print("Phone Book position ");*
* Serial.print(inStr[2]);*
* Serial.print(": ");*
* Serial.println(number);*
* }*
* else //Not find number in specified position*
* {*
* Serial.print("No Phone number in position ");*
* Serial.println(inStr[2]);*
* }*
* break;*
* case 'w': //Write from Phone Book Position pw2*
* error=gsm.WritePhoneNumber(inStr[2],number);*
* if (error!=0)*
* {*
* Serial.print("Number ");*
* Serial.print(number);*
* Serial.print(" writed in Phone Book position ");*
* Serial.println(inStr[2]);*
* }*
* else Serial.println("Writing error");*
* break;*

* }*

* }*
* break;*

* }*

* delay(1500);*

* return;*
}

void Check_Call() //Check status call if this is available
*{ *
* call=gsm.CallStatus();*
* switch (call)*
* { *
* case CALL_NONE:
_
Serial.println("no call");_
_
break;_
case CALL_INCOM_VOICE:
gsm.CallStatusWithAuth(number_incoming,0,0);
_
Serial.print("incoming voice call from "); _
Serial.println(number_incoming);
_
break;_
case CALL_ACTIVE_VOICE:
_
Serial.println("active voice call"); _
_
break;_
case CALL_NO_RESPONSE:
_
Serial.println("no response");_
_
break;_
_
}_
_
return;_
_
}*_

void Check_SMS() //Check if there is an sms 'type_sms'
{
* char pos_sms_rx; //Received SMS position
pos_sms_rx=gsm.IsSMSPresent(type_sms);
if (pos_sms_rx!=0)
_
{_
_
digitalWrite(led, HIGH); _
_
delay(5000); _
_
digitalWrite(led, LOW);_
_
//Read text/number/position of sms*_
* gsm.GetSMS(pos_sms_rx,number_incoming,sms_rx,120);
_
Serial.print("Received SMS from ");_
Serial.print(number_incoming);
_
Serial.print("(sim position: ");_
Serial.print(word(pos_sms_rx));
_
Serial.println(")");_
Serial.println(sms_rx);
if (del_sms==1) //If 'del_sms' is 1, i delete sms*

* {*
* error=gsm.DeleteSMS(pos_sms_rx);
_
if (error==1)Serial.println("SMS deleted"); _
_
else Serial.println("SMS not deleted");_
_
}_
_
}_
_
return;_
_
}*_

[/quote]

Hi,

sorry but this board of the forum is dedicated only to the official Arduino GSM shield (http://arduino.cc/en/Main.ArduinoGSMShield).

I moved the discussion in the proper section (Networking, Protocols, and Devices).

Please edit your post and use code tags and not quote tags. Without this change your code is modified by the forum system and not displayed correctly and I don't want to guess where you may have had what differently than displayed.