collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Ontem às 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]


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

Autor Tópico: SmarTracker  (Lida 54445 vezes)

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

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #60 em: 18 de Julho de 2009, 00:56 »
\"   (sp k for uma aspa, n tenho bem a certeza, mas penso mm k é isso)

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #61 em: 18 de Julho de 2009, 01:02 »
ok obrigado ricardo-reis ... esta parte já está a funcionar ...
Os electrões são nossos amigos !!! :D

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #62 em: 18 de Julho de 2009, 01:14 »
E então postares o código que funcionou :D

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #63 em: 18 de Julho de 2009, 01:18 »
Já estou a alterar para o alarme ficar a funcionar este fim de semana, mas o que funcionou foi isto:

Código: [Seleccione]
#include <NewSoftSerial.h>
#define rxPin 6
#define txPin 7

char incomingByte = 0;

NewSoftSerial telemovel(rxPin, txPin);

void setup()                   
{
  Serial.begin(9600);
  telemovel.begin(9600);
  delay(300);
  telemovel.print("AT\r\n");
  delay(300);
  telemovel.print("AT+CPMS=\"ME\",\"ME\",\"ME\"\r\n");
  delay(300);
  telemovel.print("AT+CNMI=2,1\r\n");
  delay(300);
  telemovel.print("AT+CMER=3,2\r\n");
  delay(300);
  telemovel.print("AT*ECAM=1\r\n");
  delay(300);
  telemovel.print("AT+CMGF=1\r\n");
  delay(300);
}

void loop()                   
{

  if (telemovel.available() > 0) {
   incomingByte = telemovel.read();
  Serial.print(incomingByte);
}
}

com este código o telemovel não consegue processar todos os comandos, mas estou a trabalhar nisso ...  ;D
Os electrões são nossos amigos !!! :D

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #64 em: 18 de Julho de 2009, 01:21 »
outra coisa, a biblioteca NewSoftSerial.h onde saco?

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #65 em: 18 de Julho de 2009, 01:23 »
isso anda por aí no google ... se não achares dá-me um toque que envio por mail.
Os electrões são nossos amigos !!! :D

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #66 em: 18 de Julho de 2009, 01:40 »
Então é isso, interferência do FTDI. Provavelmente o telemóvel recebia os comandos, mas não respondia, porque ao ligares AVR, FTDI e telemóvel no mesmo bus ficas com 2 pares de saídas ligadas uma à outra.

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #67 em: 19 de Julho de 2009, 02:43 »
Oi

Estou com um problema na programação. Neste momento o código que estou a utilizar é:

Código: [Seleccione]
#include <LiquidCrystal.h>
#include <NewSoftSerial.h>

#define rxPin 6
#define txPin 7
#define ledPin 13
#define contrast 9

char incomingByte = 0;

#define BUFFSIZ 40
char buffer[BUFFSIZ];
char buffidx;

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
NewSoftSerial telemovel(rxPin, txPin);

void setup()                   
{
  pinMode(contrast, OUTPUT);
  analogWrite(contrast, 100);
 
  lcd.clear();
  lcd.print("Smartracker on!");

  delay(1000);
 
  Serial.begin(9600);
  telemovel.begin(9600);

  delay(1000);
  telemovel.print("AT\r\n");
  le_linha();
  delay(1000);
  telemovel.print("AT+CPMS=\"ME\",\"ME\",\"ME\"\r\n");
  le_linha();
  delay(1000);
  telemovel.print("AT+CNMI=2,1\r\n");
  le_linha();
  delay(1000);
  telemovel.print("AT*ECAM=1\r\n");
  le_linha();
  delay(1000);
  telemovel.print("AT+CMGF=1\r\n");
  le_linha();
  delay(1000);
  telemovel.print("AT+CMER=3,2\r\n");
  le_linha();

}

void loop()                   
{
}

void le_linha(void) {
  lcd.clear();            // para ver dados lcd activar esta linha
  char c;
 
  buffidx = 0;
  while (1) {
      c=telemovel.read();
      if (c == -1)
        continue;
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        return;
      }
      lcd.print(c);       // para ver dados lcd activar esta linha
      Serial.print(c);    // para ver dados serial activar esta linha
      buffer[buffidx++]= c;
  }
}

No entanto o telemóvel só me processa os primeiros 2 comandos, o resto não!

Alguém consegue resolver isto ?

Aproveito para dizer ao pessoal que o projecto já conta com um lcd tb.

Kast
Os electrões são nossos amigos !!! :D

Offline delphi

  • Mini Robot
  • *
  • Mensagens: 217
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #68 em: 19 de Julho de 2009, 12:07 »
Olá,

Só executa até aos 2 comandos "sempre" ou apenas quando utilizas com o LCD?
Pergunto porque a função clear e print do LCD utilizam a função delayMicroseconds() e isso pode por algum motivo estar a impedir de ler os dados.

Qual é o objectivo do "delay(1000)" antes de enviares os comandos?

Experimenta colocares essas instruções no loop (controladas só para executar uma vez) e no loop de ler os dados "print" tudo o que ele te dá.

Experimenta programar de forma a que o loop receba comandos introduzidos "manualmente" (por ex. pelo hyperterminal) de forma a enviá-los para telemóvel pelo "serial" do NewSoftSerial.

www.saborapalco.com - Companhia de Teatro Amador
www.megavaquinha.com - Uma mega aposta no euromilhões de um grupo de mega amigos

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #69 em: 19 de Julho de 2009, 12:35 »
olá

Este problema já acontecia antes de colocar o lcd.

o novo código é:

Código: [Seleccione]
#include <LiquidCrystal.h>
#include <NewSoftSerial.h>

#define rxPin 6
#define txPin 7
#define ledPin 13
#define contrast 9

char incomingByte = 0;

#define BUFFSIZ 40
char buffer[BUFFSIZ];
char buffidx;

int conta=0;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
NewSoftSerial telemovel(rxPin, txPin);

void setup()                   
{
  pinMode(contrast, OUTPUT);
  analogWrite(contrast, 100);
 
  lcd.clear();
  lcd.print("Smartracker on!");
  delay(3000);
  lcd.clear();
 
  Serial.begin(9600);
  telemovel.begin(9600);

  lcd.print("Teste 1 - ");
  telemovel.print("AT\r\n");
  le_linha();
  delay(1000);
 
  lcd.print("Teste 2 - ");
  telemovel.print("AT+CPMS=\"ME\",\"ME\",\"ME\"\r\n");
  le_linha();
  delay(1000);

  lcd.print("Teste 3 - ");
  telemovel.print("AT+CNMI=2,1\r\n");
  le_linha();
  delay(1000);
 
  lcd.print("Teste 4 - ");
  telemovel.print("AT*ECAM=1\r\n");
  le_linha();
  delay(1000);
 
  lcd.print("Teste 5 - ");
  telemovel.print("AT+CMGF=1\r\n");
  le_linha();
  delay(1000);
 
  lcd.print("Teste 6 - ");
  telemovel.print("AT+CMER=3,2\r\n");
  le_linha();

}

void loop()                   
{

}

void le_linha(void) {
  char c;
 
  buffidx = 0;
  conta=0;
  while (conta < 200) {
      c=telemovel.read();
      conta++;
      if (c == -1)
        continue;
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        delay(1000);
         lcd.clear();            // para ver dados lcd activar esta linha

        return;
      }
      lcd.print(c);       // para ver dados lcd activar esta linha
      Serial.print(c);    // para ver dados serial activar esta linha
      buffer[buffidx++]= c;
  }
}

No entanto estou a melhorar o código para fazer o debug para o lcd, e reparei que o arduino manda os comandos muito mais rápido do que o telemovel envia a resposta.

Só quando aparece teste 5 no lcd é que aparece o envio 2º comando para o telemóvel.

Não percebo o porquê dele não estar a fazer tudo pela ordem que está no código.

Acho que a função que lê linha não está a funcionar bem. Deve ter problemas em acabar, acho que em alguns comandos que recebe não aparece o \r que manda a função terminar.

Kast
Os electrões são nossos amigos !!! :D

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #70 em: 19 de Julho de 2009, 13:01 »
Parece que o problema é mm na função lê linhas ... vou tentar repara o erro e já posto aqui a solução.
Os electrões são nossos amigos !!! :D

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #71 em: 20 de Julho de 2009, 21:20 »
Oi

ALguém conhece uma library para o arduino que consiga lidar com gps ?

Já tentei 3 e nenhuma delas funcionou ....
Os electrões são nossos amigos !!! :D

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #72 em: 20 de Julho de 2009, 22:29 »
O que é que queres que a biblioteca faça? Eu fiz um código que recebe dados de GPS... Se disseres o que queres que faça posso-te ajudar, quer com contas quer com interpretaçao de dados de GPS.
Tr3s
Daniel Gonçalves

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #73 em: 20 de Julho de 2009, 23:07 »
olha é o seguinte ... preciso de algo que agarre numa linha ou caractere saido do gps e o converta em latitude. longitude, velocidade, direcção, sinal fixo, etc.
Os electrões são nossos amigos !!! :D

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Alarme auto "low-cost" com localização por GPS e aviso por sms
« Responder #74 em: 21 de Julho de 2009, 01:12 »
A melhor mensagem que deve agarrar no GPS deverá ser a $GPRMC, é a que te da os dados mais certinhos de modo a extraí-los bem.

A mensagem tem este formato:
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
     
         220516     Time Stamp
         A          validity - A-ok, V-invalid
         5133.82    current Latitude
         N          North/South
         00042.24   current Longitude
         W          East/West
         173.8      Speed in knots
         231.8      True course
         130694     Date Stamp
         004.2      Variation
         W          East/West
         *70        checksum


Para converteres a velocidade em KM multiplicas por '1.85200'
Tens muita informação nestes sites:

http://aprs.gids.nl/nmea/#rmc
http://www.codepedia.com/1/The+GPRMC+Sentence


Quando ja conseguires tirar os dados que te interessam avisa pa te ajudar nas conversões e nas contas ;)

« Última modificação: 21 de Julho de 2009, 01:27 por tr3s »
Tr3s
Daniel Gonçalves