quarta-feira, 18 de fevereiro de 2009

Conectando com o NXT via Bluetooth

Montar o NXT Explorer e o programa do LEGO é extremamente fácil, porém, romper as barreiras para além das possibilidades simplesmente disposníveis é o que é mais interessante. Um grande e bom desafio é montar um programa no PC para fazer comunicação via Bluetooth com o NXT: Para isso, utilizei meu velho conhecido de guerra, o Visual basic 2005. Com isso, a implementação via software está garantida, porém, o desafio está em fazer os "bixos" se comunicarem. Vamos lá:
Pra começar, vc deve ter no PC um dispositivo de comunicação via Bluetooth, no meu caso eu utilizei um modelo "Pen Drive", que é o mais comum.
Feito isto, agora siga os passo-a-passos deste site: http://www.extremenxt.com/vbpart1.htm

Para ajudar no entendimento da programação, é preciso ler a documentação sobre comunicação Bluetooth do NXT. Esta documentação vc encontra aki. Aliás, acredito que esta é uma obrigação para qualquer programador de baixo nível, ou seja, conhecer bem como é implementado os comandos de hardware, alocação de memória e funcionamento geral, evita perda de tempo e ajuda em uma fácil montagem do programa.

O código do site, onde é explicado a conexão, leitura da bateria e fechamento da conexão, está comentado abaixo:

Ainda abaixo, mostro como ficou o meu programa...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
With SerialPort1
.PortName =
"COM9" '<<<<> .BaudRate = 96000
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
.ReadTimeout = 300
'300ms
.WriteTimeout = 300 '300ms
End With
SerialPort1.Open()
Label1.Text =
"Connected"
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim byteOut(5) As Byte
Dim byteIn(6) As Byte
Dim Voltage, i As Integer
Try
byteOut(0) = &H2 '2 bytes na msg de saida
byteOut(1) = &H0 'deve ser 0 para NXT
byteOut(2) = &H0 '&H0 = resposta esperada &H80 = nao esperada
byteOut(3) = &HB '$HB = comando de leitura da bateria
SerialPort1.Write(byteOut, 0, 4) '0 = offset de byteOut e 4 = numero de bytes pra ler a reposta

byteIn(0) = SerialPort1.ReadByte ' nummero de bytes na msg
byteIn(1) = SerialPort1.ReadByte ' deve ser 0 para NXT
For i = 2 To 1 + byteIn(0) ' ler o resto da msg
byteIn(i) = SerialPort1.ReadByte()
Next
Voltage = byteIn(5) + byteIn(6) * 256 ' a voltagemé parte do Byte 5 e 6
Label2.Text = Voltage 'mostra a voltagem
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub










Robson

6 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Poxa, muito didático! Vou tentar fazer! Parece que é fácil, né?

    ResponderExcluir
  3. Blz Cara??
    Tentei montar o q vc passou e ñ to conseguindo, mandei um e-mail pra vc, se vc puder dar uma lida no arquivo anexo, eu agradeço, vlw!!!!

    ResponderExcluir
  4. Voce pode me dizer como faz a barra de progresso da bateria e o label do lado?

    bernardomnascimento@hotmail.com

    ResponderExcluir
  5. E como fazer para desconectar do NXT?
    Sou muito inexperiente.

    ResponderExcluir