Shell GSM Sim 900 y Arduino.

Hola a todos.

Estoy jugando (y aprendiendo) con un Uno y un GSm Sim 900 y tengo dos "pequeños" problemas.

El primero es que los mensajes que envia estan cortados, no los envía enteros (la variable si tiene el valor completo ya que la escribo ademas en el monitor serie del arduino) y la segunda y que mas me preocupa es si sabeis si hay manera de pulsar el Powerkey de la placa SIM por software en alguna de sus patillas, sin tener que cortocircuitar el pulsador fisicamente por medio de relés o semejante.

Nada mas. Recurro a vosotros a ver si alguno me podeis ayudar. Gracias por la paciencia.
Saludos.
 
Hola, Robert.
Ante todo, gracias por la respuesta.
Respecto a la primera, efectivamente sin el código poco vas a poder decirme.

Lo posteo y me cuentas. El problema es que el mensaje debería de escribir esto:
"Dia: 24 Mes:08 Año: 2017 Hora:16 Minuto:37 Segundo:02"
Pero sólo manda esto:
"Dia: 24 Mes:08 " y no sé por qué.

El código es el siguiente. Supongo que no será muy eficiente, pero ya te dije que estoy aprendiendo, o por lo menos intentándolo.

PHP:
//Para el Reloj
#include <Wire.h> 
#include "RTClib.h"

//Para el GSM
#include <SoftwareSerial.h>
#include <String.h>

SoftwareSerial mySerial(7, 8);

// Para el reloj
RTC_DS1307 RTC;
String completa;
String inter;
int l;


void setup ()
{
//Para el reloj
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)

Serial.begin(19200); // Establece la velocidad de datos del puerto serie


//Para GSM
mySerial.begin(19200);                
delay(1000);  //Mientras busca Red

}

void loop()
{
//Para el reloj
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
completa="";

//Dia
inter=(now.day());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+"Dia: " + inter;

//Mes

inter=(now.month());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+ " Mes:" + inter;


// Año

inter=(now.year());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+ " Año: " + inter;



// Hora

inter=(now.hour());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+ " Hora:" + inter;


// Minuto

inter=(now.minute());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+ " Minuto:" + inter;


// Segundo

inter=(now.second());
l=inter.length();
if(l==1)
{  
  inter="0"+inter; 
}
completa=completa+ " Segundo:" + inter;


Mensaje(completa);
delay(300);
llamar();

Serial.println(completa);   

delay(300000);

/*Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');

Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
*/
}


void Mensaje(String todo)
{
  mySerial.print("AT+CMGF=1\r");    
  delay(100);
  mySerial.println("AT + CMGS = \"+34693000672\"");
  delay(100);
  mySerial.println(todo);
  delay(100);
  mySerial.println((char)26);
  delay(100);
  mySerial.println();
}



void llamar()
{
  mySerial.println("ATD + +34693000672;");//dial the number
  delay(100);
  mySerial.println();
}
Y con respecto a la segunda cuestión, por lo que he entendido (no me llevo muy bien con el inglés y con el hablado ni te digo) puenteando el jumper, se queda el pin 9 para encender y apagar el modulo.
El problema es que no es el mismo modelo.
Te adjunto una foto con lo que podría ser el jumper, pero no lo sé. ¿Hay manera de comprobarlo?

Nada más. Una vez más, gracias por la paciencia.
 

Adjuntos

  • 4392c279-e928-4c2e-958c-75f2a593a7d7.jpg
    4392c279-e928-4c2e-958c-75f2a593a7d7.jpg
    119.4 KB · Visitas: 13
Última edición por un moderador:
Atrás
Arriba