AJUDA COM LCD PRINT

Bom dia pessoal eu estou com um proplema.
Eu queria imprimir no LCD o intervalo de uma gota.
Assim que eu queria que ficasse;
quando uma gota passa pelo sensor analógico e a entrada fica menos que 500,
queria printar o valor dos segundos do intervalo de um pingo para o outro sempre sobrescrevendo o anterior.

Acho que o que está acontecendo e o seguinte, quando a entrada esta menos que 500 ela printa o tempo e logo em seguida ja printa o proximo valor do millis que eu zero entao sempre fica zero no lcd.

codigo

sensor0 int = A0;
Unsigned long timer1;
temp1 longo sem sinal;
int valorsensor0 = 0;

#include <LiquidCrystal.h>

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

sem sinal long previousMillis1 = 0;
sem sinal long previousMillis2 = 0;

intervalo longo const 1 = 3000;
intervalo longo const 2 = 3000;
configuração vazia ()
{
pinMode (sensor0, INPUT);
lcd.begin (16,2);
lcd.clear ();
lcd.setCursor(0, 0);
}

void loop()
{
unsigned long currentMillis = millis();

valorsensor0 = analogRead(sensor0);
lcd.setCursor(0, 0);
lcd.print("Ping 1=");
lcd.setCursor(12, 0);
lcd.print(valorsensor0);

{if (valorsensor0 <500 )
temp1 = currentMillis - previousMillis1;
timer1 = temp1 / 1;
lcd.setCursor(8, 0);
lcd.print(timer1);
previousMillis1 = currentMillis;}
}

Esse código funciona???
Posta o código todo, aí poderemos analisar melhor!

#include <LiquidCrystal.h>

int sensor0 = A0;
unsigned long timer1; 
unsigned long temp1;
int valorsensor0 = 0;

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;

unsigned long const 1 = 3000;
unsigned long const 2 = 3000;
unsigned char pingo = 0; 

void setup () {
  pinMode (sensor0, INPUT_ANALOG); 
  lcd.begin (16,2);
  lcd.clear ();
  lcd.setCursor(0, 0);
}

void loop()
{
 unsigned long currentMillis = millis();
          
  valorsensor0 = analogRead(sensor0); 
  lcd.setCursor(0, 0);
  lcd.print("Ping 1=");
  lcd.setCursor(12, 0);
  lcd.print(valorsensor0);
  
  if (valorsensor0 < 500 && pingo == 0 ){
     pingo = 1; 
     temp1 = currentMillis - previousMillis;
     timer1 = temp1 ;
     lcd.setCursor(8, 0);
     lcd.print(timer1);
     previousMillis = currentMillis;
     }
  if (valorsensor0 > 500) pingo = 0; //reseta para apanhar o próximo pingo.   
}

O teu computador tem um software qualquer que traduz o inglês para Português. Talvez seja boa ideia desligares isso quando estiveres a postar no fórum.

Acho que o problema que tens é que o teu código não isolava o momento do pulso. Ou seja, ele calculava um pulso mas continuava a fazer o cálculo enquanto o pingo passava. Se o pingo demorasse dois ciclos a passar tu ias ver cerca de 2 ou 3 milisegundos.
O que eu adicionei foi o que se chama dum detector de flanco. Ou seja, ele apenas detecta e conta quando o sinal muda. Enquanto o sinal do ADC ficar abaixo de 500, ele não executa o código de cálculo do pulso e deve fazer uma diferença no que vês.

Recomendo começar mais simples, analisando os dados puros.
Use algum programa de telemetria e apenas faça o Arduino enviar o valor do sensor o mais rápido que conseguir.
Programa de Telemetria
Depois veja no gráfico se consegue visualizar se o sinal é quadrado como pensa ou se é como um ruído.
Dependendo da forma do sinal de cada gota passando pelo sensor ótico.
Com isso vai poder analisar melhor qual técnica usar para saber o início de cada gota e assim começar e terminar o cronômetro.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.