ajuda uno modulo sim900

Boas pessoal,

Preciso de ajuda, quero comandar uma saida atraves de uma sms, a primeira duvida é tx e rx do modulo ligo no d0 d1?

estou a usar este code ,

#include <SoftwareSerial.h>

char inchar; // Will hold the incoming character from the GSM shield
SoftwareSerial SIM900(0, 1);

int led = 13;

void setup()
{
Serial.begin(19200);
// set up the digital pins to control
pinMode(led, OUTPUT);
digitalWrite(led, LOW);

// wake up the GSM shield
SIM900.begin(19200);
delay(20000); // give time to log on to network.
SIM900.print(“AT+CMGF=1\r”); // set SMS mode to text
delay(100);
SIM900.print(“AT+CNMI=2,2,0,0,0\r”);
// blurt out contents of new SMS upon receipt to the GSM shield’s serial out
delay(100);
Serial.println(“Ready…”);
}

void loop()
{
//If a character comes in from the cellular module…
if(SIM900.available() >0)
{
inchar=SIM900.read();
if (inchar==’#’)
{
delay(10);

inchar=SIM900.read();
if (inchar==‘a’)
{
delay(10);
inchar=SIM900.read();
if (inchar==‘0’)
{
digitalWrite(led, LOW);
}
else if (inchar==‘1’)
{
digitalWrite(led, HIGH);
}
delay(10);
// SIM900.println(“AT+CMGD=1,4”); // delete all SMS
}
}
}
}

Mas nao está a resultar…
Help me…

Preciso de ajuda, quero comandar uma saida atraves de uma sms, a primeira duvida é tx e rx do modulo ligo no d0 d1?

Já te respondi que não podes usar o D0 e o D1 ao mesmo mesmo que usas algo tipo Serial.println()
A porta serie não pode ser partilhada por mais nada, como tal o teu pc vai usar o D0 e o D1 para comunicar com o arduino, o teu modem tem de usar outros dois pinos diferentes!
Tenho por aqui um Sim900 e isto deve te servir de um ponto de partida:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

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

void loop()
{
  if (Serial.available())
    switch(Serial.read())
    {
    case 't':
      SendTextMessage();
      break;
    case 'd':
      DialVoiceCall();
      break;
    } 
  if (mySerial.available())
    Serial.write(mySerial.read());
}

///SendTextMessage()
///this function is to send a sms message
void SendTextMessage()
{
  mySerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
  delay(100);
  mySerial.println("AT + CMGS = \"+35196XXXXXXX\"");//send sms message, be careful need to add a country code before the cellphone number
  delay(100);
  mySerial.println("A test message!");//the content of the message
  delay(100);
  mySerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(100);
  mySerial.println();
}

///DialVoiceCall
///this function is to dial a voice call
void DialVoiceCall()
{
  mySerial.println("ATD+35196XXXXXXX;");//dial the number
  delay(100);
}

void ShowSerialData()
{
  while(mySerial.available()!=0)
    Serial.write(mySerial.read());
}

Com isto deves conseguir fazer uma interação com o modem. Nota que tens de ajustar ao teu BAUD Rate tanto do pc como ao do teu modem.
Após carregares este código se abrires a consola na IDE e enviares um t ira enviar uma SMS para o numero dentro da função.Se enviares um d deve te ligar para o numero que especificas-te
Deves fazer o reset ao mesmo tempo tanto no arduino como no SIM900 de modo e ele fazer o init e ficar online.Algumas placas com o SIM900 fazem isto, outras não. Ha bibliotecas que tem uma função para fazer o reset no arranque usando um pino para isso…

Bons estudos

tenho o ide 1.0.6, mas posso abrir o tera term serve? mas parece que nao comunica, pois a janela do tera term nao aparece nada nem consigo escrever nada..

Para que o teraterm se podes fazer tudo na IDE neste momento? Que teste fizeste? Fazendo upload do codigo acima se ligares para o numero do SIM que tens no modem ele chama? Fizeste o reset no modem como te disse?

meti o codigo que me deste, liguei para o numero e ele chama,

vou ao serial monitor meto um d , e nada…as luzes do arduino deviam piscar no tx rx? nao piscao, no baud meto 115200?

Foto da tua placa com o SIM900? Algumas boards têm uns jumpers para poderes mudar os pinos que vais ligar na softserial.A tua tem? Se abrires o terminal na IDE e telefonares para o modem vez la alguma coisa a ser impressa? Tens a certeza do baud rate do teu modem?

foto http://imall.iteadstudio.com/im140318007.html

nao tem jumpers, nao aparece nada quando telefono para modem, parece que a placa no comunica com arduino.

O módulo está bem ligado ao pino 2 e pino 3 do Arduino?

sim está :(

O baudrate no serial monitor está a 19200?

ja testei, e meto "new line ending", e nada... meto "d" e nada

O modem tem 2 switchs na board, um de reset e outro que é o softstart.O softstart tem de ser pressionado para arrancar com o modem. Existe um pino que podes usar para o "iniciares" via código através de um pino no avr.Se olhares ao esquema este pino chama-se PERKEY e pode ser controlado nos jumpers JP3 no pino 7 ou então para teste pressionares tu o switch BUTTON-SMD-2PIN (é o que esta no esquema) Retirado do datasheet: PWR: After the GPRS module power on, you need to press the POWER button for a moment to power on the SIM900 module. User can power on the GPRS module by pulling down the PWR button or the P pin of control interface for at least 1 second and release. This pin is already pulled up to 3V in the module internal, so external pull up is not necessary. When power on procedure is completed, GPRS module will send following URC to indicate that the module is ready to operate at fixed baud rate.

essa parte, ja ultrapassei, até pk a luz "status" fica ligada dps de iniciar no switch....tou quase a deitar esta placa fora. lol

Alterando um pouco o programa do HugoPT pode tentar perceber-se se o problema é da comunicação entre o PC e o Arduino, ou entre o Arduino e o módulo GSM:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

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

void loop()
{
  if (Serial.available())
    switch(Serial.read())
    {
    case 't':
      Serial.println("Enviar sms...");
      SendTextMessage();
      break;
    case 'd':
      Serial.println("Realizar chamada...");
      DialVoiceCall();
      break;
   default:
      Serial.println("Comando inválido!");     
    } 
  if (mySerial.available())
    Serial.write(mySerial.read());
}

///SendTextMessage()
///this function is to send a sms message
void SendTextMessage()
{
  mySerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
  delay(100);
  mySerial.println("AT + CMGS = \"+35196XXXXXXX\"");//send sms message, be careful need to add a country code before the cellphone number
  delay(100);
  mySerial.println("A test message!");//the content of the message
  delay(100);
  mySerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(100);
  mySerial.println();
}

///DialVoiceCall
///this function is to dial a voice call
void DialVoiceCall()
{
  mySerial.println("ATD+35196XXXXXXX;");//dial the number
  delay(100);
}

void ShowSerialData()
{
  while(mySerial.available()!=0)
    Serial.write(mySerial.read());
}

O que acontece com esta versão?

Boa, ja se vê uma luzinha ao fundo do tunel, APARECE “A FAZER CHAMADA!” mas dps népia.

Ainda se pode fazer outra alteração:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

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

void loop()
{
  if (Serial.available())
    switch(Serial.read())
    {
    case 't':
      Serial.println("Enviar sms...");
      SendTextMessage();
      break;
    case 'd':
      Serial.println("Realizar chamada...");
      DialVoiceCall();
      break;
   case 'a':
      Serial.println("teste...");
      mySerial.print("ATE1\r");    //
      delay(100);
      mySerial.print("AT\r");    //ATtention!
      delay(100);
   default:
      Serial.println("Comando inválido!");     
    } 
  if (mySerial.available())
    Serial.write(mySerial.read());
}

///SendTextMessage()
///this function is to send a sms message
void SendTextMessage()
{
  mySerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
  delay(100);
  mySerial.println("AT + CMGS = \"+35196XXXXXXX\"");//send sms message, be careful need to add a country code before the cellphone number
  delay(100);
  mySerial.println("A test message!");//the content of the message
  delay(100);
  mySerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(100);
  mySerial.println();
}

///DialVoiceCall
///this function is to dial a voice call
void DialVoiceCall()
{
  mySerial.println("ATD+35196XXXXXXX;");//dial the number
  delay(100);
}

void ShowSerialData()
{
  while(mySerial.available()!=0)
    Serial.write(mySerial.read());
}

e ver se o modem responde ou não quando se envia o comando ‘a’. Já agora, como está o PIN do cartão? Está desactivado? Se não, antes de poder fazer uma chamada tem que lhe introduzir o PIN, para que ele se possa registar na rede. Como diz que o LED está sempre ligado, penso que pode muito bem ser isso. Não conheço esse modem, mas nos que eu trabalhei, o LED, quando o modem está registado na rede pisca +/- uma vez por segundo.

quando meto "a" ele diz comando invalido, quando meto d continua a dizer "a realizar chamada..". Sim tirei o pin do cartao, a luz da net pisca de 1 em 1 segundo.

Jojopt:
quando meto “a” ele diz comando invalido, quando meto d continua a dizer “a realizar chamada…”.
(…)

Não deve ser bem assim! Ele deve dizer:

teste...
Comando inválido!

porque eu me esqueci de um “break;” antes do “default:”, se não dizia apenas “teste…”.

De qualquer forma, penso que se pode concluir que o problema é da comunicação entre o Arduino e o modem (até antes desta experiência).
Esse problema de comunicação pode dever-se a várias coisas. Eu começaria por confirmar se o TX e o RX não estão trocados (trocando-os de posição e verificar se passa a funcionar). Outra razão pode ser o baudrate do modem que é um valor diferente dos 19200. Pode confirmar isso no manual de utilizador do modem. Outra razão (aí que conhece o modem pode ajudar mais do que eu) é haver necessidade de ter handshake físico (através dos pinos CTS e RTS). Já trabalhei com modems em que era necessário e outros em que não era. Uma boa ajuda era dar uma vista de olhos no manual.

se usar um shield sim900 vou ter mesmo problema? ou problema será do arduino ? queria msm fazer este projeto, mas tambem sou iniciante no arduino é compreensivel nao pescar muito do assunto. se houve uma maneira mais facil comprando um shield diferente.