enviar sms - numero como variavel

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

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

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:

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:

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.

mkbu95:
À 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.

 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

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)

HugoPT:

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

Aqui indicas para onde vai a SMS e o corpo dela ?

 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?

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

1 Like