Pessoal Boa Tarde,

Sou novo no LDG e estou engantinhando em arduino.

Estou tentando desenvolver um projeto para medição de vazão de água e controle de uma válvula. A vazão será mostrada no display lcd e a válvula sera fechada ou aberta via serial. Consegui visualizar e controlar a valvula. Estou tentando escreve uma segunda linha no display indicando quando a valvula estiver fechada e a tecla D do teclado for acionada a mensagem: Valvula fechada.Abaixo tem o programa com estou usando:

float vazao; //Variável para armazenar o valor em L/min
float media=0; //Variável para tirar a média a cada 1 minuto
int contaPulso; //Variável para a quantidade de pulsos
int i=0; //Variável para contagem
float total=0;
int botao;
float Q=vazao;
float T=total;
int abre = 11;
int fecha = 12;
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


void setup()
{
Serial.begin(9600); //Inicia a serial com um baud rate de 9600

pinMode(abre, OUTPUT);
pinMode(fecha, OUTPUT);
pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) para trabalhar como interrupção
Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial


lcd.begin(16, 2);
lcd.setCursor(4,0);
lcd.clear();
lcd.setCursor(0,0);
lcd.print ("Vazao:");
lcd.setCursor(13,0);
lcd.print ("l/s");
lcd.setCursor(0,1);
lcd.print ("Vol:");
lcd.setCursor(14,1);
lcd.print ("M3");

}


void loop ()
{

contaPulso = 0; //Zera a variável para contar os giros por segundos
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção

vazao = contaPulso / 5.5; //Converte para L/min
media=media+vazao; //Soma a vazão para o calculo da media
total=media/60; // valor da volume em L
i++;


char tecla;


tecla = Serial.read(); // armazena em "tecla" o retorno da função read()
//essa função lê um valor que é escrito na porta serial


if(tecla == 'l') //verfica se a tecla digitada é igual a l (liga)
//se for igual entra na condiçao e liga o led
{
digitalWrite(abre, HIGH);
delay(3000);
digitalWrite(abre, LOW);
}

delay(1000);

if(tecla == 'd') //verfica se a tecla digitada é igual a l (liga)
//se for igual entra na condiçao e liga o led
{
digitalWrite(fecha, HIGH);
delay(3000);
digitalWrite(fecha, LOW);
}

delay(1000);


Serial.print(vazao); //Imprime na serial o valor da vazão

Serial.print(" L/min - "); //Imprime L/min
Serial.print(i); //Imprime a contagem i (segundos)
//Serial.println("s"); //Imprime s indicando que está em segundos

if(i==1)
{
media = media; //Tira a media dividindo por 60
Serial.print(" TOTALIZADOR "); //Imprime a frase Media por minuto =
Serial.print(total); //Imprime o valor da media
Serial.println(" M3 "); //Imprime L/min
// media = 0; //Zera a variável media para uma nova contagem
i=0; //Zera a variável i para uma nova contagem
Serial.println("\n\nInicio\n\n"); //Imprime Inicio indicando que a contagem iniciou

lcd.setCursor(7,0);
lcd.print (vazao);
lcd.setCursor(5,1);
lcd.print (total);

}
}

void incpulso ()
{

contaPulso++; //Incrementa a variável de contagem dos pulsos
}

Exibições: 453

Responder esta

Respostas a este tópico

Bom dia Everton,

Legal a sua idéia,

Voce está tendo alguma dificuldade com este sketch?

Rui

OLa Rui ,

Boa tarde,

Sim estou tentando minha ideia é criar outra tela no display que mostra uma mensagem indicando que a valvula esta fechada. Isto quando via serial e apertar a tecla D do teclado do notebook.Voce tem alguma ideia sobre isto 

Everton, boa noite.

Modifique as linha do LCD e acrescente outras ficando assim:

if (tecla == 'l')
{
lcd.setCursor(7,0);
lcd.print (vazao);
lcd.setCursor(5,1);
lcd.print (total);
}
else
{
lcd.setCursor(7,0);
lcd.print (" ");
lcd.setCursor(5,1);
lcd.print ("Val. Fechada");
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço