Go Down

Topic: Duda sobre Optimizar Código (Read 161 times) previous topic - next topic

Gamers2k

Mar 13, 2019, 04:55 am Last Edit: Mar 13, 2019, 07:26 am by Gamers2k
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 :smiley-confuse: ) o debo agregar algo mas, estaré agradecido de toda la ayuda o sugerencias que puedan brindarme.


aqui dejo el codigo

Code: [Select]
#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();
  }



Kike_GL

Lo primero que te recomendaria es darle AutoFormato en el IDE, asi notaras que te sobre una llave al final del loop().

Para almacenar un numero de pin no se requiere int basta con byte y ponla constante
Code: [Select]

const byte led1 = 10;
const byte led2 = 11;
const byte led3 = 12;
const byte led4 = 13;


Cuando debes preguntar por muchos valores que puede tomar una variable es mas logico usar el condicional multiple:

Code: [Select]

switch (data){
case 'A':
   digitalWrite(led1, HIGH);
   break;
case 'B':
   digitalWrite(led1, LOW);
   break;
case 'C':
   digitalWrite(led2, HIGH);
   break;
***
}


Saludos, Kike_GL

Jhony9625

Ya que veo esto siempre he tenido la duda sobre qué diferencia hay entre colocar una variable como constante o no. Siempre he tenido la suposición de que es por cuestiones de espacio en memoria o le facilita algunas cosas al micro pero nunca he estado seguro de ello. Podrías explicarme Kike? Por favor.

Kike_GL

La palabra clave const significa constante.

Es un calificador variable que modifica el comportamiento de la variable, haciendo que sea una variable de sólo lectura. Esto significa que la variable se puede usarse como cualquier otra variable de este tipo, pero su valor no se puede ser cambiado.

El IDE dara un error de compilación si se intenta asignar un nuevo valor a una variable const lo que protege al programador contra un posible error.

La otra ventaja es que la variable sera almacenada en memoria FLASH en lugar de SRAM.
Saludos, Kike_GL

Jhony9625

Muchísimas gracias Kike me haz quitado una duda que tenía por años jeje

Go Up