collapse

* Posts Recentes

Circuito Microfone que funcione por almamater
[Ontem às 17:14]


Emulador NES em ESP32 por dropes
[22 de Abril de 2024, 14:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]

Autor Tópico: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.  (Lida 75203 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #195 em: 18 de Agosto de 2012, 02:34 »
Tenta comentar os send_sms.

aqui tens um teste, sem eu enviar sms nenhuma o serial monitor para ai..

Código: [Seleccione]
SMS apagados
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\


sera que existe um limite maximo no serial monitor???
ps: mesmo com as msg comentadas para o loop mesmo la muito em baixo..
mas ta a funcionar bem...

so que para....so consigo enviar 3 mensagens nao da tempo para mais..


edit: testei sem serial monitor aberto o led tx pisca de segundo a segundo... mas quando chega ai aos 15 segundos deixa de piscar.
« Última modificação: 18 de Agosto de 2012, 02:37 por r16 »

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #196 em: 18 de Agosto de 2012, 02:56 »
Adiciona Serial.println("Loop"); no inicio do loop e vê se o loop pára mesmo.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #197 em: 18 de Agosto de 2012, 03:00 »
Adiciona Serial.println("Loop"); no inicio do loop e vê se o loop pára mesmo.

void loop() // run over and over

{
  Serial.println("Loop");
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel

pus assim e para tambem, nao sei como vamos descalçar esta bota.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #198 em: 18 de Agosto de 2012, 03:10 »
Substitui:
  int startTime = millis(); //Grava o tempo em que começou a ler
Por:
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #199 em: 18 de Agosto de 2012, 03:22 »
Substitui:
  int startTime = millis(); //Grava o tempo em que começou a ler
Por:
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler

Penso que podemos agora ir dormir :) FUNCIONA.
Sem a tua a tua ajuda, nada disto seria possivel.
Amanha irei fazer um video colocar no youtube para veres o funcionamento do mesmo ainda em breadboard.

Dizer um obrigado é pouco...

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #200 em: 18 de Agosto de 2012, 03:25 »
Substitui:
  int startTime = millis(); //Grava o tempo em que começou a ler
Por:
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler

Penso que podemos agora ir dormir :) FUNCIONA.
Sem a tua a tua ajuda, nada disto seria possivel.
Amanha irei fazer um video colocar no youtube para veres o funcionamento do mesmo ainda em breadboard.

Dizer um obrigado é pouco...
;)
Boa noite então.
Ainda falta a parte para só aceitar mensagens tuas. Trato disso amanhã.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #201 em: 18 de Agosto de 2012, 03:29 »
Substitui:
  int startTime = millis(); //Grava o tempo em que começou a ler
Por:
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler

Penso que podemos agora ir dormir :) FUNCIONA.
Sem a tua a tua ajuda, nada disto seria possivel.
Amanha irei fazer um video colocar no youtube para veres o funcionamento do mesmo ainda em breadboard.

Dizer um obrigado é pouco...
;)
Boa noite então.
Ainda falta a parte para só aceitar mensagens tuas. Trato disso amanhã.

Sim, boa ideia assim fica mais aprimorado. ate amanha ou ate logo.... abraço e mais uma vez obrigado.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #202 em: 18 de Agosto de 2012, 03:43 »
De nada. :)

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #203 em: 18 de Agosto de 2012, 16:02 »
Aqui tens o código para só aceitar mensagens tuas. Vê se funciona sff.
Código: [Seleccione]
int ledPin = 13; //Used for DEBUG
char info[400];

char ligarluz[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
char desligarluz[] = "E4F29C9D3E87E520765D0F"; //"desligar luz" em PDU

char ligarrega[] = "ECF4392C07C9CBE730"; //"ligar rega" em PDU
char desligarrega[] = "E4F29C9D3E87E52079F91C06"; //"desligar rega" em PDU

char numero[13] = "351964002176"; // Numero que recebe e envia SMS

void setup()
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
  clear_SMS_Memory(); //Apagar SMS 1-30
  Serial.println("SMS apagados");
}

void loop() // run over and over
{
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel
 
  Serial3.println("AT+CMGR=1"); //ler mensagem na posição 1
  delay(100);
  int index = 0;
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler
  while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (Serial3.available()>0){
      info[index] = Serial3.read(); //Ler
      index++; }
    if (String(info).indexOf("OK")>0) break;
  }
  //Passou 1s
  if (String(info).indexOf("+CMGR:")>0 && String(info).indexOf(",,0")<0) //Vê se existe uma mensagem
  {
      Serial.println("//Mensagem Recebida:"); //DEBUG
      Serial.println(String(info)); //DEBUG
      Serial.println("//Fim da Mensagem\\"); //DEBUG
      String adminPDU = converterNumero(numero);
      if (String(info).indexOf(adminPDU)>0 && String(info).indexOf(adminPDU)<40) //Verifica se o número do "admin" está no início da mensagem PDU
      {
        Serial.println("Mensagem do admin");
         if (String(info).indexOf(String(ligarluz))>0) //Se "ligar luz" (em PDU) está na mensagem recebida, ligar luz
             LigarLuz();
         else if (String(info).indexOf(String(desligarluz))>0)
             DesligarLuz();
         else if (String(info).indexOf(String(ligarrega))>0) //Senão, Se "ligar rega" (em PDU) está na mensagem recebida, ligar rega
             LigarRega();
         else if (String(info).indexOf(String(desligarrega))>0)
             DesligarRega();
      }
      else Serial.println("Mensagem de outra pessoa"); //DEBUG
     
      Serial3.println("AT+CMGD=1"); //Apagar mensagem
      delay(1000);
      while (Serial3.available()>0) Serial3.read(); //Limpar resposta
      Serial.println("Mensagem Apagada");
      memset( &info, 0, sizeof(info) ); //Limpar array info
  }
}

void LigarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void LigarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void CheckPCserial()
{
  int index = 0;
    if (Serial.available()>0) {
    while (1) {
      info[index] = Serial.read();
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
}

void clear_SMS_Memory(){
  unsigned short i = 0;
  for(i=1;i<=30;i++){
    Serial3.print("AT+CMGD=");
    Serial3.println(i);
    delay(100);
  }
  while (Serial3.available()>0) Serial3.read(); //Limpar resposta
}

#define num_to_char(number)   ((number) < 10 ? ('0' + (number)) : (('A' - 10) + (number)) )
#define first_four(byte)       (0x0F & (byte))
#define  last_four(byte)      ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte)  num_to_char( last_four(byte))
#define hexdump_b(byte)  num_to_char(first_four(byte))

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

String converterNumero(char *pho){
  int index = 0;
  char numero[13];
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      numero[y]=(pho[y+1]);
      numero[y+1]=(pho[y]);
    }
  return numero;
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.print("0000AA");

  hexdump_byte(data_length & 0xFF);

  l = 0;
  n = 0;

  for (x = 0; x < data_length; x++)
  {
    if (data[x] == '$')  data[x] = 0x02;

    n |= (data[x] & 0x7F) << l;
    l += 7;

    if (l >= 8)
    {
      hexdump_byte(n & 0xFF);
      l -= 8;
      n >>= 8;
    }
  }

  if (l != 0)
  {
    hexdump_byte(n & 0xFF);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
}

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #204 em: 18 de Agosto de 2012, 17:54 »
Logo ja irei testar. Tou de saida agora mas obrigado ate logo.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #205 em: 19 de Agosto de 2012, 15:38 »
Aqui tens o código para só aceitar mensagens tuas. Vê se funciona sff.
Código: [Seleccione]
int ledPin = 13; //Used for DEBUG
char info[400];

char ligarluz[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
char desligarluz[] = "E4F29C9D3E87E520765D0F"; //"desligar luz" em PDU

char ligarrega[] = "ECF4392C07C9CBE730"; //"ligar rega" em PDU
char desligarrega[] = "E4F29C9D3E87E52079F91C06"; //"desligar rega" em PDU

char numero[13] = "351964002176"; // Numero que recebe e envia SMS

void setup()
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
  clear_SMS_Memory(); //Apagar SMS 1-30
  Serial.println("SMS apagados");
}

void loop() // run over and over
{
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel
 
  Serial3.println("AT+CMGR=1"); //ler mensagem na posição 1
  delay(100);
  int index = 0;
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler
  while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (Serial3.available()>0){
      info[index] = Serial3.read(); //Ler
      index++; }
    if (String(info).indexOf("OK")>0) break;
  }
  //Passou 1s
  if (String(info).indexOf("+CMGR:")>0 && String(info).indexOf(",,0")<0) //Vê se existe uma mensagem
  {
      Serial.println("//Mensagem Recebida:"); //DEBUG
      Serial.println(String(info)); //DEBUG
      Serial.println("//Fim da Mensagem\\"); //DEBUG
      String adminPDU = converterNumero(numero);
      if (String(info).indexOf(adminPDU)>0 && String(info).indexOf(adminPDU)<40) //Verifica se o número do "admin" está no início da mensagem PDU
      {
        Serial.println("Mensagem do admin");
         if (String(info).indexOf(String(ligarluz))>0) //Se "ligar luz" (em PDU) está na mensagem recebida, ligar luz
             LigarLuz();
         else if (String(info).indexOf(String(desligarluz))>0)
             DesligarLuz();
         else if (String(info).indexOf(String(ligarrega))>0) //Senão, Se "ligar rega" (em PDU) está na mensagem recebida, ligar rega
             LigarRega();
         else if (String(info).indexOf(String(desligarrega))>0)
             DesligarRega();
      }
      else Serial.println("Mensagem de outra pessoa"); //DEBUG
     
      Serial3.println("AT+CMGD=1"); //Apagar mensagem
      delay(1000);
      while (Serial3.available()>0) Serial3.read(); //Limpar resposta
      Serial.println("Mensagem Apagada");
      memset( &info, 0, sizeof(info) ); //Limpar array info
  }
}

void LigarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void LigarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void CheckPCserial()
{
  int index = 0;
    if (Serial.available()>0) {
    while (1) {
      info[index] = Serial.read();
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
}

void clear_SMS_Memory(){
  unsigned short i = 0;
  for(i=1;i<=30;i++){
    Serial3.print("AT+CMGD=");
    Serial3.println(i);
    delay(100);
  }
  while (Serial3.available()>0) Serial3.read(); //Limpar resposta
}

#define num_to_char(number)   ((number) < 10 ? ('0' + (number)) : (('A' - 10) + (number)) )
#define first_four(byte)       (0x0F & (byte))
#define  last_four(byte)      ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte)  num_to_char( last_four(byte))
#define hexdump_b(byte)  num_to_char(first_four(byte))

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

String converterNumero(char *pho){
  int index = 0;
  char numero[13];
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      numero[y]=(pho[y+1]);
      numero[y+1]=(pho[y]);
    }
  return numero;
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.print("0000AA");

  hexdump_byte(data_length & 0xFF);

  l = 0;
  n = 0;

  for (x = 0; x < data_length; x++)
  {
    if (data[x] == '$')  data[x] = 0x02;

    n |= (data[x] & 0x7F) << l;
    l += 7;

    if (l >= 8)
    {
      hexdump_byte(n & 0xFF);
      l -= 8;
      n >>= 8;
    }
  }

  if (l != 0)
  {
    hexdump_byte(n & 0xFF);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
}

com este codigo nao entra em loop..

so aparece SMS APAGADOS..

enquanto no codigo anterior que funciona esta sempre assim:

Código: [Seleccione]
//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim da Mensagem\

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #206 em: 19 de Agosto de 2012, 16:00 »
Ele agora só escreve quando recebe uma mensagem. Enviaste alguma?

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #207 em: 19 de Agosto de 2012, 16:17 »
Ele agora só escreve quando recebe uma mensagem. Enviaste alguma?

sim enviei do meu tlm...
a luz do tx nem pisca quando o tlm a recebe..

como te digo so aparece no serial monitor

sms apagados

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #208 em: 19 de Agosto de 2012, 16:36 »
Testa assim:
Código: [Seleccione]
int ledPin = 13; //Used for DEBUG
char info[400];

char ligarluz[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
char desligarluz[] = "E4F29C9D3E87E520765D0F"; //"desligar luz" em PDU

char ligarrega[] = "ECF4392C07C9CBE730"; //"ligar rega" em PDU
char desligarrega[] = "E4F29C9D3E87E52079F91C06"; //"desligar rega" em PDU

char numero[13] = "351964002176"; // Numero que recebe e envia SMS

void setup()
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
  clear_SMS_Memory(); //Apagar SMS 1-30
  Serial.println("SMS apagados");
}

void loop() // run over and over
{
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel
 
  Serial3.println("AT+CMGR=1"); //ler mensagem na posição 1
  delay(100);
  int index = 0;
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler
  while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (Serial3.available()>0){
      info[index] = Serial3.read(); //Ler
      index++; }
    //if (String(info).indexOf("OK")>0) break;
  }
  //Passou 1s
    Serial.println("//Recebido:"); //DEBUG
    Serial.println(String(info)); //DEBUG
    Serial.println("//Fim"); //DEBUG
  if (String(info).indexOf("+CMGR:")>0 && String(info).indexOf(",,0")<0) //Vê se existe uma mensagem
  {
      //Serial.println("//Mensagem Recebida:"); //DEBUG
      //Serial.println(String(info)); //DEBUG
      //Serial.println("//Fim da Mensagem\\"); //DEBUG
      String adminPDU = converterNumero(numero);
      if (String(info).indexOf(adminPDU)>0 && String(info).indexOf(adminPDU)<40) //Verifica se o número do "admin" está no início da mensagem PDU
      {
        Serial.println("Mensagem do admin");
         if (String(info).indexOf(String(ligarluz))>0) //Se "ligar luz" (em PDU) está na mensagem recebida, ligar luz
             LigarLuz();
         else if (String(info).indexOf(String(desligarluz))>0)
             DesligarLuz();
         else if (String(info).indexOf(String(ligarrega))>0) //Senão, Se "ligar rega" (em PDU) está na mensagem recebida, ligar rega
             LigarRega();
         else if (String(info).indexOf(String(desligarrega))>0)
             DesligarRega();
      }
      else Serial.println("Mensagem de outra pessoa"); //DEBUG
     
      Serial3.println("AT+CMGD=1"); //Apagar mensagem
      delay(1000);
      while (Serial3.available()>0) Serial3.read(); //Limpar resposta
      Serial.println("Mensagem Apagada");
      memset( &info, 0, sizeof(info) ); //Limpar array info
  }
}

void LigarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void LigarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void CheckPCserial()
{
  int index = 0;
    if (Serial.available()>0) {
    while (1) {
      info[index] = Serial.read();
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
}

void clear_SMS_Memory(){
  unsigned short i = 0;
  for(i=1;i<=30;i++){
    Serial3.print("AT+CMGD=");
    Serial3.println(i);
    delay(100);
  }
  while (Serial3.available()>0) Serial3.read(); //Limpar resposta
}

#define num_to_char(number)   ((number) < 10 ? ('0' + (number)) : (('A' - 10) + (number)) )
#define first_four(byte)       (0x0F & (byte))
#define  last_four(byte)      ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte)  num_to_char( last_four(byte))
#define hexdump_b(byte)  num_to_char(first_four(byte))

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

String converterNumero(char *pho){
  int index = 0;
  char numero[13];
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      numero[y]=(pho[y+1]);
      numero[y+1]=(pho[y]);
    }
  return numero;
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.print("0000AA");

  hexdump_byte(data_length & 0xFF);

  l = 0;
  n = 0;

  for (x = 0; x < data_length; x++)
  {
    if (data[x] == '$')  data[x] = 0x02;

    n |= (data[x] & 0x7F) << l;
    l += 7;

    if (l >= 8)
    {
      hexdump_byte(n & 0xFF);
      l -= 8;
      n >>= 8;
    }
  }

  if (l != 0)
  {
    hexdump_byte(n & 0xFF);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
}

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #209 em: 19 de Agosto de 2012, 16:43 »
Testa assim:
Código: [Seleccione]
int ledPin = 13; //Used for DEBUG
char info[400];

char ligarluz[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
char desligarluz[] = "E4F29C9D3E87E520765D0F"; //"desligar luz" em PDU

char ligarrega[] = "ECF4392C07C9CBE730"; //"ligar rega" em PDU
char desligarrega[] = "E4F29C9D3E87E52079F91C06"; //"desligar rega" em PDU

char numero[13] = "351964002176"; // Numero que recebe e envia SMS

void setup()
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
  clear_SMS_Memory(); //Apagar SMS 1-30
  Serial.println("SMS apagados");
}

void loop() // run over and over
{
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel
 
  Serial3.println("AT+CMGR=1"); //ler mensagem na posição 1
  delay(100);
  int index = 0;
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler
  while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (Serial3.available()>0){
      info[index] = Serial3.read(); //Ler
      index++; }
    //if (String(info).indexOf("OK")>0) break;
  }
  //Passou 1s
    Serial.println("//Recebido:"); //DEBUG
    Serial.println(String(info)); //DEBUG
    Serial.println("//Fim"); //DEBUG
  if (String(info).indexOf("+CMGR:")>0 && String(info).indexOf(",,0")<0) //Vê se existe uma mensagem
  {
      //Serial.println("//Mensagem Recebida:"); //DEBUG
      //Serial.println(String(info)); //DEBUG
      //Serial.println("//Fim da Mensagem\\"); //DEBUG
      String adminPDU = converterNumero(numero);
      if (String(info).indexOf(adminPDU)>0 && String(info).indexOf(adminPDU)<40) //Verifica se o número do "admin" está no início da mensagem PDU
      {
        Serial.println("Mensagem do admin");
         if (String(info).indexOf(String(ligarluz))>0) //Se "ligar luz" (em PDU) está na mensagem recebida, ligar luz
             LigarLuz();
         else if (String(info).indexOf(String(desligarluz))>0)
             DesligarLuz();
         else if (String(info).indexOf(String(ligarrega))>0) //Senão, Se "ligar rega" (em PDU) está na mensagem recebida, ligar rega
             LigarRega();
         else if (String(info).indexOf(String(desligarrega))>0)
             DesligarRega();
      }
      else Serial.println("Mensagem de outra pessoa"); //DEBUG
     
      Serial3.println("AT+CMGD=1"); //Apagar mensagem
      delay(1000);
      while (Serial3.available()>0) Serial3.read(); //Limpar resposta
      Serial.println("Mensagem Apagada");
      memset( &info, 0, sizeof(info) ); //Limpar array info
  }
}

void LigarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarLuz()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Luz desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Luz desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void LigarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Ligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Ligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void DesligarRega()
{
    digitalWrite(ledPin,HIGH); //LED aceso
    Serial.println("Rega Desligada"); //Debug
    delay(1000); //Debug
    send_sms(numero, "Rega Desligada"); //Enviar SMS
    Serial.println("SMS Enviado"); //Debug
    digitalWrite(ledPin,LOW); //LED apagado
}

void CheckPCserial()
{
  int index = 0;
    if (Serial.available()>0) {
    while (1) {
      info[index] = Serial.read();
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
}

void clear_SMS_Memory(){
  unsigned short i = 0;
  for(i=1;i<=30;i++){
    Serial3.print("AT+CMGD=");
    Serial3.println(i);
    delay(100);
  }
  while (Serial3.available()>0) Serial3.read(); //Limpar resposta
}

#define num_to_char(number)   ((number) < 10 ? ('0' + (number)) : (('A' - 10) + (number)) )
#define first_four(byte)       (0x0F & (byte))
#define  last_four(byte)      ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte)  num_to_char( last_four(byte))
#define hexdump_b(byte)  num_to_char(first_four(byte))

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

String converterNumero(char *pho){
  int index = 0;
  char numero[13];
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      numero[y]=(pho[y+1]);
      numero[y+1]=(pho[y]);
    }
  return numero;
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.print("0000AA");

  hexdump_byte(data_length & 0xFF);

  l = 0;
  n = 0;

  for (x = 0; x < data_length; x++)
  {
    if (data[x] == '$')  data[x] = 0x02;

    n |= (data[x] & 0x7F) << l;
    l += 7;

    if (l >= 8)
    {
      hexdump_byte(n & 0xFF);
      l -= 8;
      n >>= 8;
    }
  }

  if (l != 0)
  {
    hexdump_byte(n & 0xFF);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
}

agora o loop ta a funcionar mas assim que eu envio a mensagem ligar luz e o tlm a recebe no serial monitor aparece a msg em pdu...
so que nao liga o led.. nao diz sms enviada, diz logo MENSAGEM DE OUTRA PESSOA... e continua o loop.


edit:

Código: [Seleccione]
//Recebido:
AT+CMGR=1

+CMGR: 0,,27
07915391131213F4040C9153914600126700002180916143124009ECF4392C07B1EB7A

OK

//Fim
Mensagem de outra pessoa
Mensagem Apagada
//Recebido:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim
//Recebido:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim
//Recebido:
AT+CMGR=1

+CMGR: 0,,0

OK

//Fim
« Última modificação: 19 de Agosto de 2012, 16:45 por r16 »