Oi pessoal, 

estou brigando com uma plaquinha gprs.

estou usando um biblioteca onde tem a função de ler torpedo...readSMS, mas não funciona...que dizer, funcionou duas vezes e só.

Alguem conhece esse projeto? http://code.google.com/p/gsm-shield-arduino

Estou utilizando ele e os exemplos...mas o exemplo abaixo onde le os torpedos nao rola.

Abraços e obrigado.

#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];

void setup()
{
//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("3471234567", "Arduino SMS"))
//Serial.println("\nSMS sent OK");
}

};

void loop()
{
if(started){
//Read if there are messages on SIM card and print them.
if(gsm.readSMS(smsbuffer, 160, n, 20))
{
Serial.print("num - ");
Serial.println(n);
Serial.println(smsbuffer);
}
delay(1000);
}
};

Exibições: 7711

Responder esta

Respostas a este tópico

olha esse codigo esta funcinando normalmente no meu shield SIM900

vc embarca esse codigo para o arduino e abre o serial monitor, aguarde alguns segundos e evie os comandos via sms com o texto "Ligar" "Desligar" para acender/apagar o led do pino 13 para testar o funcionamento.

para isso poder funcionar vc vai ter que ir na biblioteca "SoftwareSerial" da e abrir o arquivo "SoftwareSerial.h"

troque essa linha de 64:

para 128:

Com esse código no meu shield eu consseguir fazer tudo:

(osb: so funciona com o serial monitor aberto)

#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2, 3);

String msg = String("");

int SmsContentFlag = 0;

int ledPin = 13;
 
void setup()
{
  mySerial.begin(9600);     
  Serial.begin(9600);                

  pinMode( ledPin, OUTPUT );
  digitalWrite( ledPin, LOW );
}
 
void loop()
{
    char SerialInByte;
     
    if(Serial.available())
    {
       mySerial.print((unsigned char)Serial.read());
     }  
    else  if(mySerial.available())
    {
        char SerialInByte;
        SerialInByte = (unsigned char)mySerial.read();
        
        //Para Arduino IDE monitor
        Serial.print( SerialInByte );
        if( SerialInByte == 13 ){
          ProcessGprsMsg();
         }
         if( SerialInByte == 10 ){
            // Skip Line feed
         }
         else {
           msg += String(SerialInByte);
         }
     }   
}
void ProcessSms( String sms ){
  Serial.print( "Sms Processado para: [" );
  Serial.print( sms );
  Serial.println( "]" );
 
  if( sms.indexOf("Ligar") >= 0 ){
    digitalWrite( ledPin, HIGH );
  }
  if( sms.indexOf("Desligar") >= 0 ){
    digitalWrite( ledPin, LOW );
  }
}
void GprsTextModeSMS(){
  mySerial.println( "AT+CMGF=1" );
}

void GprsReadSmsStore( String SmsStorePos ){
  mySerial.print( "AT+CMGR=" );
  mySerial.println( SmsStorePos );
}

void ClearGprsMsg(){
  msg = "";
}

void ProcessGprsMsg() {
  Serial.println("");
  Serial.print( "GPRS Messagem: [" );
  Serial.print( msg );
  Serial.println( "]" );
  ProcessSms( msg );
  ClearGprsMsg();
  SmsContentFlag = 0;
}

Eduardo, muito obrigado, show de bola seu programa, testei aqui e funcionou perfeitamente.

Mas eu gostaria de utilizar a biblioteca SIM900.

A função readSMS que não vai legal.

Quero enviar um torpedo com um numero e o programa salvar no phonebook.

Mas  obrigado pela ajuda.

Abraços

Eduardo,

Tudo bem? Usei este código na minha placa e só recebo isso como resposta do terminal: 

GPRS Messagem: []
Sms Processado para: []

+CMTI: "SM",6
GPRS Messagem: [ +CMTI: "SM",6]
Sms Processado para: [ +CMTI: "SM",6]

Você consegue saber o que tem de errado? Ele le normalmente o sms, mas a mensagem é estranha.

Obrigado

quer dizer que seu chip ja tem msg guardadas até a posição 6, para que esse codigo volte a funcionar vç deve limpar o buffer de mendagem do seu chip, vc faz isso usando a biblioteca GSM_Shield, o problema é que ela só funciona até a versão 0023 do arduino. vou mandar o codigo que apaga todos os sms que estiverem no chip, lembre se que só pega na versão do arduino 0023 e com a biblioteca GSM_Shiled.

Anexos

Obrigado pelo código. Eu já achei outro exemplo mais completo que faz a mesma coisa. Ele está neste link para quem quiser pegar:

http://stackoverflow.com/questions/15658633/sending-receiving-sms-v...

Valeu pela ajuda, ok?

abs

Olá  eu queria fazer esse modelo de código funcionar aqui como teste não não está dando certo, será que alguém poderia me dar uma ajuda aee...

Olá! eu fiz vários testes bem sucedidos com o código acima, mas agora nada funciona. Quando envio mensagem para o shield ele exibe apenas a letra Y. Pelo que parece ele recebe a mensagem mas não esta sendo carregada.

alguem sabe porque ?

Eu preciso enviar sms na condição else do meu código, como vou fazer isto nele:

int ledPin13=13;
int ledPin10=10;
int ledPin9=9;
int sensor1=2;
int buzzer=11;
int sinalparaorele = 7; //define a saida a ser utilizada para o acionamento do rele
int time_sensor1_on = 0;
int liga_sensor_1=0;
int pin3=3;
int volta = 0;

void setup() {
Serial.begin(9600);
digitalWrite(pin3,LOW);
pinMode(ledPin9,OUTPUT);
pinMode(ledPin10,OUTPUT);
pinMode(ledPin13,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(sinalparaorele, OUTPUT); //Define o pino como saida

}
void loop() {
sensor1 = analogRead(0);
Serial.println(sensor1, DEC);
delay(10);
if(sensor1<150){// && liga_sensor_1==0){
noTone(buzzer);
delay(500);
digitalWrite(ledPin9, LOW);
delay(500);
digitalWrite(ledPin10, LOW);
delay(500);
digitalWrite(ledPin13, LOW);
delay(3000);
digitalWrite(sinalparaorele, LOW); //Desliga o rele
delay(3000);

}
else{
digitalWrite(sinalparaorele, HIGH); //Aciona o rele
tone(buzzer,500);
digitalWrite(ledPin9, HIGH); 
digitalWrite(ledPin10, HIGH); 
digitalWrite(ledPin13, HIGH);

}
delay(1000);
//volta++;
}

Ajuda ai galera!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço