Go Down

Topic: Help with code (Read 989 times) previous topic - next topic

DMond

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?

Quote

/* 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;
}




Federico Vanzati

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).



F

pylon

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.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy