collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 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: IR comando  (Lida 6860 vezes)

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

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #15 em: 26 de Julho de 2013, 23:23 »
peguei num codigo e adaptei para arduino, e depois de perceber, e estudar  o problema continua.
Um simples blink em Rf mas o led não pisca normalmente.
Imagem do código http://cl.ly/image/0Q2a0j1m0d0n/o

Será que tem haver como a forma da onda é criada?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #16 em: 26 de Julho de 2013, 23:33 »
Tu tens as antenas montadas?
Já pensaste em simplesmente passar um fio de um andar para o outro?
Avr fanboy

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: IR comando
« Responder #17 em: 27 de Julho de 2013, 00:28 »
Boas,
Será que isso não tem a ver com o facto de estares constantemente a ler o buffer da porta Serial mesmo quando não há nada para ler?
No código que tens no recetor não há nenhuma condição para que leias o buffer apenas quando estiver lá algo, então ele é lido constantemente e pode acontecer que não seja lido na ordem correcta... Não sei se me fiz entender bem.
Ou seja, os bytes podem estar disponíveis para ler apenas no momento em que estás a atribuir o valor à variável data e se isso acontecer a variável data vai ter o valor que a variável raddress deveria ter e assim sucessivamente.

Edit: Não falta outro delay no código do transmissor? Da forma como está o led vai estar sempre aceso.
« Última modificação: 27 de Julho de 2013, 00:32 por rglove »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #18 em: 27 de Julho de 2013, 00:46 »
Pois, falta ai um Serial.available(), mas não precisa de nenhum delay no lado do receptor.
Avr fanboy

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: IR comando
« Responder #19 em: 27 de Julho de 2013, 00:49 »
O delay que falei era no void loop do lado do trasmissor.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #20 em: 27 de Julho de 2013, 04:25 »
Sim do lado do transmissor precisas de ter mais um delay depois de enviares o ledoff, senão o loop inicia logo outra vez e manda logo o ledon de seguida.

Do lado do receptor há mais alguns problemas:
-Como já foi referido, só podes ler coisas quando houver algo para ler (serial.available)
-estas a enviar 4 bytes no emissor mas a ler só 3 no receptor (o SYNC é enviado mas não é lido em lado nenhum)
-não estas a garantir de forma menhuma que os bytes estejam a ser lidos no sitio certo. a idéia é estares sempre a ver se chega o byte que marca o inicio da mensagem (SYNC), e só quando esse for lido é que vais ler os 3 bytes que vem a seguir a esse...

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #21 em: 28 de Julho de 2013, 16:30 »
http://img607.imageshack.us/img607/6208/9b5r.png


A variavel SYNC é um startbit, se o SerialAvailable detectar SYNC , le os 3 bits seguinte depois faz a verificação e liga ou desliga o led. 
É assim a teorica certo? mas não funciona. coloquei as 2 beardboard uma em cada computador e não dá nada nem pisca nem nada.

Exprimentei tambem com  if (Serial.available() > 1 ) mas não dá nada.

Mas ainda tenho erros no codigo?


agradeço desde já

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: IR comando
« Responder #22 em: 28 de Julho de 2013, 19:25 »
Boas,
Continua com erros...
Muda para Serial.available()>0.
Parece-me que o byte SYNC não está a ser usado para nada. Tens 2 opções: continuas a enviar esse byte, mas tens que adicionar uma linha no lado do recetor: syc = Serial.read() ou simplesmente Serial.read(); apagas a linha que envia o byte no lado do transmissor visto que não está a ser usado para nada...
Depois deve funcionar.

Hmm, não sei até que ponto podes declarar o pino 1 como output visto que ele vai ser usado pela porta Serial... Essa linha não está lá a fazer nada e não sei até que ponto pode lá estar.

Cumps
« Última modificação: 28 de Julho de 2013, 19:29 por rglove »

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #23 em: 28 de Julho de 2013, 20:24 »
Credo de onde é que veio aquele Serial.available()>170??? :P
Como o rglove já referiu, o byte SYNC continua a não estar a ser usado para nada (nem sequer a ser lido da parte do receptor)...
Não concordo é com esta parte:
Citar
Tens 2 opções: continuas a enviar esse byte, mas tens que adicionar uma linha no lado do recetor: syc = Serial.read() ou simplesmente Serial.read(); apagas a linha que envia o byte no lado do transmissor visto que não está a ser usado para nada...
Enviares o byte e depois ler o valor e não fazer nada com ele não serve de nada... Não enviares o byte tambem não é boa idéia, os headers servem para alguma coisa... Neste caso, a idéia daquele byte é sinalizar o inicio da mensagem, e usá-lo como ponto de referencia para ler o resto da mensagem. O problema aqui é que tu envias 4 bytes... Mas basta haver um bocado de ruido para facilmente haver bytes perdidos pelo caminho, ou então aparecerem bytes do nada...
Daí o formato (header|mensagem|crc). O header indica onde é que cada envio começa, de seguida vem os bytes com a informação que se quer enviar, e por fim o crc para confirmar que não houve erros a meio da transmissão.
Tens aqui uma versão simples da coisa:
Código: [Seleccione]
    while (Serial.available() > 0)
    {
        int value=Serial.read(); 
        // Se recebe um sync, comeca a ler a mensagem
        if (value==SYNC) read_pos=0;
        else
        {
            // Le cada byte para a variável certa
            if (read_pos==0) raddress = value;
            else if (read_pos==1) data = value;
            else if (read_pos==2) chk = value;
            read_pos++;
            // Se já leu 3 posições, a mensagem já acabou
            if (read_pos==3)
            {
                // Confirma se o CRC bate certo
                if (chk==(raddress+data))
                {
                    // Dentro deste IF podes fazer o código que quiseres,
                    // que sera executado quando chega uma mensagem
                }
            }
        }
    }
Este código assume que o SYNC é um byte unico na mensagem (mesmo o crc tem de ser diferente do valor de SYNC). Se fosse para mandar mensagens mais complexas a coisa teria de ser um bocado diferente, mas para a aplicação em causa serve bem...

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #24 em: 29 de Julho de 2013, 22:33 »
desde já agradeço.
O tempo acabou, e não consegui. Ficará para quando vier.
No entanto tenho uma duvida? Se puxar  um fio, a distancia ainda vai ser vai ser considerável 13metros,  os impulsos para led IR e a voltagem não se vai perder pelo meio?



Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: IR comando
« Responder #25 em: 29 de Julho de 2013, 22:46 »
Penso que devem haver cabos próprios para essas distâncias :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #26 em: 29 de Julho de 2013, 23:38 »
13m não é nada...
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: IR comando
« Responder #27 em: 30 de Julho de 2013, 10:03 »
Acho que comprei uns fios fininhos (tipo daqueles que se usa no arduino) e a resistencia em 100m era inferior a 10ohm. Não me lembro exatamente mas penso que era 1-4Ohm
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/