Por favor, alguém poderia me ajudar.

O programa abaixo lê dados do sensor na porta A0 e envia para serial. só está enviando dados quando a leitura no sensor é zero. Na verdade eu queria que enviasse dados quando for acima de zero. quando for zero, fica parado.

************************************************************************************************ 

int PinAnalogA0 = 0;
float valAnalog=0; // Coloca o Pino A0 a 0

float temp = 0;
int samples[4]; // variavel para melhor precisão
float maxi=0, mini=1000000;


void setup()
{
Serial.begin(9600);

}

void loop ()
{

valAnalog = analogRead(PinAnalogA0);
temp = (valAnalog * 48.0) /512;

if(temp > maxi)
{
maxi = temp;
} // regista temperatura maxima

if(temp < mini)
{
mini = temp;
} // regista temperatura minima

while(temp == 0)
{
if (Serial.available() > 0)
{
temp= Serial.parseFloat();
}

Serial.print(" DB read= " );
Serial.print(temp);
Serial.print(" || DB min= " );
Serial.print(mini);
Serial.print(" || DB max max= " );
Serial.print(maxi);
Serial.println("");

delay(200);
}
}

Exibições: 344

Responder esta

Respostas a este tópico

o erro deve estar aqui:

while(temp == 0)
{
if (Serial.available() > 0) 

temp= Serial.parseFloat();
}

o que deveria ser:

while(temp >= 0)
{
if (Serial.available() > 0) 

temp= Serial.parseFloat();
}

A diferença:

while(temp == 0) para while(temp >= 0)

Tenta isso parça ! 

Qualquer coisa, estamos ai !

na verdade seria while(temp > 0) , se não ele executaria mesmo quando tempo fosse zero.

verdade ! 

ele não quer que execute quando 0.

Se eu colocar " while(temp > 0) " fica parado quando está em zero, mas qdo eu coloco acima de zero, começa a fazer a leitura e não para mais, mesmo voltando a zero.

Rogerio me tira uma duvida, primeiro você pega o valor de temp pela leitura da porta analógica A0 e depois você pega pela porta serial. Por que?

Bom dia, João. Na verdade eu quero que o projeto funcione da seguinte forma:

O sensor irá ler o ruído de um motor. O arduino capta esse sinal e envia na serial pro PC.

O PC tem um programa que recebe esses valores e salva em arquivo texto, na qual eu chamerei esses valores de decibeis.

Então, quando eu tirar o motor da bancada de testes, o programa deve parar de ler até que eu coloque o próximo motor para ser lido.

Por isso eu preciso da serial, pra ficar gravado os decibeis lido de cada motor verificado.

tente isto:

boolean bDo = false; 

if(temp>0) //testa na primeira vez, como ponto de partida

{

   bDo = true;

}

while(bDo)
{

   if(temp>0)

   {

        if (Serial.available() > 0) 
        { 
             temp= Serial.parseFloat();

        }

   }

   else

   {

    bDo = false;  

   }

}

Eu não testei, mas tente isto. 

 Olá Guihgo,


Eu adicionei a rotina que vc postou e funcionou perfeitamente. Agora, qdo está em zero ele para a leitura. Acima de zero, volta a fazer a leitura.

Muito obrigado, valeu mesmo!

Imagina ! Fico feliz em ajudar.

Qualquer coisa, não hesite em perguntar novamente !

Obrigado por compartilhar suas dúvidas aqui no LDG !

Att

 Guihgo :{)

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço