Hi All,
I am a beginner for Arduino coding. I am using Arduino UNO and GSM/GPRS/BT shield. I am connecting a potentiometer to A0 pin. I want to get the potentiometer values when I send a Predefined SMS text to GSM (in this case "LEDON"). When I SMS "LEDON" to GSM, the device should return the potentiometer value through SMS. I am trying to modify the existing codes, but it didn't work. I need to complete this not late by coming Friday. Anybody pls help.
Thanks.
Code 1:
#include <SoftwareSerial.h>
SoftwareSerial gsm(7, 8); // RX, TX
//TinyGPS gps;
char numero_cell[]="+60105369493";//meter numero de telefono
int potentiometer=A0;
int value =0;
int i=0;
int j=0;
char DAT;
char DAT_dos;
float flat, flon;
unsigned long age;
char datosSERIAL[30];
//char clave_uno[]= "LEDON"; //OTRA FORMA DE USAR UN ARREGLO
char clave_uno[]={'L','E','D','O','N'};//AQUI CAMBIAMOS TODO EL MENSAJE DE CONTROL
void setup()
{
pinMode(potentiometer,INPUT);
Serial.begin(9600);
gsm.begin(9600);
delay(2000);
configuracion_inicial();
Serial.println("sistema de alarma EDITRONIKX SIM808 encendida");
delay(1000);
}
/////////////////////////
void loop()
{
value = analogRead(potentiometer);
Serial.println(value, DEC);
Serial.println("esperando recibir mensaje...");
while(true)
{
leer_mensaje();
}
}
///////////////////////
void configuracion_inicial()//configura los codigos de lectura de mensajes
{
gsm.println("AT+IPR=9600");
Serial.println("AT+IPR=9600");
delay(500);
gsm.println("AT+CMGF=1");//modo texto
Serial.println("AT+CMGF=1");//modo texto
delay(500);
gsm.println("AT+CMGR=?");//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
Serial.println("AT+CMGR=?");//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
delay(500);
gsm.println("AT+CNMI=2,2,0,0");//ACTIVAMOS PARA VER MENSAJES
Serial.println("AT+CNMI=2,2,0,0");//ACTIVAMOS PARA VER MENSAJES
delay(500);
Serial.println("configuracion terminada");
delay(300);
/////////////////activar gps desde el inicio
gsm.println("AT+CGNSPWR=1");// activo gps
Serial.println("AT+CGNSPWR=1");// activo gps
// gsm.println("AT+CGNSPWR=1");// activo gps
//Serial.println(" AT + CGNSTST =1");
delay(400);
}
///////////////////
void leer_mensaje()
{
salir:
if (gsm.available()>0)
{
char DAT =gsm.read();
if(DAT=='@')//the at sign detects the beginning of the code
{
Serial.println("I arrive data");//to see if I detect it
//////////////////////
while(true)//enter in a while to read only the future codes that are to come after the at
{
if (gsm.available()>0)
{//cierre del segundo if
char DAT_dos =gsm.read();//@LEDON enter
datosSERIAL[j]= DAT_dos;//almacena en cadena de caracteres, suma de caracteres
j++;
//////////////////////////
if (DAT_dos=='\n')//cuando termine de entregar todos los datos dara un enter
//garantizando el final del codigo
{
Serial.println("Lectura correcta del codigo enviado:");//IMPRIME LOS CARACTERES ALMACENADOS PARA VER SI TODO ESTA OK
for(int i=0;i<=j;i++)
{
Serial.print(datosSERIAL[i]);//IMPRIME TODO EL CODIGO GUARDADO EN EL ARRAY
}
led_on();//llama a la la funcion y verifica codigo
// led_off();//llama ala funcion para ver si es de apagar el led
// gps_on();//verifica si es codigo de activacion de gps
//digitalWrite(estado,LOW); //apaga el led despues de verificar
for(int i=0;i<=j;i++)
{
datosSERIAL[i]==0;//borro array
DAT_dos=0;
DAT=0;
}
j=0;//borra el puntero o acumulador si no se hace esto no detecta los sigueintes codigos
goto salir;//sale de todos los ciclos y va al inicio para volver a leer codigo
}//CIERRA AL /N
////////////////////////
} //cierre del segundo if
}//while
}//arroba
}//serial available
}
void led_on()
{
/////////////////////////
if(datosSERIAL[0]==clave_uno[0] && datosSERIAL[1]==clave_uno[1] && datosSERIAL[2]==clave_uno[2] && datosSERIAL[3]==clave_uno[3] && datosSERIAL[4]==clave_uno[4])
{
gsm.print(value);
//digitalWrite(led,HIGH);
// Serial.println(" LED ACTIVADO.....");
mensaje_encendido();
}
else Serial.println(" codigo incorrecto led on");
}
void mensaje_encendido()
{
gsm.println("AT+CMGF=1");//modo texto
//Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro
delay(1000);
gsm.print("AT+CMGS=");// comando de envio de mensaje a un numero determinado
delay(1000);
//Imprime los datos al puerto serie como texto ASCII
gsm.print((char)34);//ponemos las comillas ", para que lo tome debe ser char de lo contrario el serial envia caracter por caracter
gsm.print(numero_cell);//colocamos numero de telefono
gsm.println((char)34);//volvemos a poner el caracter "
delay(1000);//tiempo para que de respuesta el modulo >
gsm.print("led encendido");//mensaje que enviare
gsm.print((char)26);//ponemos el simbolo ascii 26,que corresponde a CTRL+Z,con lo que el modulo sabe que el sms termino
Serial.print("led encendido");//mensaje que enviare
}