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
Tags:
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
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....
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por