Go Down

Topic: Sm5100b SMS send and receive.. (Read 550 times) previous topic - next topic

camac

Dec 04, 2012, 02:08 pm Last Edit: Dec 04, 2012, 02:17 pm by camac Reason: 1
Hi all,

First of all, i would like to apologize for frequently posting questions.  But it is place where i last resort to...  So here it is..
In the main program, i have defined a polling loop around 17seconds in real time for detecting incoming SMS.  and 75/1000 seconds for sensing
temperature and voltage.  Finally, the status is reported back to my cell phone at a regular time interval.
But the program seems to have problems associating with the status reporting (SMS sending by the Arduino).  The performance is rather unstable, sometimes i got nothing
, sometimes i got them.  Is there anything wrong in the codes?  I'll be seriously in your debt if anyone can shed some light on this issue..  Your help is highly appreciated.

Regards,

Code: [Select]



#include <string.h>

#include <SoftwareSerial.h>
char a[5]={};
char incoming_char=0;
float t1;
float t2;
float t3;
float t4;
float t5;
float t6;
int j=1;
SoftwareSerial cell(2,3);
char mobilenumber[]="**********";
char textmessage[160];
char inchar;
int led1 = 9;
int led2 = 10;
int led3 = 11;
int led4 = 12;


void setup() {
 Serial.begin(9600);
 cell.begin(9600);
 delay(30000);
 cell.println("AT+CMGF=1");
 delay(200);
 cell.println("AT+CNMI=3,3,0,0");
 delay(200);
 
 pinMode(led1,OUTPUT);  //relay decoy//
 pinMode(led2,OUTPUT);  //relay decoy//
 pinMode(led3,OUTPUT);  //relay decoy//
 pinMode(led4,OUTPUT);  //relay decoy//
 
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 
 pinMode(13,OUTPUT); //SMS status lamp
 pinMode(12,OUTPUT);
 /*setTime(11,40,00,19,11,12);//hour,minutes,seconds, date,month,year*/
}

void startSMS() {

                 digitalWrite(13,HIGH);
                 cell.println("AT+CMGF=1");
                 cell.print("AT+CMGS=");
                 cell.write(34);
                 cell.print(mobilenumber);
                 cell.write(34);
                 cell.println();
                 delay (500);
               }
void endSMS()   {
                 cell.write(26);
                 cell.println();
                 delay(30000);
                 digitalWrite(13, LOW);
               }

void GSMTest()
{
if(cell.available() >0)
 {
 incoming_char=cell.read();
 Serial.print(incoming_char);
 }
if(Serial.available() >0)
 {
 incoming_char=Serial.read();
 cell.print(incoming_char);
 }
}

long readVcc() {
 long result;
 // Read 1.1V reference against AVcc
 ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
 delay(2); // Wait for Vref to settle
 ADCSRA |= _BV(ADSC); // Convert
 while (bit_is_set(ADCSRA,ADSC));
 result = ADCL;
 result |= ADCH<<8;
 result = 1126400L / result; // Back-calculate AVcc in mV
 return result;
}

void TMP00 ()
{
 float r;
 float temperature;
 r=readVcc()/1000.0;
 temperature = analogRead(0);
 temperature = (((r*temperature)/1024)-0.5)/0.01;
Serial.print("Measured voltage: ");
 Serial.println( r, 2 );
 Serial.print("Sensor_0 temperature:");
 Serial.println(temperature,2);
}

void TMP01 ()
{
 float r;
 float temperature;
 r=readVcc()/1000.0;
 temperature = analogRead(1);
 temperature = (((r*temperature)/1024)-0.5)/0.01;
Serial.print("Measured voltage: ");
 Serial.println( r, 2 );
 Serial.print("Sensor_1 temperature:");
 Serial.println(temperature,2);

}

void Sense()
{
 float r;
 float temperature;
 float r1;
 float measuredV;
 float correctfactor = 0.023;
 float correctedV;
 
 r=readVcc()/1000.0;
 measuredV = analogRead(3);
 measuredV = measuredV*r/1024.0;
 correctedV = measuredV - measuredV*correctfactor;
 Serial.print("Corrected voltage at voltage divider:");
 Serial.println(correctedV);
 
 r=readVcc()/1000.0;
 temperature = analogRead(0);
 temperature = (((r*temperature)/1024))/0.01;
 Serial.print("Sensor_2 temperature:");
 Serial.println(temperature,2);
}

void loop() {  
 
 startSMS();
 cell.print("Hello!");
 endSMS();
 
 delay(100);
 for(;;)  {
 t1=millis();
 Serial.println("Sensing Loop!");
 digitalWrite(9,HIGH);
 for(int i = 1;i<=3000;i++)  // each for loop is about 17.5 seconds
 {  
   if(cell.available()>0)
     {
     inchar = cell.read();
       if(inchar == 'c')
       {
         inchar = cell.read();
         if(inchar=='a')
         {
         delay(10);
         inchar = cell.read();
           if(inchar =='m')
           {
           delay(10);
           inchar = cell.read();
            if(inchar=='1')
            {
            digitalWrite(10,HIGH);
            delay(500);
            digitalWrite(10,LOW);
            cell.println("AT+CMGD=1,4");
            }
           }
         }
       }      
    } Serial.println(i);
 }
 //polling loop ends
 t2=millis();
 t3=t2-t1;
 Serial.print("Polling time: ");
 Serial.println(t3,2);
 
     t4=millis();
     digitalWrite(9,LOW);
     Sense();
     t5=millis();
     t6=t5-t4;
     Serial.print("Sensing Time: ");
     Serial.println(t6,2);
     //decision making loop
     j++;
     Serial.print("j");
     Serial.println(j);
     if(j==206) //status report loop, j=206 is equivalent to an hour approximately
     {
     j=1;
       startSMS();
       cell.print("Hello!");
       endSMS();
     }
 }
 
 
}//end void loop () {}

Go Up