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 LandoniThis 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 comif (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]