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.
Temos aqui alguém que mete um bocado de código com isto:
System.Threading.Thread.Sleep(333) //a propósito tens aqui um erro...
E depois não sabe fazer um switch on um encadeamento de ifs.
char var = Serial.read();
switch (var) {
case 'A':
SerialPort.Write("a") ' envia o pedido
//Dim b As String = SerialPort1.ReadExisting() 'le a resposta //ISTO NÃO É C...
break;
case 'B':
SerialPort.Write("b") ' envia o pedido
break;
case 'C':
SerialPort.Write("C") ' envia o pedido
break;
}
Não percebi para que é tanta interacção com o computador. Queres explicar um pouco mais da aplicação?
Use também o SerialPort.BytesToRead, porque pode ser que venha uma rajada de bytes da serial, em vez de um byte por vez
Coloque todo mundo que chegar da serial em um buffer
Quando enviar algo para o Arduino, sinalize para um System.Threading.AutoResetEvent que também esteja dentro do evento SerialPort.DataReceived, como uma forma de sincronizar as operações de envio e espera de dados
neuron_upheaval:
O SerialPort.ReadExisting() funciona muito mal
Concordo com o neuron, já tive problemas com o SerialPort.ReadExisting() também. =/
Usando SerialPort.BytesToRead e chamando o comando somente após o caractere de finalização (exemplo a quebra de linha) você não terá maiores problemas ^^
E por garantia eu sempre faço o retorno PC->Arduino <-> Arguino->PC para ter certeza de que tudo correu bem. Uso um modulo bluetooth e após uma certa distância ele começa a falhar rs