collapse

* Posts Recentes

LLM Crawlers por jm_araujo
[Ontem às 21:57]


Emulador NES em ESP32 por dropes
[30 de Abril de 2024, 15:09]


Circuito Microfone que funcione por almamater
[27 de Abril de 2024, 17: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]

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

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

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #135 em: 14 de Agosto de 2012, 00:19 »
Tenta reeniciar o telemóvel. Se calhar é preciso enviar um AT antes dos outros comandos.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #136 em: 14 de Agosto de 2012, 00:20 »
Mas recebes a sms a confirmar que o led foi aceso? E recebes a mensagem no serial monitor? Estranho...

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #137 em: 14 de Agosto de 2012, 00:22 »
no outro codigo que eu abocado vos falei o gajo tem isto no setup

void setup() {
         
  //pinMode(IRledPin,OUTPUT);
  pinMode(indicatorPin,OUTPUT);
  delay(12000);//first time connect cable arduino with phone...
  Serial.begin(9600);
  delay(3000);
  Serial.println("AT+CPMS=\"ME\",\"SM\"");//Set memory phone
  delay(3000);
  Serial.println("ATE=0");//Echo off
  delay(3000);

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #138 em: 14 de Agosto de 2012, 00:22 »
Se continuar sem funcionar, volta a meter aquele código para comunicar com o PC, e envia um AT e outros comandos para veres se recebes "OK".

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #139 em: 14 de Agosto de 2012, 00:29 »
pode parecer mentira mas agora so este codigo e que me esta a responder aos comandos at...



Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
int index = 0;
char inChar;
char numero[13] = "351964002176";
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
        if (String(info) == "sms") {
          send_sms(numero,"teste");
        } else {
          Serial3.println(String(info));
        }
        index = 0;
        memset( &info, 0, sizeof(info) );
        break;
      }
    }
  }
  if (Serial3.available()) Serial.write(Serial3.read());
}

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

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

pedrock o teu primeiro que me enviaste... funcionou,,, mas depois de ter enviado aquele segundo corrigido por ti nem esse nem o antigo funciona aos comandos at nem ligam o led..ha coisas do diabo

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #140 em: 14 de Agosto de 2012, 00:32 »
Mas recebes a sms a dizer que o led acendeu e a mensagem no serial monitor ou não?
É esquesito. Tentaste reiniciar o telemóvel?

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #141 em: 14 de Agosto de 2012, 00:35 »
O conteúdo da mensagem é "ligar luz"?

Se sim, então com esse código para comunicar através do PC, envia novamente a mensagem para o telemóvel e usa o AT+CMGL=0 para ler a mensagem e mete aqui o que recebes.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #142 em: 14 de Agosto de 2012, 00:36 »
ya e esquesito sim reincie o telemovel e apaguei todas as sms. fogo cum caneco

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #143 em: 14 de Agosto de 2012, 00:40 »
O conteúdo da mensagem é "ligar luz"?

Se sim, então com esse código para comunicar através do PC, envia novamente a mensagem para o telemóvel e usa o AT+CMGL=0 para ler a mensagem e mete aqui o que recebes.

sim o conteudo e ligar luz...

ja reinciei o telemovel...
enviei novamente agora o teu primeiro codigo que me funcionou...

ele agora nao ta aceitar nenhum comando
AT+CMGL=0
nem o AT
nem nada...

o unico agora que me esta a responder aos comandos é este:

Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
int index = 0;
char inChar;
char numero[13] = "351964002176";
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
        if (String(info) == "sms") {
          send_sms(numero,"teste");
        } else {
          Serial3.println(String(info));
        }
        index = 0;
        memset( &info, 0, sizeof(info) );
        break;
      }
    }
  }
  if (Serial3.available()) Serial.write(Serial3.read());
}

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

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


ha coisas...

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #144 em: 14 de Agosto de 2012, 00:44 »
O meu não tem a parte para reencaminhar os comandos do PC.

EDIT:
Tenta este:
Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
char info1[400];
char OnSMS[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
int index = 0;
char inChar;
char inChar1;
char numero[13] = "351964002176"; // por enquanto apenas serve para enviar SMS, todos os números são aceites para ligar a luz
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
  Serial3.println("AT+CMGL=0");
  delay(100);
  if (Serial3.available()>0) {
    while (1) {
      inChar1 = Serial3.read();
      info1[index] = inChar1;
      index++;
      delay(2);
      if (Serial3.available() <= 0) {
          Serial.println(String(info1));
          if (String(info1).indexOf(String(OnSMS))>0) { //Se "ligar luz"(em PDU) está na mensagem recebida, ligar LED
            digitalWrite(ledPin,HIGH);
            Serial.println("Led ligado");
            delay(1000);
            send_sms(numero, "Luz ligada");
            Serial.println("SMS Enviado");
          }
          index = 0;
          memset( &info1, 0, sizeof(info1) );
          break;
      }
    }
  }
}

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

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);
 
}
Abre o Serial Monitor. Envia a SMS e vê se a luz acende. Se não, copia o que aparece no Serial Monitor.
« Última modificação: 14 de Agosto de 2012, 00:51 por Pedrock »

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #145 em: 14 de Agosto de 2012, 01:00 »
O meu não tem a parte para reencaminhar os comandos do PC.

EDIT:
Tenta este:
Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
char info1[400];
char OnSMS[] = "ECF4392C07B1EB7A"; //"ligar luz" em PDU
int index = 0;
char inChar;
char inChar1;
char numero[13] = "351964002176"; // por enquanto apenas serve para enviar SMS, todos os números são aceites para ligar a luz
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
  Serial3.println("AT+CMGL=0");
  delay(100);
  if (Serial3.available()>0) {
    while (1) {
      inChar1 = Serial3.read();
      info1[index] = inChar1;
      index++;
      delay(2);
      if (Serial3.available() <= 0) {
          Serial.println(String(info1));
          if (String(info1).indexOf(String(OnSMS))>0) { //Se "ligar luz"(em PDU) está na mensagem recebida, ligar LED
            digitalWrite(ledPin,HIGH);
            Serial.println("Led ligado");
            delay(1000);
            send_sms(numero, "Luz ligada");
            Serial.println("SMS Enviado");
          }
          index = 0;
          memset( &info1, 0, sizeof(info1) );
          break;
      }
    }
  }
}

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

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);
 
}
Abre o Serial Monitor. Envia a SMS e vê se a luz acende. Se não, copia o que aparece no Serial Monitor.


esse ta sempre  a passar loops infinitos ... AT+CMGL=0 ERROR quando envio a msg. e o TX ta sempre a piscar

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #146 em: 14 de Agosto de 2012, 01:07 »
Sim, esse código está sempre a procura de sms novas, daí o tx estar sempre a piscar (de 100 em 100 ms).
Não envies nenhum comando pelo serial monitor. Envia só a sms do teu telemóvel e vê se há alguma mensagem no serial monitor.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #147 em: 14 de Agosto de 2012, 01:12 »
ok pessoal entao e assim aumentei o delay de 100 para 3000 para vos poder passar o que se passava.


AT+CMGL=0

OK

AT+CMGL=0

OK

AT+CMGL=0


QUANDO O TELEMOVEL RECEU A SMS APARECEU ISTO

+CMGL: 1,0,,27
07915391131213F4040C915391460012670
AT+CMGL=0

OK


MAS O LED NAO ACENDEU

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #148 em: 14 de Agosto de 2012, 01:18 »
O problema está ai... Tenta enviar uma sms outra vez com outro texto qualquer. Esse código PDU não tem nenhuma mensagem. Posta depois o que obtiveste.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #149 em: 14 de Agosto de 2012, 01:22 »
ENVIEI TESTE


AT+CMGL=0

OK

AT+CMGL=0

OK

AT+CMGL=0

OK

AT+CMGL=0

OK

AT+CMGL=0

+CMGL: 1,0,,24
07915391131213F4040C915391460012670
AT+CMGL=0

OK

AT+CMGL=0

OK