door opening with arduino and SIM900

hi :slight_smile:
I am a student in France, and am currently working on a project to open the door remotely. Specifically with sending a sms.
I have una map R3 + arduino shield a GPRS "SIM900" (seeestudio) + a servo motor.
The problem is that I do not know what software to use with this shield, do I stay in arduino or sscom32E or AT command test?
I want a program that hen I send a sms as "open" drives the servo motor 90 and "close" the furnish to its starting position.
Thank you for your help

To interface with the SIM900, will require the at commands 系统发生错误, to read the text message you can use the command AT+CMGR, and serialRead to get the reply. To control the servo use the servo library (Servo - Arduino Reference) and an 'if' statement on the read serial data.
I got a sim900 module last September but have not got round to using it extensively yet, (maybe summer). Here is blog which details use of a TC35 gsm modem, which uses most of the same commands as the sim900, http://denhart.dk/2012/01/21/siemens-tc35-gsm-module-arduino/. Hope this helps.

thank you very much :slight_smile: But "siemens TC35 Module" is a software ? where can i download ?
And i have 2 little code but i don't know where include "servo"

#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8);

// FR: Mémoire tampon de type string pour les messages du shield GPRS
String msg = String("");
// FR: Est mis à 1 quand le prochain message du shield GPRS contiendra le contenu du SMS
int SmsContentFlag = 0;

// FR: Pin de la LED a allumer/éteindre en fonction du message reçu
int ledPin = 13;

// FR: Code PIN de la carte SIM (si applicable)
String SIM_PIN_CODE = String( "XXXX" );

void setup()
{
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // 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();

// FR: Relayer l'information vers le moniteur Serie Arduino
Serial.print( SerialInByte );

// -------------------------------------------------------------------
// FR: Le programme écoute également les messages issus du GPRS Shield.
// -------------------------------------------------------------------

// FR: Si le message se termine par un alors traiter le message
if( SerialInByte == 13 ){
// EN: Store the char into the message buffer
// FR: Stocké le caractère dans le buffer de message
ProcessGprsMsg();
}
if( SerialInByte == 10 ){
// EN: Skip Line feed
// FR: Ignorer les Line Feed
}
else {
// EN: store the current character in the message string buffer
// FR: stocker le caractère dans la mémoire tampon réservé au message
msg += String(SerialInByte);
}
}
}
// FR: Execute une action sur base du contenu d'un SMS.
// Notez que le contenu du SMS est le résultat du traitement de plusieurs messages du shield GPRS.
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;
}
}

// FR: Envoyer le code PIN de la carte SIM au shield GRPS
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 );
}

// FR: Demande d'utiliser le mode Text pour la gestion des messages
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 );
}

// FR: efface le contenu de la mémoire tampon des messages du GPRS shield.
void ClearGprsMsg(){
msg = "";
}

// FR: interprete le message du GPRS shield et agit en conséquence
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();
}

// FR: Message non sollicité quand un SMS arrive
if( msg.indexOf( "+CMTI" ) >= 0 ){
Serial.println( "*** SMS Received ***" );
// FR: Rechercher la position de la virgule dans le message complet (+CMTI: "SM",6)
// Dans l'exemple, le SMS est stocké à la position 6
int iPos = msg.indexOf( "," );
String SmsStorePos = msg.substring( iPos+1 );
Serial.print( "SMS stored at " );
Serial.println( SmsStorePos );

// FR: Demande de lecture du stockage SMS
GprsReadSmsStore( SmsStorePos );
}

// FR: Lecture du stockage SMS via l'UART (résultat de la requete GprsReadSmsStore)
if( msg.indexOf( "+CMGR:" ) >= 0 ){
// FR: Le prochain message contiendra le contenu du SMS
SmsContentFlag = 1;
// FR: Les ligne suivantes sont essentielle pour ne pas effacer le flag!
ClearGprsMsg();
return;
}

// (this message) will contains the SMS body
// FR: le message +CMGR précédent indiquait que le message suivant du Shield GPRS
// (ce message) contient le corps du SMS
if( SmsContentFlag == 1 ){
Serial.println( "*** SMS MESSAGE CONTENT " );
Serial.println( msg );
Serial.println( "
END OF SMS MESSAGE ***" );
ProcessSms( msg );
}

ClearGprsMsg();
// FR: Toujours mettre le flag à 0
SmsContentFlag = 0;


setup() {
Serial.write("AT+CMGF=1"); //Use text mode for sms

}

loop() {
Serial.write("AT+CMGL="ALL"\r\n"); //Check which AT commands that will send you the first sms in the sms memory. If there is none you will get an error, but that is ok.
delay(1000); //Wait for modem to send response
a = Serial.read(); //Read the modem response
if ( a.find("off") ) //If off is anywhere in modem response,
servo(0); //move servo to zero degrees
if (a.find("90") ) //If 90 is anywhere in response
servo(90); /Move servo to zero degrees
Serial.write("AT+yyyyy\r\n"); //Check which AT commands delete the first sms
delay(1000); //Wait for modem response
Serial.read(); //Read and throw away modem response
}