Go Down

Topic: Arduino Uno + Sim900+ time Alarms (Read 3151 times) previous topic - next topic

surbyte

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);
    }
}

jazpiroz

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?????

surbyte

Segunda vez que dices que el mensaje es "NOTI-ONN" pero no tienen ningún mensaje con esa etiqueta pero si
"NOTI-ON"


jazpiroz

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;
    }
}

surbyte

El código esta bien. Podría manejarse sin el uso de Strings pero con ellos te sientes cómodo asi que adelante.

AlexLPD

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.

surbyte

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.

jazpiroz

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



jazpiroz

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!!




jazpiroz

Estimados, la solución fue pasarme para el Arduino Mega. Ahora tengo otros problemas.
Voy a abrir otro hilo para consultar.
Gracias,

jazpiroz

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:




jazpiroz

#26
May 29, 2018, 02:46 pm Last Edit: May 29, 2018, 02:50 pm by jazpiroz
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);

jazpiroz

Estimados,

No logro hacer funcionar el Arduino MEGA con el shield : Shield SIM 900

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
 


vffgaston

Hola Juan,
Y el mega sin nada: ¿te funciona?
Saludos

jazpiroz

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.


Go Up