Pages: [1]   Go Down
Author Topic: Sm5100b SMS send and receive..  (Read 429 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:


#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 () {}
« Last Edit: December 04, 2012, 08:17:00 am by camac » Logged

Pages: [1]   Go Up
Jump to: