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, waveshield, gps - problema com SoftwareSerial  (Lida 7333 vezes)

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

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
arduino, waveshield, gps - problema com SoftwareSerial
« em: 08 de Novembro de 2013, 15:20 »
Boas,
Estou a trabalhar com um arduino uno, um shield WaveShield (para audio) e um GPS.
Ao utilizar o WaveShield com a biblioteca WaveRP, funciona tudo bem, inclusive a parte de gravar audio. Ao utilizar o só o GPS, defino Portas serie (ss) nos pinos que o shield tem livres e tudo funciona bem.
Na utilização das duas coisas, tudo entra em parafuso, algumas vezes corria o setup() dentro do loop()?????, outras deixava de jogar audio, outras bloqueava, etc....
Isto deu-me muita dor de cabeça, e, depois de muita pesquisa, descobri e testei que o problema estava no facto de o (SoftwareSerial) na sua execução fazer uso de interupções que alteravam o normal funcionamento da biblioteca WaveRP.
Aquilo que eu peço, é uma sugestão vossa para a utilização do SoftwareSerial com o shield (com a biblioteca WaveShield) .(no fundo seria algo do genero de disabel da SS enquanto utiliza audio, ou outra sugestão onde coabitem todos.)
nota: para aquilo que pretendo preciso de 2 portas serie, uma para o GPS e outra para um sensor de distancia, e o meu arduino é o uno.

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #1 em: 08 de Novembro de 2013, 15:43 »
Se não usares o GPS ao mesmo tempo do sensor, podes utilizar um multiplexer externo e usar só a porta série de HW..



Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #2 em: 08 de Novembro de 2013, 17:43 »
obrigado pela tua sugestão JM-ARAUJO, para ser sincero ainda não tinha ouvido falar nisso, vou pesquisar, mas á primeira vista parece-me que sugeres que ligue o rx do gps e do maxsonar ez1 juntos no tx do arduino(1), e que ligue o tx do gps e do maxsonar ez1 no rx do arduino (0).

esta não seria a solução ideal para mim, porque queria utilizar o maxsonar ez1 como uma bengala, que jogava um "bip" com um deley proporcional ao valor lido pelo sensor. Então, enquanto fazia a leitura do GPS para gravar um percurso, gostava de ter a opção da bengala.
se ouver outras soluções agradeço.
Já agora e como nunca utilizei as potas serial (0e1) com sensores, alguém me pode dizer como funciona: com o SoftwareSerial, eu estancio: #include <SoftwareSerial.h>  SoftwareSerial ss(6, 7); e no Setup()  ss.begin(38400); e depois utilizo ss.???();
como faço com as portas Serial??????,
« Última modificação: 08 de Novembro de 2013, 20:51 por Asilva »

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #3 em: 08 de Novembro de 2013, 23:51 »
Bem, penso que compreendo agora o que querias dizer, o que falas é algo deste genero? https://www.sparkfun.com/products/8970 .
tentei usar a serial do arduino com o GPS e ele dá-me erro ao compilar, posso estar a dizer uma asneira mas penso que a serial do arduino uno está dedicada á comunicação com o computador (USB).
verifiquei entretanto que o sensor de distancia alem da comunicação com serial port tambem tem uma saida analogica, por ai já estava safo.....
será que estou errado quanto á porta serial???????  poderei eu utilizá-la para o GPS e monitor sem sem o multiplexer externo????????    se não, qual o multiplexer que me aconcelham ????????   e não precisa de codigo ?????????
estou aberto a ideias e sugestões, não pensem que quero utilizar o forum para a papinha toda, eu  pesquiso até bastante, mas as minhas limitações de ingles limitam-me muito.
agradeço toda a colaboração que me derem.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #4 em: 09 de Novembro de 2013, 14:28 »
será que estou errado quanto á porta serial???????  poderei eu utilizá-la para o GPS e monitor sem sem o multiplexer externo????????    se não, qual o multiplexer que me aconcelham ????????   e não precisa de codigo ?????????
Bem eu nunca usei esses shields especificamente, mas tu próprio é que disseste que o wave shield interfere com o softwareserial, por isso não parece ser mto boa idéia ir por esse caminho...
Quando ao multiplexer, uses seja qual for a idéia é sempre a mesma, tens de escrever algum código mas pouca coisa. Basicamente são apenas algumas linhas para configurar qual das portas queres usar, e estar semrpe a alternar entre uma e outra para fazer o efeito que tu querias (da bengala).
Mas se tambem dizes que o sensor tem uma saida analógica, eu iria antes por esse caminho... Simplificava tudo, tanto a nível de código como a nível de haardware!

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #5 em: 09 de Novembro de 2013, 14:38 »
A ideia do multiplexer é boa...
Em relação ao melhor multiplexer para essa aplicação, não faço a mínima ideia, mas um ic com 2 MUXs 2:1 com 1 bit de seleção serve para o que queres, pesquisa mais sobre isso

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #6 em: 09 de Novembro de 2013, 15:28 »
Obrigado pelo vosso feedback, na verdade como disse na apresentação surgiam coisas estranhas quando juntei a solução GPS e WaveShield, testei alterar pedaços de codigo tanto de uma como de outra livraria, inclusivé impor condições para que enquanto estivesse a tocar o ficheiro não fizesse mais nada, mas aconteciam coisa variadas e desajustadas ao pretendido por mim, como por ex: a meio do loop() entrar no setup(), quando pelo conhecimento que tenho o setup só é executado uma unica vez no inicio do programa.
Tinha uma suspeita que pudesse ser de conflito nas interrupções mas não sabia o que originava isso, inicialmente achei que o codigo do gps usava interupções, o do WaveShild também e as mesmas entravam em conflito, não descarto isso por enquanto, mas havia mais do que isso porque comentei o codigo do GPS e mesmo assim não funcionava bem.
Pesquisei bastante e foi aí que encontrei isto: http://forums.adafruit.com/viewtopic.php?f=31&t=34003&p=168248&hilit=waverp#p168248  , dai comentei o codigo que defenia o SoftwareSerial e testei que as coisas já funcionavam.

O sensor de distancia já está resolvido adquirindo o sinal por uma porta analogica que ainda tenho disponivel, agora só preciso a Serial porta para o GPS, tentei ligar o GPS ao porto digital "0 e 1" e no  setup defeni Serial.begin(38400); que é o baud rate do GPS, mas ao tentar compilar dá-me erro, qualquer coisa como que a porta COM? já está atribuida, pesquisei alguma coisa e acho que no UNO a serial port está dedicada á ligação USB entre o Arduino e o computador, espero estar errado e que tudo isto não passe de codigo mal feito de minha parte, é por isso que peço a quem me possa ajudar nisto que o faça.
desde já agradecido pela vossa atenção e por qualquer sugestão de vossa parte.

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #7 em: 09 de Novembro de 2013, 19:15 »
A porta está atribuida ao USB mas nada impede que uses com outros dispositivos. A ligação do ATMega ao Serial-USB é feita por resistências de 1k, o que lá ligares vai-se sobrepor.
Mux estava a pensar em algo simples e comum, tipo o 74HC4052, mas pelo caminho que estás a seguir já não precisas.

Outra ideia: Se usas o waveshield só para emitir um bip, podes desfazer-te dele. Podes usar um besouro ou então usar um timer (0 é usado pelo arduino, o 1 e 2 devem estar livres) para gerar a frequencias do bip  e amplificar com um lm386 ou do género.

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #8 em: 10 de Novembro de 2013, 00:54 »
O WaveShild é fundamental no que estou a fazer, não só para emitir um "bee", mas também para jogar audio e inclusivé gravar audio, isto faz parte dum projecto já antigo que estive a desenvolver e durante muito tempo tive-o parado por diversas situações que foram acontecendo.
A ideia é gravar percursos para invisuais, e posteriormente os percursos servirem de guia para os mesmos invisuais, logo o audio é fundamental para este projecto. depois de o apresentar na escola (tenho de o acabar até ao fim deste ano) vou o apresentar aqui com todo detalhe.
Com as portas digital Serial (0 e1)utilizei assim o codigo:
Código: [Seleccione]
//#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
TinyGPS gps;
//SoftwareSerial ss(6, 7);

void setup()
{
  Serial.begin(38400);
 // ss.begin(38400);
 
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (Serial.available())
    {
      char c = Serial.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
 
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}
Não compilou dando-me o seguinte erro:"avrdude: stk500_getsync(): not in sync: resp=0x2a", também já chegou a dar-me um erro a dizer que a COM5 (a que usa) já estava atribuida.
Pesquisei no GOOGLE sobre o erro e encontrei algumas referencias de que com o arduino UNO os portos Serial estão dedicados á comunicação com o computador(mas como o meu ingles é fraquinho não posso estar totalmente certo disso), e, até aconcelhavam a não utilizar as portas para ver se o erro se resolvia.
Quando tenho as portas (0 e 1) ligadas, o erro dá-me sempre, se utilizo o SoftwareSerial funciona bem e não dá erro.
Pelo codigo que postei (que é do tinyGPS simple teste ajustado por mim ás portas Serial), sabendo que o baud rate do meu gps é 38400, estou a utilizar mal as portas Serial?????
se sim, como devo fazer?????

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #9 em: 10 de Novembro de 2013, 14:53 »
Algo óbvio que pode ter passado e só me ocorreu a ler sobre erros getsync() na net: quando fazes upload do programa para o arduino não podes ter nada ligado no pino RX nem TX, senão pode-se sobrepor à programação e dar erro.
« Última modificação: 10 de Novembro de 2013, 14:56 por jm_araujo »

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #10 em: 10 de Novembro de 2013, 17:07 »
OK, e existe algem que tenha alguma ideia de algo que possa fazer para trabalhar com o GPS e o WaveShild simultaneamente..????????????
Agradecia qualquer sugestão,..... algumas vezes a solução vem das ideias mais inesperadas.
Fico agradecido pelo feedback.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #11 em: 10 de Novembro de 2013, 20:14 »
Mandas o IDE do arduino para o lixo e fazes o código de raiz, garantidamente que funciona tudo junto e ainda sobram 2 timers, como é código miserável para arduino, toda a gente e a mãe deles precisam de interrupções e timers e não sei que mais...

E sim, não podes ter nada ligado ao Rx/Tx para programar, algumas coisas fazem tri-state aos pinos de serial e não interferem, mas dado que o tipico shield para arduino é desenhado meio á sorte, nunca pensam nessas coisas.
Avr fanboy

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #12 em: 10 de Novembro de 2013, 20:44 »
Obrigado senso, mas o que me sugeres é algo que vai além das minhas capacidades, esperava poder encontrar uma solução que me permitisse fazer uso do código existente, integrando-o no meu.
Concordo plenamente com o que tu dizes, mas as minhas limitações levam-me a tentar encontrar outras soluções, e, se tens alguma ideia de como me ajudar agradeço.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #13 em: 10 de Novembro de 2013, 21:39 »
A biblioteca serial devia funcionar para o que queres, mas usar um timer, possivelmente o 1, e o wave shield vi agora que não faz nada externo, quem tem de tratar de tudo é o micro, assim sendo, a opção mais simples deve ser saltares para um arduino mega/ usar um atmega644p que tem 40 pinos, existe em DIP, e que tem duas portas serial, e é suportado pelo IDE do Arduino.
Avr fanboy

Offline Asilva

  • Mini Robot
  • *
  • Mensagens: 29
Re: arduino, waveshield, gps - problema com SoftwareSerial
« Responder #14 em: 10 de Novembro de 2013, 22:05 »
nenhuma solução mais barata????? é que já estourei muitas patacas nisto e mais 40 não me dava jeito nenhum......
agradeço ideias.