collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Arduino + Siemens c72
« em: 22 de Agosto de 2012, 12:56 »
Boas pessoal,

No seguimento de um topico com o arduino e um siemens c75, decidi tentar alguma coisa mas com um c72, pelo que vi,o pinout é igual, mas tenho um problema, eu tenho um Arduino Dumileanove, logo so tem uma porta serial.

ENtretanto encontrei isto: https://sites.google.com/site/carlosoliveiraprojects/home/arduino/gsm-and-arduino

Mas não estou a conseguir nenhum resultado.

Ajuda?

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #1 em: 22 de Agosto de 2012, 13:26 »
Olá, podes utilizar uma biblioteca que se chama NewSoftSerial para criar outra porta Serial.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #2 em: 22 de Agosto de 2012, 13:36 »
O arduino 1.01 vem com uma "softwareSerial" serve, ou émelhor a ke disseste?

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #3 em: 22 de Agosto de 2012, 13:45 »
Não sei, experimenta. Eu tenho ideia que essa já não funciona e foi alterado o nome para NewSoftSerial, mas experimenta.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Arduino + Siemens c72
« Responder #4 em: 22 de Agosto de 2012, 16:26 »
No Arduino 1.0, o SoftwareSerial foi substituído pelo NewSoftSerial.
Por isso, usa-se o SoftwareSerial.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: Arduino + Siemens c72
« Responder #5 em: 22 de Agosto de 2012, 18:57 »
Por coincidencia tenho um Siemens C72 com a mesma intencao.
Tive a sorte de encontrar um conector perfeito aqui, que e uma autentica breakout-board do conector (num gadget de carregar telemoveis mais antigos, com varios conectores tipo universal).
Mas ter tempo e que e de gesso.lol
Mantem o pessoal informado, sff.
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 #6 em: 23 de Agosto de 2012, 01:53 »
Boas,

Eu nas ranhuras do carregador, meti fiador, entretanto meto foto.

Vou experimentar o newserial ;)

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #7 em: 23 de Agosto de 2012, 03:19 »
Boas pessoal,

Usei este codigo, no 1.0 e no 0.23 e não respondeu nada. as ligações sao as seguintes:

Pin 1: vcc
Pin2:Gnd
Pin3:---------- 2.7K----------------- Pino 2 do arduino
Pin4------------2.7k------------------Pino3 do arduino
                  |
                  |---------    3.3k----------Gnd

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



/***********************************************************
*                  Setup                                   *
***********************************************************/
void setup() 
{
  pinMode(13,OUTPUT); // LED DEBUG
  //Serial -------------------------------------------------
  // Open serial communications and wait for port to open:
  Serial.begin(9600);  // DEBUG

  mySerial.begin(19200);

}


/***********************************************************
*                  LOOP                                    *
***********************************************************/
void loop() // run over and over
{

 if (mySerial.available())
      Serial.write(mySerial.read());
 if (Serial.available())
      mySerial.write(Serial.read());
      delay(2000);
}

Não apareceu nada.

Apenas o tlm liga a luz sempre que reinicio o programa

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #8 em: 23 de Agosto de 2012, 04:04 »
Há uns tempos houve outra pessoa com o mesmo problema e este código funcionou. Experimenta:

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

char info[200];
int index = 0;
char inChar;

void setup() 
{
  Serial.begin(9600);
  mySerial.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) {
        mySerial.println(String(info));
        index = 0;
        memset( &info, 0, sizeof(info) );
        break;
      }
    }
  }
  if (mySerial.available()) Serial.write(mySerial.read());
}


Eu alterei para a biblioteca SoftwareSerial porque ao testar o código deu erro por causa da outra biblioteca (NewSoftSerial). Se calhar confundi as 2 e induzi em erro. De qualquer forma se não conseguires com a softwareSerial é só alterar.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Arduino + Siemens c72
« Responder #9 em: 23 de Agosto de 2012, 11:55 »
A NewSoftSerial não vêm incluída na IDE, foi feita por alguém de fora, e foi introduzida no 1.0.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #10 em: 24 de Agosto de 2012, 02:29 »
nada :(

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #11 em: 24 de Agosto de 2012, 02:33 »
Usei este:

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

#define ledPin 13 //Used for DEBUG

void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  //Serial -------------------------------------------------
  // Open serial communications and wait for port to open:
  Serial.begin(9600);  // DEBUG
  my.begin(19200);
  delay(2000);
  my.println("AT");
}

void loop() // run over and over
{
  if (my.available()) Serial.write(my.read());
  }

Aparece:


AT
OK

:)

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Arduino + Siemens c72
« Responder #12 em: 24 de Agosto de 2012, 02:36 »
Código: [Seleccione]
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

char info[200];
int index = 0;
char inChar;

void setup() 
{
  Serial.begin(9600);
  mySerial.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) {
        mySerial.println(String(info));
        index = 0;
        memset( &info, 0, sizeof(info) );
        break;
      }
    }
  }
  if (mySerial.available()) Serial.write(mySerial.read());
}

Se esse funcionou este que está em cima também devia funcionar. Tenta, abre o Serial Monitor e envia algum comando.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #13 em: 24 de Agosto de 2012, 02:42 »
yaa, ta brutal. :P

Vou explorar os comandos :)

Obrigadão

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Arduino + Siemens c72
« Responder #14 em: 25 de Agosto de 2012, 01:07 »
Nova duvida:

Copiei o codigo do outro topico para o c35 e adicionei o emulador da 2ª porta serial:

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

Entretanto, ao enviar sms para la, recebo isto:

Código: [Seleccione]
SMS apagados
Inicio do Loop
//Mensagem Recebida:

+CMGR: 0,,27
0791539111161616240C9153913141428500002180520045014009E27
//Fim da Mensagem\
Mensagem do admin
Mensagem Apagada
//Mensagem Recebida:
AT+CMGR=1

+CMGR: 1,,27
0791539111161616240C9153913141428500002180520045014009EFB

//Fim da Mensagem\
Mensagem do admin
Mensagem Apagada

E o Led 12, não fica aceso.