Go Down

Topic: enviar sms - numero como variavel (Read 3181 times) previous topic - next topic

sergiotux

Ola pessoal,
estou usando o código abaixo para enviar sms. Mas preciso usar o numero de telefone como uma variável e não consigo.
Tentei algo como criar a variável. String numero =  "+551198151034"; e substituir a linha do telefone   mySerial.print("AT+CMGS=\"+5511981510340\"\r");  por

mySerial.print("AT+CMGS=\"");
mySerial.print(numero);
mySerial.print("\"\r");

mas o sms não sai.
Alguém já conseguiu algo parecido?

obrigado

-----------codigo

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); //8 TX, 7 RX

void setup()
{
  mySerial.begin(4800);               
  Serial.begin(19200);
}

void loop()
{
  mySerial.print("\r");
  delay(1000);               
  mySerial.print("AT+CMGF=1\r"); 
  delay(1000);
  mySerial.print("AT+CMGS=\"+5511981510340\"\r"); 
  delay(1000);
  mySerial.print("SIM900 and Arduino say Hi!\r");
  delay(1000);
  mySerial.write(26);
}

mkbu95

Já tentaste:
mySerial.print("AT+CMGS=+5511981510340\r");
ou sem o + ?

À proposito, estou interessado em comprar um Arduino.
Saberia me dizer o que posso fazer com ele. Assim, quais são os limites dele, se tenho que comprar muitas peças externas à placa.
Este seu código, por exemplo, você está usando somente o Arduino ou teve que comprar algum "add-on" ?

bubulindo

Não fizeste referência se o programa funciona quando não usas o número de telefone como uma variável. Eu assumo que sim, mas não faço ideia.

Outra coisa, este código que deixaste tem coisas estranhas.

Para que serve esta linha:

Code: [Select]
mySerial.print("\r"); ??

Porquê os delays entre envios de dados para o módulo GSM? Já apareceram aqui vários exemplos sem delays que aparentemente estavam a funcionar.

Finalmente, não me parece correcto que coloques o código a enviar SMSs sem condições no loop... de 4 em 4 segundos o módulo GSM vai tentar mandar SMSs... já viste se tens saldo no cartão? Coloca algo como:


Code: [Select]
if (Serial.available() > 0) {
    if (Serial.read() == 'S') {
        //Código para envio de mensagens...
    }
}

Assim sempre que enviares um S pela Serial, o módulo manda a SMS. Muito mais controlado e simples.

Ahh e experimenta o programa depois de teres desligado tudo e voltado a ligar.
This... is a hobby.

bubulindo


À proposito, estou interessado em comprar um Arduino.
Saberia me dizer o que posso fazer com ele. Assim, quais são os limites dele, se tenho que comprar muitas peças externas à placa.
Este seu código, por exemplo, você está usando somente o Arduino ou teve que comprar algum "add-on" ?


Por favor, coloca isto numa mensagem separada, ou procura no fórum... isto está escrito e descrito em várias threads.
O arduino é uma plataforma que apenas comunica com o computador e mexe com os pinos desse processador. Irás sempre precisar de add-ons para fazer coisas nele.
This... is a hobby.

HugoPT

#4
Oct 30, 2012, 10:07 am Last Edit: Oct 30, 2012, 10:11 am by HugoPT Reason: 1
Code: [Select]
mySerial.print("AT+CMGS=\"+5511981510340\"\r");  por
Aqui indicas para onde vai a SMS e o corpo dela ?
Logo a seguir a esse comando tens de indicar o texto e depois termina la com o CTRL+Z para que desta forma seja terminada o envio !!
Se apenas escreveres isso no modem passado uns segundos se ele nao receber o corpo da "ERROR"
Aconselho te a ligares o modem atravez de um cliente de hiperterminal no teu pc e testares la e depois passares para o arduino
De salientar que tambem deves por o modem em modo texto usando o comando AT+CMGF=1

Aqui tens um pouco de texto retirado do modem da Siemens mc35i que usa a mesma estrutura
Code: [Select]
AT+CMGF=1
AT+CMGS="####" where #### is the phone number you want to send the message to followed by a CR which will give you a prompt.

You can then type the message you want then follow it with a CTRL+Z (that is CONTROL button and Z button pressed together)
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo


Code: [Select]
mySerial.print("AT+CMGS=\"+5511981510340\"\r");  por
Aqui indicas para onde vai a SMS e o corpo dela ?

Code: [Select]

mySerial.print("AT+CMGF=1\r"); 
  delay(1000);
  mySerial.print("AT+CMGS=\"+5511981510340\"\r"); 
  delay(1000);
  mySerial.print("SIM900 and Arduino say Hi!\r");
  delay(1000);
  mySerial.write(26);//0x1a... 

O corpo e o Ctrl+Z estão aqui. Agora também fica a questão, para quê os delays de 1 segundo? Será que os delays fazem com que o módulo faca timeout?
This... is a hobby.

sergiotux

Pessoal, obrigado a todos.
Consegui com o código abaixo.

char Vrsms = 1234567890;

char FtResp(String tMsg){
  mySerial.print("\r");
  delay(1000);               
  mySerial.print("AT+CMGF=1\r"); 
  delay(1000);
  Serial.print(mySerial.print("AT+CMGS=\""));
  Serial.print(mySerial.print(Vrsms));
  Serial.print(mySerial.println("\""));
  delay(1000);
  mySerial.print(tMsg);
  delay(1000);
  mySerial.write(26);
  delay(20000);
}

Go Up