Estou fazendo um programa em VB 2008 que ira se comunicar com o arduino.

O programa envia pela serial o valor "A", e o arduino quando ler essa mensagem pela serial envia de volta um valor numérico. E isso acontece com outras 2 variáveis(total de 3 variáveis) .

Isso deve acontecer 1 vez a cada segundo.

SerialPort1.Write("a") ' envia o pedido 
Dim b As String = SerialPort1.ReadExisting() 'le a resposta
System.Threading.Thread.Sleep(333)

SerialPort1.Write("b") ' envia o pedido
Dim b As String = SerialPort1.ReadExisting() 'le a resposta
System.Threading.Thread.Sleep(333)

SerialPort1.Write("c") ' envia o pedido
Dim c As String = SerialPort1.ReadExisting() 'le a resposta
System.Threading.Thread.Sleep(333)

O meu problema é que as vezes as variáveis estão se misturando.

gostaria de saber se existe alguma forma de colocar uma verificação?

Tipo so sera enviada a string "b" para o arduino depois o VB receber um sinal "x".

Vixi ... espero ter conseguido explicar o que eu estou tentando fazer. Qual quer ajuda é bem vinda

Exibições: 841

Responder esta

Respostas a este tópico

Explicando melhor...

Eu preciso que o vb só peça a variável B depois de receber um sinal do arduino.

Já pensou em usar o conceito de Maquina de Estados?

Sou novato em programação...

Vou dar uma estudada nas maquinas de estados. Vc poderia indicar uma boa fonte sobre o assunto?

Boa Noite

Estou um pouco enferrujado em VB.Net e não tenho porta serial então ja peço desculpas se nao funcionar :)

 

Você não comentou, mas acredito que esteja usando a biblioteca do System.IO.Ports para efetuar a comunicação.

 

Então vamos lá, você está usando a instrução ReadExisting, ela faz uma tentativa de leitura pontual, caso o buffer da serial esteja vazio ela parte para a próxima instrução, que no seu caso é um sleep na thread (acredito que seja uma tentativa de esperar o buffer da serial encher, se sim, neste caso ele deveria ficar antes do ReadExisting)

 

EU partiria para uma função usando loop infinito e threads, mas acho que uma pequena adaptação no seu código ja vai fazer funcionar certinho, segue minha sugestão, fiz o código em console application:

 

 

Imports System.IO.Ports

Module Module1

   

Sub Main()

       

Dim SerialPort1 As New SerialPort

        SerialPort1.PortName = "com1"

        SerialPort1.Open()

        SerialPort1.Write("a")       

     ''Aqui você prepara a variável de Buffer da Serial, considerando que você sempre receberá apenas um byte da serial

ReDim Preserve Buffer(1)

''Enquanto o VB não receber 1 byte na serial ele não sai da linha de baixo

        SerialPort1.Read(Buffer, 0, 1)

       

   

End Sub

End Module

Perfeito ....

Muito obrigado...

É exatamente isso que preciso ...

o código esta dando alguns erros:

Error 1 'Buffer' is a type and cannot be used as an expression. 

Error 2 'Buffer' is a type and cannot be used as an expression.

Alguem pode dar um help para desenrolar .....

Opa, ao copiar e colar o código pra cá acabei apagando linhas que não deviam

 

Coloque Dim Buffer as Byte() antes do Dim SerialPort1

como faço para fazer isso sem ser em console application?

 

 

Segue projeto de windows application em anexo

Anexos

Jaison sera que dava para vc mandar direto pro meu e-mail o arquivo?

Esta dando um erro quando tento baixar o arquivo que vc postou...

Muito obrigado pela atenção....

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço