collapse

* Posts Recentes

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]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Arduino + Siemens c72  (Lida 23424 vezes)

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

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #30 em: 27 de Agosto de 2012, 01:02 »
Aumentei o delay, experimenta, mas acho que não tem nada haver com isso.
Experimenta também aumentar mais um bocado o timeout no código do Pedrorock. Já experimentaste meter aquele primeiro código e ler as mensagens com o código só para confirmar que as lês como deve ser?


Código: [Seleccione]
#include <SoftwareSerial.h>
SoftwareSerial my(2, 3);

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] = "351913142458"; //Numero que recebe e envia SMS
String adminPDU = converterNumero(numero); //Para verificação de remetente das SMS

void setup()
{
  pinMode(12,OUTPUT);
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(9600);  // DEBUG
  my.begin(19200);
  clear_SMS_Memory(); //Apagar SMS 1-30
  Serial.println("SMS apagados"); //DEBUG
  Serial.println("Inicio do Loop"); //DEBUG
}

void loop() // run over and over
{
  CheckPCserial(); //Para Debug - Reencaminha comandos do PC para o telemóvel
 
  my.println("AT+CMGR=1"); //ler mensagem na posição 1
  int index = 0;
  unsigned long startTime = millis(); //Grava o tempo em que começou a ler
  while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (my.available()>0){
      info[index] = my.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
  {
      delay(5000);
      my.println("AT+CMGR=1");
      index=0;
      startTime = millis();
       while (millis() < (startTime+1000)) //Timeout de 1s
  {
    if (my.available()>0){
      info[index] = my.read(); //Ler
      index++; }
    //if (String(info).indexOf("OK")>0) break;
  }
      Serial.println("//Mensagem Recebida:"); //DEBUG
      Serial.println(String(info)); //DEBUG
      Serial.println("//Fim da Mensagem\\"); //DEBUG
      if (String(info).indexOf(adminPDU)>0) //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
     
      my.println("AT+CMGD=1"); //Apagar mensagem
      delay(1000);
      while (my.available()>0) my.read(); //Limpar resposta
      Serial.println("Mensagem Apagada");
      memset( &info, 0, sizeof(info) ); //Limpar array info
  }
}

void LigarLuz()
{
    digitalWrite(12,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(12,LOW); //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) {
          my.println(String(info));
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
}

void clear_SMS_Memory(){
  unsigned short i = 0;
  for(i=1;i<=30;i++){
    my.print("AT+CMGD=");
    my.println(i);
    delay(100);
  }
  while (my.available()>0) my.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)
{
  my.write(hexdump_a(byte));
  my.write(hexdump_b(byte));
}

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

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      my.write(pho[y+1]);
      my.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;

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

 
  my.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  my.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
  my.write(0x1A); // Ctrl+Z
  my.write(0x0D); // CR
  my.write(0x0A); // LF
  delay(5000);
}

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #31 em: 28 de Agosto de 2012, 00:21 »
experimentei um codigo que espera por comandos via serial...
fiz AT, e respondeu ok. ler sms não experimentei.

Amanha ja faço isso, e ja experimento esse codigo, quanto ao outro, ja pus 5000 de timeout e nada.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #32 em: 28 de Agosto de 2012, 00:31 »
Quando puderes experimenta ler uma sms pelo serial monitor com os comandos AT e vê se a mensagem é lida assim.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
« Última modificação: 28 de Agosto de 2012, 00:46 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #34 em: 28 de Agosto de 2012, 10:16 »
Boas,

Enviei um comando para ler a 2º sms da memoria, e apareceu isto:

OK
AT+CMGR=2

+CMGR: 0,,27
0791539126010000040C9153914270806300002180829095044C

 >:(

Fogo...

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #35 em: 28 de Agosto de 2012, 11:27 »
A mensagem está em branco. Era isso que tinhas enviado?
Se não era isso acho que o problema está no telemóvel...

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #36 em: 28 de Agosto de 2012, 11:29 »
não, a sms guardada diz: ligar luz

ja experimentei com outro remetente e outra posição na memoria, mas da sempre igual, o corpo da mensagem vazio

configurações do tlm, ou é problema de junta?

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #37 em: 28 de Agosto de 2012, 11:39 »
Já viste se os comandos para esse telemóvel são os mesmos? É esquesito isso.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #38 em: 28 de Agosto de 2012, 11:40 »
Não, mas testei outros comandos da lista que saquei, e estavam todos a resp "OK"

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #39 em: 28 de Agosto de 2012, 11:58 »
No telemóvel a mensagem aparece certa?

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #40 em: 28 de Agosto de 2012, 12:00 »
Sim,

Vou experimentar enviar sms por comandos, para ver o ke aparece

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: Arduino + Siemens c72
« Responder #41 em: 28 de Agosto de 2012, 14:45 »
Ill try get some time to solder the conector and try it as well... Im curious now !!

PS- DEsculpem..O habito de escrever e falar em ingles e tao grande que me confundo as veze lol
« Última modificação: 29 de Agosto de 2012, 23:26 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Arduino + Siemens c72
« Responder #42 em: 28 de Agosto de 2012, 21:00 »
Tens de mudar para modo de texto, AT+CMGF=1 salvo erro.

cumps

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Arduino + Siemens c72
« Responder #43 em: 28 de Agosto de 2012, 21:20 »
É capaz de ser isso, Tyran.
No 35 não era preciso mas talvez seja preciso neste.
Podes tentar também AT+CMGF=0.
« Última modificação: 28 de Agosto de 2012, 21:22 por Pedrock »

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #44 em: 29 de Agosto de 2012, 12:23 »
ou seja, antes de ler a mensagem mudo para o modo de texto?