This project is an attempt to control an led (likewise a relay properly connected) to on or off. The code below is well commented in order to be self explanatory.
/*
This sketch, for the Arduino GSM shield, waits for a SMS message
and displays it through the Serial port and turn on/off a led.
Circuit:
* GSM shield attached to an Arduino
* SIM card that can receive SMS messages
*/
// include the GSM library
#include <GSM.h>
// PIN Number for the SIM.If your SIM has no security PIN, you can leave it blank
#define PINNUMBER ""
// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;
// Array to hold the number a SMS is received from
char senderNumber[20];
//led is connected to pin13
int led=13;
void setup()
{
// initialize serial communications and send a message that the sketch has started:
Serial.begin(9600);
// initialize pin 13 as output
pinMode(led,OUTPUT);
// start with the led in off state
digitalWrite(led,LOW);
Serial.println("SMS Messages Receiver");
// variable to track the connection state
boolean notConnected = true;
/* Connect to the network by calling gsmAccess.begin(). It takes the SIM card's PIN as an argument.
By placing this inside a while() loop, you can continually check the status of the connection.
When the modem does connect, gsmAccess() will return GSM_READY.
Use this as a flag to set the notConnected variable to true or false. Once connected, the remainder of setup will run.*/
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
//Finish setup with some information to the serial monitor.
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
//SMS messages are received by the modem. In loop(), create a variable of type char to temporarily hold characters from
//any SMS received. Use sms.available() to check for the presence of any messages on the SIM :
void loop()
{
char c;
//create an array to save the values read from the sms.
char smsData[80];//Make it bigger if needed
//create an index into the array
byte smsIndex = 0;
if (sms.available())
//If a SMS is available, retrieve the remote sender's number by calling sms.remoteNumber(remoteNumber, 20).
//the remoteNumber argument is the char array you declared in the beginning of the sketch.
//Send this number to the serial monitor.
{
Serial.println("Message received from:");
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
//To read a message, use sms.read(). Here, you'll store each character from the message into the variable c
//and print it out as it gets read.
while(c=sms.read())
{
Serial.print(c);//ie what happens here is to read a byte one at a time and then discard
//as you read the data you store it in the array by incrementing the index(position in the array)
smsData[smsIndex++] = c;
smsData[smsIndex] = '\0'; // Keep string NULL terminated. To indicate end of character string
}
if (strcmp(smsData, "On")==0) //function to compare two strings. If contents of both strings are equal it returns a 0
{digitalWrite (led,HIGH);}
if (strcmp(smsData, "Off")==0)
{digitalWrite (led,LOW);}
//Indicate the message is complete and remove it from memory with sms.flush().
Serial.println("\nEND OF MESSAGE");
sms.flush();
Serial.println("MESSAGE DELETED");
}
//Add a brief delay and close the loop.
delay(1000);
}
need the diagram please
ReplyDelete