Serial.Read

Good afternoon,

I have a big problem in my project.

I have the following code in Arduino, to read de data from labview (string with "LG:") and this program not read the values in Serial.print.
My objective is when i put the button ("LG:") in labview the code enters in (if string=="LG") the serial monitor prints de value.
Can help me?

#include <eHealth.h>
#include <eHealthDisplay.h>

char c;
String string;
void setup()
{

eHealth.readGlucometer();
Serial.begin(115200);
delay(100);
}

void loop()
{
if(Serial.available() > 0) string = "";

while(Serial.available() > 0)

{
c = (byte)Serial.read();
if(c == ':')
{
break;
}
else
{
string += c; // string = string + c;
}
delay(1);
}

if(string == "LG")
{
Serial.print(eHealth.glucoseDataVector[0].glucose);
Serial.print(eHealth.glucoseDataVector[1].glucose);
Serial.print(eHealth.glucoseDataVector[2].glucose);
Serial.print(eHealth.glucoseDataVector[3].glucose);
delay(1000);
}
if(string =="DG")
{
Serial.flush();
}

}

Thanks.

And why do you write in English on a Portuguese sub-forum?

Já olhaste para esta função?

Em C não podes comparar strings com ==.

Boa tarde,

Antes de mais agradeço a ajuda.

O problema é que ele aceita a ordem "LG:".

Para desligar é que não aceita, mas o que deveria fazer?

Ele está a receber a ordem vinda do exterior com o labview. ELe reconhece a string.

O problema é que para apagar é que não sei como hei-de fazer.

Tens alguma sugestão?

Muito obrigado.

Você quer apagar o serial monitor? Não tem como, só abrindo e fechando a janela. Mas porque você quer apagar o serial monitor?

Boa tarde,

Quando digo apagar, não é serial monitor.

Quando envio a string "DG" do labview, significa desliga ele não pára a execução do programa pois eu coloquei no programa do arduino, um fflush.

Como poderei fazer isso?

Abraço

fasp_asp:
Boa tarde,

Quando digo apagar, não é serial monitor.

Quando envio a string "DG" do labview, significa desliga ele não pára a execução do programa pois eu coloquei no programa do arduino, um fflush.

Como poderei fazer isso?

Abraço

Você quer que quando digite DG o programa pare, é isso? Quer desligar o Arduino?

A título de informação, Serial.flush() só serve para que o código fique parado naquela linha enquanto todos os dados não foram enviados pelo microcontrolador. Ou seja, em seu código ele não está servindo de nada.

I have a big problem in my project.

Pois tens, explicar é um deles.

O problema é que para apagar é que não sei como hei-de fazer.

Quando envio a string "DG" do labview, significa desliga ele não pára a execução do programa pois eu coloquei no programa do arduino, um fflush.

Sabes o que o flush faz?
Ele nao limpa o buffer agora, o significado do flush mudou ...

flush()
Description

Waits for the transmission of outgoing serial data to complete. (Prior to Arduino 1.0, this instead removed any buffered incoming serial data.)

Boa tarde,

É isso que eu pretendo. Quando digito "DG" no labview o programa do arduino volta para o início e fica à espera de que eu ligue no "LG" através do labview, isto é, percorre todos os if's.

Isso e possível?

Obrigado a todos!

no lugar do serial.flush você pode colocar:
while(!Serial.available()){} // fica preso aqui até receber qualquer coisa pela serial...

nesse programeta aí que não faz mais nada, tudo bem, mas se começar a acrescentar mais funções, vai ter problemas...

Ok, Obrigada.

Darei feedback quando tiver resultados.

Abraço,

A primeira coisa que você tem que definir é o comportamento desejado do seu programa. A parte de enviar "LG" e ele fazer uma ação está entendida, mas e se digitar "LG" de novo antes de digitar "DG", o que você quer que aconteça, nada? Ou para mostrar o resultado novamente precisa digitar antes o "DG"?

O objectivo é que quando faço "LG" ele coloque através do Serial.print o valor no ecrã. Quando carrego em "DG" não faz a leitura do sensor na placa arduino, isto é, interrompe a leitura de valores.

A parte de enviar "LG" e ele fazer uma ação está entendida, mas e se digitar "LG" de novo antes de digitar "DG", o que você quer que aconteça, nada?
R: Ele continua a ler o valor do sensor.

Ou para mostrar o resultado novamente precisa digitar antes o "DG"?
R: Não, com isto ele pára a leitura do sensor.

basicamente queres é uma latch...

unsigned char display_data = 0; 

void setup() {

Serial.begin(9600);

}

unsigned long tempo = 0; 

void loop(){

if (tempo - millis() > 1000) {
   if (display_data == 1) {
   Serial.println("Dados");
//adiciona mais prints aqui... 
   }
   tempo = millis();//renova o millis
}

while (Serial.available () >=2) { //existem dados... 
char dados[2];
//isto não é ideal... mas experimenta. 
dados[0] = Serial.read();
dados[1] = Serial.read();

if (dados[1] == 'G') { //estamos bem lancados...
   if (dados[0] == 'L') display_data = 1;
   if (dados[0] == 'D') display_data = 0;
}
}

Basicamente, se enviares LG o arduino comeca a enviar os dados que meteres ali de segundo a segundo pela porta série e se enviares DG o Arduino para de o fazer.

É isto que pretendes?

Viva,

Sim é mais ou menos isso.

Vou adaptar ao meu programa.

Obrigado!