#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
int Pulso; //Variável para a quantidade de pulsos
int j = 0; //Variável para contagem
float vazaoagua; //Variável para armazenar o valor em L/min
float valormedia = 0; //Variável para tirar a média a cada 1 minuto
char vazaoStr[10]; // Buffer para armazenar a string convertida
void draw()
{
// Comandos gráficos para o display devem ser colocados aqui
// Seleciona a fonte de texto
u8g.setFont(u8g_font_8x13B);
u8g.drawStr(5, 15, "Leitura Vazao");
// Hora
u8g.setFont(u8g_font_fub20);
u8g.drawStr(10, 47, vazaoStr); // Ajusta a posição conforme necessário
// Texto - L/m
u8g.setFont(u8g_font_8x13B); // Fonte menor para L/m
u8g.drawStr(90, 47, "L/m"); // Ajusta a posição conforme necessário
// Moldura do relógio
u8g.drawRFrame(0, 18, 128, 46, 4);
}
void setup(void)
{
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(0, incrpulso, RISING); //Configura a porta digital 2, para interrupção
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // branco
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // intensidade máxima
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel ligado
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255, 255, 255);
}
}
void loop(void)
{
Pulso = 0; //Começa do 0 variável para contar os giros das pás internas,ek segundos
sei(); //liga interrupção
delay(2000); //Espera 2 segundos
cli(); //Desliga interrupção
vazaoagua = Pulso / 5.5; //Converte para Litros/minuto
valormedia = valormedia + vazaoagua; //Soma a vazão para o calculo da valormedia
j++;
// Converte o valor de vazaoagua para string
dtostrf(vazaoagua, 6, 2, vazaoStr); // Converte float para string
Serial.print(vazaoagua); //Imprime na serial o valor da vazão
Serial.print(" L/minuto - "); //Imprime L/min
if (j == 60) {
valormedia = valormedia / 60; //Tira a valormedia dividindo por 60
Serial.print("\n Media por minuto = "); //Imprime a frase valormedia por minuto =
Serial.print(valormedia); //Imprime o valor da valormedia
Serial.println(" Litros/minutos - "); //Imprime L/min
valormedia = 0; //Torna variável valormedia = 0, para uma nova contagem
j = 0; //Torna a variável 0,para uma nova contagem
}
u8g.firstPage();
do
{
draw();
} while( u8g.nextPage() );
delay(50);
}
void incrpulso()
{
Pulso++;
}