Hola, soy nuevo en el mundo de Arduino y la programación, estoy haciendo un proyecto donde enciendo bombillos utilizando una interfaz hecha en visual y realizando la comunicación vía usb, ahora le agregue un modulo Sim800l, para hacer el encendido o apagado vía remota, el código que tengo cumple con la función enciende y apaga los bombillos, pero noto que a veces tarda mucho en ejecutar la instrucción (Por el Modulo Sim800l) se que esto depende mucho de las compañias telefonicas, pero como soy nuevo me entra la duda si es que debo optimizar el código (lo mas Probable ) o debo agregar algo mas, estaré agradecido de toda la ayuda o sugerencias que puedan brindarme.
aqui dejo el codigo
#include<SoftwareSerial.h>//Incluimos la libreria Software Serial
SoftwareSerial SIM800L(8,9); //Instanciamos el objeto SIM800L y le pasamos los parametros de los pines TX y RX
String valor; //Declaramos la variable de tipo String valor.
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
int data;
void setup() {
Serial.begin(9600); //SE CONTROLA A 9600 BAUDIOS//
SIM800L.begin(9600); //Inicializamos la segunda comunicacion Serial.
SIM800L.println("AT+CMGF=1\r"); //Vamos utilizar los SMS.
delay(100); //Delay de 0.1 sec
SIM800L.println("AT+CNMI=1,2,0,0,0"); //Configurar el SIM800L p/ que muestre msm por com. serie.
pinMode(led1,OUTPUT); //LED1 COMO SALIDA
pinMode(led2,OUTPUT); //LED2 COMO SALIDA
pinMode(led3,OUTPUT); //LED3 COMO SALIDA
pinMode(led4,OUTPUT); //LED4 COMO SALIDA
}
void loop() {
if(Serial.available()){
data = Serial.read();
if(data == 'A'){ //ENCIENDE LED10//
digitalWrite(led1,HIGH);
}
if(data=='B'){ //APAGA LED10//
digitalWrite(led1,LOW);
}
if(data=='C'){ //ENCIENDE LED11//
digitalWrite(led2,HIGH);
}
if(data=='D'){ //APAGA LED11//
digitalWrite(led2,LOW);
}
if(data=='E'){ //ENCIENDE LED12//
digitalWrite(led3,HIGH);
}
if(data=='F'){ //APAGA LED12//
digitalWrite(led3,LOW);
}
if(data=='G'){ //ENCIENDE LED13//
digitalWrite(led4,HIGH);
}
if(data=='H'){ //APAGA LED13//
digitalWrite(led4,LOW);
}
if(data=='I'){ //ENCIENDE LED10, LED 11,LED 12, LED 13 //
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,HIGH);
}
if(data=='J'){ //APAGA LED10, LED 11,LED 12, LED 13//
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
}
if(SIM800L.available()){
valor = SIM800L.readString(); //Guardar en la var valor el sms que recibe el Arduino
Serial.println(valor); //Imprime ese SMS en el monitor Serial
}
if(valor.indexOf("Encender luz sala")>=0){ //Si la var valor tiene la palabra Encender luz sala hace esto:
digitalWrite(led1, HIGH); //Se enciende el pin 10.
Serial.println("La Luz de la Sala se Encendio"); //Immprime el mensaje
valor="La Luz de la Sala se Encendio";
envioMensaje(valor);
delay(100);
}
if(valor.indexOf("Apagar luz sala")>=0){ //Si la var valor tiene la palabra Apagar luz sala hace esto:
digitalWrite(led1, LOW); //Se apaga el pin 10.
Serial.println("La Luz de la Sala se Apago"); //Immprime el mensaje
valor="La Luz de la Sala se Apago";
envioMensaje(valor);
delay(100);
}
if(valor.indexOf("Encender luz comedor")>=0){ //Si la var valor tiene la palabra Encender luz comedor hace esto:
digitalWrite(led2, HIGH); //Se enciende el pin 11.
Serial.println("La Luz del Comedor se Encendio"); //Immprime el mensaje
valor="La Luz del Comedor se Encendio";
envioMensaje(valor);
}
if(valor.indexOf("Apagar luz comedor")>=0){ //Si la var valor tiene la palabra Apagar luz comedor hace esto:
digitalWrite(led2, LOW); //Se apaga el pin 11.
Serial.println("La Luz del Comedor se Apago"); //Immprime el mensaje
valor="La Luz del Comedor se Apago";
envioMensaje(valor);
}
if(valor.indexOf("Encender luz habitacion principal")>=0){ //Si la var valor tiene la palabra Encender luz jardin hace esto:
digitalWrite(led3, HIGH); //Se enciende el pin 12.
Serial.println("La Luz de la Habitacion Principal se Encendio"); //Immprime el mensaje
valor="La Luz de la Habitacion Principal se Encendio";
envioMensaje(valor);
}
if(valor.indexOf("Apagar luz habitacion principal")>=0){ //Si la var valor tiene la palabra Apagar luz jardin hace esto:
digitalWrite(led3, LOW); //Se apaga el pin 12.
Serial.println("La Luz de la Habitacion Principal se Apago"); //Immprime el mensaje
valor="La Luz de la Habitacion Principal se Apago";
envioMensaje(valor);
}
if(valor.indexOf("Encender luz habitacion secundaria")>=0){ //Si la var valor tiene la palabra Encender luz garaje hace esto:
digitalWrite(led4, HIGH); //Se enciende el pin 13.
Serial.println("La Luz de la Habitacion Secundaria se Encendio"); //Immprime el mensaje
valor="La Luz de la Habitacion Secundaria se Encendio";
envioMensaje(valor);
}
if(valor.indexOf("Apagar luz habitacion secundaria")>=0){ //Si la var valor tiene la palabra Apagar luz garaje hace esto:
digitalWrite(led4, LOW); //Se apaga el pin 13.
Serial.println("La Luz de la Habitacion Secundaria se apago"); //Immprime el mensaje
valor="La Luz de la Habitacion Secundaria se Apago";
envioMensaje(valor);
}
if(valor.indexOf("Encendido total")>=0){ //Si la var valor tiene la palabra Encendido total hace esto:
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH); //Se encienden los pines 10-13.
Serial.println("Todos los Ambientes de la Casa Encendidos"); //Immprime el mensaje
valor="Luz de todos los Ambientes Encendidas";
envioMensaje(valor);
}
if(valor.indexOf("Apagado total")>=0){ //Si la var valor tiene la palabra Apagado total hace esto:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW); //Se apagan los pines 10- 13.
Serial.println("Todos los Ambientes de la Casa Apagados"); //Immprime el mensaje
valor="Luz de todos los Ambientes Apagadas";
envioMensaje(valor);
}
}
}
void envioMensaje(String valor) {
SIM800L.println("AT+CMGS=\"+XXXXXXXXXXXXXXX\"\r");//reemplzar por el número a enviar el mensaje
delay(200);
SIM800L.println(valor);// Reemplzar por el texto a enviar
delay(200);
//Finalizamos este comando con el caracter de sustitución (→) código Ascii 26 para el envio del SMS
SIM800L.println((char)26);
delay(200);
SIM800L.println();
}