Arduino Forum

International => Español => Software => Topic started by: jazpiroz on May 22, 2018, 02:31 pm

Title: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 22, 2018, 02:31 pm
Estimados, buenos días!, les consulto por el siguiente problema:

Estoy desarrollando un proyecto que mediante un sms prende o apaga un relé. Como estoy usando sms, tengo un mensaje donde habilita o no las notificaciones, esto es: el sistema me contesta con el un sms por ejemplo el estado del mismo.
El flujo correcto debería ser:
Se envía sms para setear alarma que prende relé
El sistema prende relé
Se envía sms para saber estado, el sistema devuelve estado
La habilitación de las notificaciones se debería poder hacer en cualquier momento.

Si el flujo es:
1) Envio de sms para setear alarma que prende rele
2) Alarma se ejecuta correctamente

Si ejecuto el siguiente flujo, la alarma no se dispara.

1) Envio de sms para habilitar notificaciones, el sistema me devuelve NOTI ONN, esto es correcto
2) Envío de sms para setear alarma que prende relé, la alarma no se dispara nunca

Si ejecuto el siguiente flujo

1) Envio de sms para setear alarma que prende rele, alarma se está ejecutando por X tiempo
2) Envio de sms para habilitar notificaciones, el sistema me devuelve NOTI ONN, esto es correcto
3) Envío de sms para consultar estado, el sistema contesta correctamente

Desde ya muchas gracias!!

Adjunto código en Mensaje Siguiente:
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 22, 2018, 02:36 pm

Code: [Select]
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
#include <Time.h>
#include <TimeLib.h>
#include <TimeAlarms.h>

#include "RTClib.h"


//------------ gsm
char incoming_char=0;
String smsRecibo;
int largo;
String mensaje;
String buffer;
String mensajeRecibido;
int automatico;
int notificaciones;
String nroDetectado;

int myReleeA = 13; //releA
int myReleeB = 6; //releB
int myReleeC;
int myReleeD;
int rele2;

//-programar Alarmas
RTC_DS1307 rtc;
AlarmID_t alarmaA1Onn;
AlarmID_t alarmaA1Off;
AlarmID_t alarmaA1Onn8;
AlarmID_t alarmaA1Off8;

int hora;
int minuto;
String horaDetectada;
String salida;
String dia;

String HoraEnviada;
String diaSemana;
String accionSalida;
int tiempoEnv;
int diaEnviado;
String tiempoEnviado;
String programRecibido;

int horaApagado;
int minutoApagado;
int resto;
int resta;
int divide;

String estadoAlarmaA1;
String estadoAlarmaA2;

void setup()
{
   Serial.begin(9600);
   Alarm.delay(3000);  
   alarmaA1Onn = Alarm.alarmRepeat(hora,minuto,0, enciendeReleA1);
   alarmaA1Off = Alarm.alarmRepeat(horaApagado,minutoApagado,0, apagaReleA1);  
  
   powerUpOrDown(); //enciende sim900  
 
  mySerial.begin(19200); // for GSMshield
  Alarm.delay(1000);
  mySerial.print("AT+CMGF=1\r");  // set SMS mode to text
  Alarm.delay(1000);
  mySerial.print("AT+CNMI=2,2,0,0,0\r");    
  
  Alarm.delay(100);  
  pinMode(13, OUTPUT);
 
  pinMode(myReleeA, OUTPUT);
  pinMode(myReleeB, OUTPUT);
  digitalWrite(myReleeA, LOW);
  digitalWrite(myReleeB, HIGH);
    
  buffer = "";
  automatico=0;
  notificaciones = 0;

 if (! rtc.begin()) {
 Serial.println("No hay un módulo RTC");
 while (1);
 }
  DateTime now = rtc.now();
  setTime(now.hour(), now.minute(), now.second(), now.month(), now.day(), now.year()); 
 Serial.println(now.day(), DEC);
 Serial.println(now.month(), DEC);
 Serial.println(now.year(),DEC);
}
void loop()
{    
  char SerialInByte;  
  if(mySerial.available() >0)
  {
   Serial.println("disponible");
   buffer = "";
   readSIM900A();
  
    //Habilita las notificaciones por SMS
    int elenotion = buffer.indexOf("NOTI-ON"); //para encender notificaciones
  
      if (elenotion>=0)
      {      
      notificaciones = 1; //habilita notificaciones
      mensaje = "NOTIF ON";
      mensaje_sms(mensaje);
      }

      int elementoNotiOf = buffer.indexOf("NOTI-OFF"); //para encender notificaciones
    
      if (elementoNotiOf>=0)
      {
      mensaje = F("NOTIF OFF");  
      mensaje_sms(mensaje);
      notificaciones = 0; //deshabilita notificaciones      
      }    
    
    int elementoTiempo = buffer.indexOf("IA1");                                       
    if (elementoTiempo>=0)
      {
        capturaEvento();
        mensaje= programRecibido;        
        mensaje_sms(mensaje);               
        armoHoras();        
        setAlarmaIA1();        
      }

    int elementoTiempoA2 = buffer.indexOf("IA2");                                      
    if (elementoTiempoA2>=0)
      {        
        estadoAlarmaA2="";
        capturaEvento();
        mensaje= programRecibido;        
        mensaje_sms(mensaje);               
        armoHoras();        
        setAlarmaIA2();        
      }
   //consultas estado
  int elementoConsultaA1 = buffer.indexOf("CA1");                                       
    if (elementoConsultaA1>=0)
      {
        Serial.println(buffer);
        mensaje= estadoAlarmaA1; mensaje_sms(mensaje);        
      }      
  }   
}

//lee los characteres del mensaje y los mete en un buffer
String readSIM900A()
{
  buffer = "";
   while (mySerial.available())
    {      
        char c = mySerial.read();
        buffer.concat(c);      
        Alarm.delay(10);        
    }    
    mensajeRecibido = buffer;
    return buffer;    
}

void enciendeReleA1()
{
  Serial.println("Enciende rele A1-------------------------------");
  digitalWrite(myReleeA, HIGH);  
  setEstadoAlarmaA1();  
}

void enciendeReleA2()
{
  Serial.println("Enciende rele A1--------------por alarma 2-----------------");
  digitalWrite(myReleeA, HIGH);
  setEstadoAlarmaA2();  
}

// Apaga Reles ----

void apagaReleA1()
{
  Serial.println("Apaga rele A1 ++++++++++++++++++++++++++++++");
  digitalWrite(myReleeA, LOW);    
  duermeEstadoAlarmaA1();
  
}

void apagaReleA2()
{
  Serial.println("apaga rele A1--------------por alarma 2-----------------");
  digitalWrite(myReleeA, LOW);    
  //duermeEstadoAlarmaA2();
  //duermeEstadoAlarmaB2();
}



void mensaje_sms(String mensaje)
   {
    
      capturaNroEnviado();      
      String nroEnvio2 = "AT+CMGS=\"+" + String(nroDetectado);
      nroEnvio2.concat("\"");          
      if (notificaciones == 1)
      {    
      Serial.println("Enviando SMS...");    
      mySerial.print("AT+CMGF=1\r");  //Configura el modo texto para enviar o recibir mensajes
      Alarm.delay(1000);
      //mySerial.println("AT+CMGS=\"+11111111111\"");  //Numero al que vamos a enviar el mensaje
      mySerial.println(nroEnvio2);  //Numero al que vamos a enviar el mensaje
      Alarm.delay(1000);
      mySerial.println(mensaje);  // Texto del SMS
      Alarm.delay(100);
      mySerial.println((char)26); //Comando de finalización ^Z
      Alarm.delay(100);
      mySerial.println();
      Alarm.delay(5000);  // Esperamos un tiempo para que envíe el SMS    
      }
    
   }

void capturaNroEnviado()
{
  int elementoComilla = mensajeRecibido.indexOf('5');  
  int elementoSegundaComilla =  mensajeRecibido.indexOf('"',elementoComilla);
  
  nroDetectado = mensajeRecibido.substring(elementoComilla,21);  
  Alarm.delay(100);
  }

void powerUpOrDown()
{
    pinMode(9, OUTPUT);
    digitalWrite(9,LOW);
    Alarm.delay(1000);
    digitalWrite(9,HIGH);
    Alarm.delay(5000); //era 5000
    digitalWrite(9,LOW);
    Alarm.delay(3000);
}

void capturaEvento()
{
  //int elementoAsterisco = mensajeRecibido.indexOf('#');  
  accionSalida = mensajeRecibido.substring(49,53);
  diaSemana = mensajeRecibido.substring(54,55);
  HoraEnviada = mensajeRecibido.substring(56,60);
  tiempoEnviado = mensajeRecibido.substring(61,63);

  programRecibido = "#S"+accionSalida+"#D"+diaSemana+"#H"+HoraEnviada+"#T"+tiempoEnviado;
    
}


void armoHoras(){
  hora  = HoraEnviada.substring(0,2).toInt();
  minuto  = HoraEnviada.substring(2,4).toInt();
  tiempoEnv = tiempoEnviado.toInt();
  diaEnviado = diaSemana.toInt();
    
  
  if (diaEnviado >=0 and diaEnviado <=9){
  //  Serial.println("dia entre 1 y 7");
  resta = 60 - tiempoEnv;
  if (resta < 60){
    Serial.println("resta menor de 60");
    horaApagado = HoraEnviada.substring(0,2).toInt();
    minutoApagado = HoraEnviada.substring(2,4).toInt()+tiempoEnv;
  }
  if (tiempoEnv >= 60 and tiempoEnv <=900){
    Serial.println("tiempo enviado mayor de 60");
      resto = tiempoEnv % 60;
      divide = tiempoEnv / 60;
      horaApagado = HoraEnviada.substring(0,2).toInt() + divide;
      minutoApagado = HoraEnviada.substring(2,4).toInt()+ resto;
      
      if (horaApagado = 23 and minutoApagado >59){
        minutoApagado = 59;
      }
      if (horaApagado > 24){
        horaApagado = 24;
        minutoApagado = 0;
      }
  }
  
}
}


 void setAlarmaIA1(){  //Salida 1 : Alarma1
   //guardo valores: hora,minuto y hora minuto apagado
   //guard dia
    
    Serial.println("-----------");
    Serial.println(horaApagado);
    Serial.println(minutoApagado);
    Serial.println("-----------");
    
    if (diaEnviado == 0){
    Serial.println("Cerooooo");  
    Alarm.disable(alarmaA1Onn);
    Alarm.free(alarmaA1Onn);
    Alarm.disable(alarmaA1Off);
    Alarm.free(alarmaA1Off);            
    alarmaA1Onn = Alarm.alarmRepeat(hora,minuto,0, enciendeReleA1);
    alarmaA1Off = Alarm.alarmRepeat(horaApagado,minutoApagado,0, apagaReleA1);
    }
}


void setEstadoAlarmaA1(){
  estadoAlarmaA1 = "#S"+accionSalida+"#D"+diaSemana+"#H"+HoraEnviada+"#T"+tiempoEnviado;
 
}

void duermeEstadoAlarmaA1(){  
  estadoAlarmaA1 = "Espera "+accionSalida+ "/" + diaSemana +"/"+ HoraEnviada +"/"+ tiempoEnviado;
}

void liberarAlarmas(){

}
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 22, 2018, 09:45 pm
Puede ser que está influyendo los momentos que modifco la velocidad del serial??, ya que para el sim900 es 115200 ....
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 01:30 am
Tengo errores con los procedimientos


Code: [Select]
setEstadoAlarmaA2();
 dice que no esta definido

setAlarmaIA2() tampoco
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 10:37 am
Comentalos, serían para la segunda alarma,
Gracias,
Saludos
Juan
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 02:26 pm
Es curioso, vienes con un problema y colocas un código que no compila. Entonces no entiendo qué has comprobado o hasta donde poder creer lo que dices en el primer post?

La compilación arrojó que no ocupa mas del 50% de la RAM de modo que si hay problemas se debe ha algun error de creación de objetos.
Hasta que valor has permitido que TimeAlarms genere alarmas, o mejor dicho que valor has puesto en le .h de TimeAlarms?
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 02:46 pm
Estimado, el código que tengo tiene mas de 1068 líneas, donde el sitio no me deja subir por la cantidad de caracteres que tengo, por este motivo hice un recorte. Esa es la parte curiosa.

Pruebas he realizado muchas y por este motivo como última opción salí a pedir ayuda a gente que evidentemente sabe mucho mas que uno.


Ahora bien, como comentaba en los post anteriores, si utilizo el flujo 1 y 3 funciona correctamente, pero lo ideal sería que en cualquier momento, el usuario habilite o no las notificaciones. Para esta realidad, si el usuario lo primero que hace es habilitar las notificaciones.
Luego setear alarmas, la alarma no funciona.

En la h de time alarms, hoy en la mañana probé dejando solamente 6, la que tenia hasta ayer era 20.

Gracias por tu tiempo


Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 02:49 pm
Ahh ok o sea que lo que hice no sirvió para nada!!

Sube el código completo como adjunto, vamos que cuando un código no puede subirse se sube como adjunto y claro que esta bien asi hacerlo.

Sin el código no se puede evaluar nada.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 02:57 pm
ok, adjunto el código, lo pasé  como un txt.
gracias
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 04:15 pm
Bueno, he logrado compilar el código agregando al comienzo las funciones que me daban error que te señalé antes.

El reporte de mi compilador dice

Code: [Select]

Program:   14218 bytes (43.4% Full)
(.text + .data + .bootloader)

Data:       1106 bytes (54.0% Full)
(.data + .bss + .noinit)
 [SUCCESS] Took 5.17 seconds


Lo que indica que estas al 54% de RAM en uso.

Necesito saber que Arduino usas, por lo visto es un UNO o un NANO no?

Estoy viendo el código.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 04:23 pm
Arduino UNO
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 04:44 pm
Lo primero que no me gusta es la cantidad de Strings que usas y no veo que en ningún sitio los inicialices.

Code: [Select]
String horaDetectada;
String salida;
String dia;

String HoraEnviada;
String diaSemana;
String accionSalida;

String tiempoEnviado;
String programRecibido;

String estadoAlarmaA1;
String estadoAlarmaA2;

String estadoAlarmaB1;
String estadoAlarmaB2;

String estadoAlarmaC1;
String estadoAlarmaC2;

String estadoAlarmaD1;
String estadoAlarmaD2;


Posibildad de problemas conforme el código funciona.

Tienes comentados lugares donde los Strings eran puestos a 0 como este

Code: [Select]
if (elementoTiempo>=0)  {
      //Serial.println("llego mensaje");     
      //estadoAlarmaA1="";                   // <=== NO se porque lo comentaste
      capturaEvento();
      mensaje= programRecibido;       
      mensaje_sms(mensaje);
             
      armoHoras();       
      setAlarmaIA1();       
    }
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 04:48 pm
ese caso de la variable comentada, era para una vez que lee el sms, el estado vuelva a vacío.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 04:52 pm
Bueno, yo encararía varias cosas de otro modo pero no se si eso resuelve el problema y no se como probarlo sin tener que armar todo lo que tu tienes.
Ejemplo no usaría Strings al menos no tantos como tu usas.
Y si usaría vectores fijos de dimensión establecida y luego los armo con sprintf similar a tu composición de concatenación de datos usando + como por ejemplo acá

Code: [Select]
programRecibido = "#S"+accionSalida+"#D"+diaSemana+"#H"+HoraEnviada+"#T"+tiempoEnviado;

Se me dificulta probar el código y ver en que falla.

Veré si me hago un tiempo y monto la placa SIM para comprobarlo.

Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 05:19 pm
Entiendo lo que decis, pero como tu dices no creo que esto solucione el problema, gracias de todos modos
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 05:34 pm
Olvidaré lo que dije antes y me concentro en tu consulta.
Las notificaciones.
Primero dices que con la secuencia NOTI ON se activa la notificacion = 1 y entonces devuelve un SMS. Okay y que eso lo recibe bien pero luego se detienen las Alarmas prefijadas.

Esto va para comprender tu código
Supongomos que enviaste NOTI ON y se activan las notificaciones.
Luego envias IA1 que supongo será para activar setAlarmaIA1
Si miras el código de setAlarmaIA1 te encuentras con que diaEnviado debe ser 0, porque? No veo que lo cambies en ningún momento y cuando lo envias puede valor desde 0 a 9? Tampoco entiendo porque 9

Code: [Select]
void setAlarmaIA1(){  //Salida 1 : Alarma1
   //guardo valores: hora,minuto y hora minuto apagado
   //guard dia
   
    Serial.println("-----------");
    Serial.println(horaApagado);
    Serial.println(minutoApagado);
    Serial.println("-----------");
   
    if (diaEnviado == 0){
        Serial.println("Cerooooo"); 
        Alarm.disable(alarmaA1Onn);
        Alarm.free(alarmaA1Onn);
        Alarm.disable(alarmaA1Off);
        Alarm.free(alarmaA1Off);           
        alarmaA1Onn = Alarm.alarmRepeat(hora,minuto,0, enciendeReleA1);
        alarmaA1Off = Alarm.alarmRepeat(horaApagado,minutoApagado,0, apagaReleA1);
    }
}
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 23, 2018, 05:47 pm
Una pista, una cosa rara que pasa es que cuando envías el mensaje : con el texto "IA1"

ejecuta 2 veces el envio de sms, pero a mi me llega solamente uno.

Esto no pasa cuando envías el mensaje "NOTI-ONN"

No estará pasando que esto está bloqueando algo?????
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 23, 2018, 05:49 pm
Segunda vez que dices que el mensaje es "NOTI-ONN" pero no tienen ningún mensaje con esa etiqueta pero si
"NOTI-ON"

Title: Arduino Uno + Sim 900 + Librería GSM_GPRSLibrary
Post by: jazpiroz on May 24, 2018, 05:17 pm
Estimados, estoy intentando usar otra librería para el manejo del sim900, hasta ahora lo hacía con comandos AT.


La duda que tengo, es que si el código es correcto, para obtener el sms y extraer los datos.
Desde ya muchas gracias,

Code: [Select]
#include "SIM900.h"
#include <SoftwareSerial.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"

//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to send and receive SMS.

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

int notificaciones;
char mensaje;
String nroDetectado;
String str;
char *p;

void setup()
{
  notificaciones = 0;
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true; 
  }
  else Serial.println("\nstatus=IDLE");
 
  if(started){
    //Enable this two lines if you want to send an SMS.
    //if (sms.SendSMS("1111111111", "Arduino SMS"))
    //Serial.println("\nSMS sent OK");
  }

};

void loop()
{
 
  if(started)
  {
    if(gsm.readSMS(smsbuffer, 160, n, 20))
    {
      Serial.println(n);
      Serial.println(smsbuffer);
     
      String str2(smsbuffer);
      str = str2;
      Serial.println("---------------");
      Serial.println(str);
      Serial.println("---------------");
      int elenotion = str.indexOf("NOTI-ON"); //para encender notificaciones
   
      if (elenotion>=0)
      {
      Serial.println("notificacinoes"); 
      notificaciones = 1; //habilita notificaciones
      mensaje = "NOTIF ON";
      mensaje_sms(mensaje);
      }
    }
   
  }
 
}

void capturaNroEnviado()
{
  int elementoComilla = str.indexOf('5'); 
  int elementoSegundaComilla =  str.indexOf('"',elementoComilla);
 
  nroDetectado = str.substring(elementoComilla,21);   
  delay(100);
  }


void mensaje_sms(char mensaje){
  if(started){
     capturaNroEnviado();
     string2char(nroDetectado);     

    //Enable this two lines if you want to send an SMS.
    if (sms.SendSMS(p, mensaje))
    Serial.println("\nSMS sent OK");
  }
}

 
char* string2char(String command){
    if(command.length()!=0){
        p = const_cast<char*>(command.c_str());
        return p;
    }
}
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 25, 2018, 12:18 am
El código esta bien. Podría manejarse sin el uso de Strings pero con ellos te sientes cómodo asi que adelante.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: AlexLPD on May 25, 2018, 06:22 am
Hola @Japiroz recientemente en otro programa he tenido problemas con la libreria Time Alarms,
no se si se tu caso, pero me daba mucha lata, asi que tuve que regresar a la vieja escuela y armarme mis timmers a mano, igual, si puedes probarlo estaría mas que bien.

Saludos.
-Alex.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: surbyte on May 25, 2018, 06:46 am
TimeAlarms permite 255 alarmas de modo que el problema pasa por otro lado siempre.
Y generalmente son el uso y abuso de Strings.
Pero acá el problema era que hay que esperar que el módulo SIM900 responda con un caracter ">" y jazpiroz no lo sabía.
Por eso ahora esta intentando trabajar con una librería GSMlib porque en lugar de poner delays sin criterio o excesivos, el sistema implementa la lectura del módulo SIM900 a cada comando AT enviado.
Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 26, 2018, 03:25 pm
Estimados, luego de la sugerencia de Subtype de usar la librería GSMSHIELD, logré estabilidad en mi proyecto, mas el tema de tener demasiado manejo de Strings, este combo hacía cosas raras.

Ahora bien, existe alguna forma de generar alarmas dinámicas?? con time alarms??

La idea sería la siguiente:

Declarar solamente 2 alarmas una para prender y otra para apagar, pero usar esto:

Alarm.alarmRepeat(dayofweek, hours, minutes, seconds, function);

donde dayofweek pueda ir cambiándolo yo, es decir crear una variable que tenga dayofweek y setee esto en la función.

Alarm.alarmRepeat(VariableDayofweek, hours, minutes, seconds, function);


Porque esto?? por las limitantes de memoria disponible que tengo,


desde ya mucha gracias a todos,

Saludos
Juan


Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 28, 2018, 03:58 pm
Estimados, estoy con problemas de memoria, estimo.

Code: [Select]
El Sketch usa 19216 bytes (59%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 1605 bytes (78%) de la memoria dinámica, dejando 443 bytes para las variables locales. El máximo es 2048 bytes.
Poca memoria disponible, se pueden producir problemas de estabilidad.




Estoy usando las siguiente librerías:

Code: [Select]
#include <SoftwareSerial.h>
#include "SIM900.h"
SoftwareSerial mySerial(7, 8);
#include "sms.h"
SMSGSM sms;
#include <TimeLib.h>
#include <TimeAlarms.h>
#include "RTClib.h"


Ahora bien existe alguna forma de recortar estas librerías????. tanto time alarms como smsgsm consumen un montón de memoria.

Aluna idea???
gracias!!



Title: Re: Arduino Uno + Sim900+ time Alarms
Post by: jazpiroz on May 29, 2018, 02:09 pm
Estimados, la solución fue pasarme para el Arduino Mega. Ahora tengo otros problemas.
Voy a abrir otro hilo para consultar.
Gracias,
Title: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 29, 2018, 02:17 pm
Tengo problema para conectar el sim900 al MEGA. De la forma que lo tengo conectado es jumper para habilitar 7 y 8 en el sim900. En el MEGA pin 7 y 8. Pin 9 del sim900 al pin 9 del MEGA para prendido automático.

La librería que había bajado y funcionaba correctamente para el UNO, para el MEGA no compilaba, Encontré en el foro que alguíen la había modificado para el MEGA por un error del serialH y la bajé. El scketch quedó compilado correctamente.

En el archivos GSM.ccp definí:
Code: [Select]
#define _GSM_TXPIN_ 7
#define _GSM_RXPIN_ 8


Cabe aclarar que no cambié nada está todo igual a como lo tenía en el UNO y funcionaba correctamente.

Desde ya muchas gracias!!!! a quien pueda arrojar un poco de luz!! :smiley-confuse:



Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 29, 2018, 02:46 pm
El serial monitor me devuelve esto:

Code: [Select]
Trying to force the baud-rate to 9600

1200
2400
4800
9600
19200
38400
57600
115200
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp


En el Sketch:

Code: [Select]

SoftwareSerial mySerial(7, 8);
Title: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 30, 2018, 03:03 pm
Estimados,

No logro hacer funcionar el Arduino MEGA con el shield : Shield SIM 900 (https://www.amazon.es/WINGONEER%C2%AE-M%C3%B3dulos-cu%C3%A1druple-Desarrollo-adaptador/dp/B06W2L4MQF)

La librería que estoy utilizando es la GSMSHIELD (Marcos).
En la librería descomenté las líneas que referían a utilizar el MEGA.


He buscado por todos lados y no logro encontrar un esquema que me funcione.
Si a alguien le pasó por favor que nos cuente como solucionar esto,
desde ya muchas gracias,
Saludos
Juan
 

Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: vffgaston on May 30, 2018, 03:05 pm
Hola Juan,
Y el mega sin nada: ¿te funciona?
Saludos
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 30, 2018, 03:15 pm
Si si, funcione ok, lo raro es que el esquema de:

shield arduino uno
7        7
8        8


Jumpers: comunicación Serial.


usando la misma librería funcionó a la perfección.

Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: Esfinterman on May 30, 2018, 03:24 pm
Hola. Los módulos apilables suelen diseñarse para Arduino UNO únicamente. Tengo un módulo CAN BUS que aún no he puesto a funcionar y los desarrolladores dicen que "solamente" vale para la UNO. Para usarlo en una Leonardo o una MEGA, hay que cortar unos pines y tirar unos cables, y viene siendo por el motivo de que los pines de comunicación entre módulo y placa, son distintos si se una una UNO, MEGA o Leonardo. Por eso es posible que no hagas funcionar el módulo. ¿Tienes una placa UNO para hacer pruebas y descartar que esté roto el módulo? ;)
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 30, 2018, 03:31 pm
En el uno funcionar perfectamente, no es necesario apilarlo, puedo darle 5 voltios y gnd a parte,
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: vffgaston on May 30, 2018, 04:09 pm
son distintos si se una una UNO, MEGA o Leonardo
Algo así te iba a sugerir: no he usado nunca este tipo de módulos, pero si no me equivoco usan la comunicación serie, y el MEGA tiene varios enlaces serie en diferentes pines; es muy probable que los tiros vayan por ahí.

Saludos
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: Esfinterman on May 30, 2018, 04:38 pm
En el uno funcionar perfectamente, no es necesario apilarlo, puedo darle 5 voltios y gnd a parte,
¿Pero has probado a apilarlo en la UNO, meter un código y ver si este código funciona con el módulo? Me refería a eso concretamente, no a meterle tensión. ;)
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 30, 2018, 04:54 pm
En el uno no lo apilé, y funcionó perfectamente,
Gracias
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 30, 2018, 08:22 pm
Gente, alguna idea??? esto no me debe estar pasando a mi solamente no??
gracias,
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: vffgaston on May 31, 2018, 10:14 am
En el uno no lo apilé, y funcionó perfectamente,
Gracias
Hola.
Iba a citar la respuesta #6, pero desisto.
¿Nos puedes enviar un esquema de lo que hiciste con el UNO (la conexión)?
Saludos.
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 31, 2018, 01:49 pm
Estimados, el esquema que estoy utilizando es este:

SIM900 (https://www.amazon.es/WINGONEER%C2%AE-M%C3%B3dulos-cu%C3%A1druple-Desarrollo-adaptador/dp/B06W2L4MQF)



Esquema utilizado (https://www.hackster.io/mitov/send-and-receive-text-messages-sms-with-gsm-sim900-shield-6d53c6)

Pero no apilado.

Y el error que me está dando ahora es:

Code: [Select]
GSM Shield testing.
DB:NO RESP
DB:NO RESP
DB:NO RESP
Trying to force the baud-rate to 9600
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp
status=IDLE


Gracias por cualquier comentario,

Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: surbyte on May 31, 2018, 02:18 pm
Hola @jazpiroz, no comprendes que esa respuesta última que nos muestras te esta diciendo que tu MEGA y el SIM no se estan comunicando. Lo dice claramente SIM doesn´t answer. No responde!!!


Tienes problemas de comunicación, sea GND, RX y TX utilizados.

Si eso mismo funcionaba con el UNO y ahora no lo hace con el MEGA tu problema tal vez sea el siguiente.
El MEGA tiene 4 puertos serie asi que no uses SoftwareSerial. y entonces si usas Serial1 por ejemplo debes decirle adecuadamente a la librería que usará HardwareSerie y que es Serial1.
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 31, 2018, 02:37 pm
Estimado, que no responde esta claro, ahora bien lo que tu dices de Serial1 decirle a la librería como lo hago??, el esquema que estoy utilizando sería correcto para ese escenario?

Gracias
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: Esfinterman on May 31, 2018, 03:12 pm
He encontrado esta imagen. Es a lo que me refería:

(https://seeeddoc.github.io/CAN-BUS_Shield/img/CAN_BUS_SHIELD_MEGA.JPG)

Es cierto que esta imagen hace referencia al módulo CAN BUS, pero como se trata de temas de comunicación, es posible que tu problema sea el mismo que el de esta placa. Te adjunto también el enlace donde encontré la foto, porque ahí viene algo. No sé qué dice, porque no hablo inglés, pero seguro que dice el porqué. ;)

https://seeeddoc.github.io/CAN-BUS_Shield (https://seeeddoc.github.io/CAN-BUS_Shield)
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: surbyte on May 31, 2018, 04:09 pm
De que hablas @sfinterman?

El problema es que el usaba SoftwareSerial en el UNO. Luego pasó a un Mega y pretende usar SoftwareSerial en uno de los puertos Hardware y que esperas que ocurra? Obvio no va a funcionar.
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 31, 2018, 04:32 pm
Please !!!
El esquema que uso esta correcto???
En en el archivo gsm.ccp

Code: [Select]
//De-comment this two lines below if you have the
//second version og GSM GPRS Shield
#define _GSM_TXPIN_ 18
#define _GSM_RXPIN_ 19


Algunas idea???
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: surbyte on May 31, 2018, 05:00 pm
Si es el correcto pero no le dices que estas usando Serial1.
Revisa

En GSM.h cambia esto

Code: [Select]
#define UNO
//#define MEGA


por esto

Code: [Select]
//#define UNO
#define MEGA


y en el archivo HWSerial.h tienes que cambiar esto

Code: [Select]
//#define MEGA

por esto
Code: [Select]

#define MEGA
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on May 31, 2018, 05:20 pm
Los tengo así,
Title: Re: Arduino MEGA + SIM900 + Librería GSMSHIELD (Marcos)
Post by: jazpiroz on Jun 01, 2018, 01:59 pm
Estimados, les paso la solución, por si a alguien le llega a pasar lo mismo, y quiere evitarse dolores de cabeza :

Sim900, alimentación independiente
Arduino MEGA, alimentación independiente

Jumpers, quitarlos
RX => Arduino MEGA: RX 19
TX => Arduino MEGA: RX 18

GSM.cpp:

//De-comment this two lines below if you have the
//second version og GSM GPRS Shield
#define _GSM_TXPIN_ 18
#define _GSM_RXPIN_ 19   

Definir MEGA en : HWSerial.h y en GSM.h


Utilicé el ejemplo : GSM_GPRSLibrary_SMS


Cualquier cosa quedo a las órdenes,

Saludos
Juan