Bom dia!

Amigos ola tudo bem? Vocês  pode me ajudar pois fiz um programa em vb e Arduíno usando 2 sensores e enviando para serial. Como separa as duas leitura e exibir numa textbox?Vc tem um exemplo?

bem como esto começando agora to fazendo só uns programinhas de testes.

Bem, vou te explicar como fiz o programa estou enviando do Arduíno para serial a leitura de 2 sensores 

no VB eu to conseguindo ler estes valores mas só que ta tudo junto gostaria de saber como enviar as leituras para 2 texbox diferente cada uma lendo um sensor.

Exibições: 6186

Responder esta

Respostas a este tópico

Eu fiz algo semelhante recentemente usado vb.net
Explique melhor seu projeto, de preferencia coloque aqui oque voce ja fez.
Acredito que eu posso te ajudar.

Bom dia amigo

bem como esto começando agora to fazendo só uns programinhas de testes.

Bem, vou te explicar como fiz o programa estou enviando do Arduíno para serial a leitura de 2 sensores 

no VB eu to conseguindo ler estes valores mas só que ta tudo junto gostaria de saber como enviar as leituras para 2 texbox diferente cada uma lendo um sensor.

Entendi.
Voce pode me enviar o codigo que esta usando no arduino e no vb pra eu saber como os dados estao sendo enviados e tratados?

Bem amigo segue códigos só me desculpe pelo código fraco pois estou pegando códigos de vários posts 

e tentando se vc poder me ajudar te agradeço eu quero que os sensores fiquem sendo monitorados constantemente.

Codigo arduino

int led = 12;

void setup()
{
pinMode(led,HIGH);
Serial.begin(9600);

}

void loop()
{
char aux = Serial.read();
if (aux =='a' )
{
digitalWrite(led,HIGH);
Serial.println("Ligado");
}

if (aux == 'b')
{
digitalWrite(led,LOW);
Serial.println("Desligado");
}


{ int sensorValue = analogRead(A0);
// print out the value you read:
Serial.print("Sensor 01 :");
Serial.println(sensorValue);


delay(1000);
} // delay in between reads for stability

{ int sensorValue = analogRead(A1);
// print out the value you read:
Serial.print("Sensor 02 :");
Serial.println(sensorValue);

delay(1000);
} // delay in between reads for stability
}

Código VB

Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
SerialPort1.Open()
SerialPort1.Write("b")
System.Threading.Thread.Sleep(250)
'Recebe'
TextBox1.Text = SerialPort1.ReadExisting()
OvalShape2.Visible = True

End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Define a taxa de transferencia ente o pc e o arduino'
SerialPort1.BaudRate = 9600
'Paridade=name'
SerialPort1.Parity = System.IO.Ports.Parity.None
'Bits de dados'
SerialPort1.DataBits = 8
'Stop bits = 1 '
SerialPort1.StopBits = System.IO.Ports.StopBits.One
'Endereço / nome da serial'
SerialPort1.PortName = "COM3"

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

'envia'
SerialPort1.Write("a")
'Espera 250 milisegundos'
System.Threading.Thread.Sleep(250)
'Recebe'
TextBox1.Text = SerialPort1.ReadExisting()
OvalShape1.Visible = True
OvalShape2.Visible = False

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim i As Integer


'envia'
SerialPort1.Write("b")
'Espera 250 milisegundos'
System.Threading.Thread.Sleep(250)
'Recebe'
TextBox2.Text = SerialPort1.ReadExisting()

Eu acredito que a melhor alternativa para o seu problema é fazer duas leituras (uma para cada sensor), evitanto futuros problemas.
Voce pode fazer isso adicionando uma restriçao no arduino para enviar a leitura somente quando receber o comando do computador.
Por exemplo, substitua o codigo do arduino

int sensorValue = analogRead(A0);
Serial.print("Sensor 01 :");
Serial.println(sensorValue);
delay(1000);
int sensorValue = analogRead(A1);
Serial.print("Sensor 02 :");
Serial.println(sensorValue);
delay(1000);

para

if (aux=='c')
{
int sensorValue = analogRead(A0);
Serial.print("Sensor 01 :");
Serial.println(sensorValue);
}
if (aux=='d')
{
int sensorValue = analogRead(A1);
Serial.print("Sensor 02 :");
Serial.println(sensorValue);
}

E no VB voce coloca um timer, na propriedade Interval voce escolhe o intervalo que deseja para a leitura dos sensor, e coloca o seguinte codigo no timer

SerialPort1.Write("c")
System.Threading.Thread.Sleep(250)
TextBox1.Text = SerialPort1.ReadExisting().Replace("Sensor 01 :","")
System.Threading.Thread.Sleep(250)
TextBox2.Text = SerialPort1.ReadExisting().Replace("Sensor 02 :","")
System.Threading.Thread.Sleep(250)

Isso vai fazer a leitura separadamente e ainda retirar "Sensor 01 :" ou "Sensor 02 :" que o arduino envia junto da leitura, e envia a leitura a seu TextBox correspondente.
Só nao esqueça de mudar as propriedade do timer Enable para True e Interval para o intervalo que voce deseja.

Espero ter ajudado.
Qualquer duvida, nao hesite em perguntar

Muito obrigado meu amigo ficou ótimo ! Que Deus te abençoe bastante.

Pessoal primeiramente acostumem-se a não usar delay, isso é gambiarra, deixa o programa amarrado,

Nelcimar:  Primeiramente voce precisa saber a forma que esta recebendo estes dados no PC, exemplo se voce manda no arduino a variavel X com valor de 1023

Println(X);

no seu PC voce pode receber de varias formas, a que mais aconselho é voce receber via string e converter essas string para real ou inteiro, voce quem vai decidir, aconselho voce a criar um cabeçalho de comunicacao proprio para tratar esses dados, exemplo simples

//no arduino

Print('#');  //indica comeco da comunicacao

Print(temperatura);    //digamos que essa variavel tenha valor 1023

Print('&');  //indica separacao de uma variavel para outra

Print(umidade);         //digamos que esta variavel tenha valor 512

Print(&&); //indica final da transmissao e valida os dados

println(); //aqui voce esta mandando tudo que esta bufferizado

// no pc

no exemplo de recepcao do teu portCOM

declara uma variavel 'palavra' do tipo string

declara um variavel temperatura do tipo real

declara um variavel umidade do tipo real

faz a tua variavel palavra receber a string via serial

em delphi=  

palavra:=comport1.readstring();   a tua variavel receberá o comando '#1023&512&&'

feito isso voce compara o primeiro caracter e os dois ultimos, se o primeiro for diferente de #, ou se os dois ultimos forem diferentes de && é pq algo se perdeu no caminho, dai voce invalida o que recebeu, se for verdadeiro é pq tudo chegou como deveria, dai voce pode tratar sua string de recepcao

comando '#1023&512&&'

resumindo voce trata a string que recebeu e desmembra ela, obtendo assim os valores que precisa.

Muito obrigado meu amigo ficou ótimo ! Que Deus te abençoe bastante.

como  trata a string que recebeu e desmembra

poderia me enviar  um exemplo de como fazer isto no VB 6

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço