3.测试代码#
运行代码之前,请先下载库文件并导入库中:
volatile int flow_frequency; // 测量流量传感器脉冲
// 计算升/小时
float vol = 0.0,l_minute;
unsigned char flowsensor = 2; // 传感器输入
unsigned long currentTime;
unsigned long cloopTime;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void flow () // 中断函数
{
flow_frequency++;
}
void setup()
{
pinMode(flowsensor, INPUT);
digitalWrite(flowsensor, HIGH);
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
lcd.clear();
attachInterrupt(0, flow, RISING); // 设置中断
lcd.setCursor(0,0);
lcd.print("Water Flow Meter");
lcd.setCursor(0,1);
lcd.print("Circuit Digest");
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
// 每秒计算并打印升/小时
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // 更新cloopTime
if(flow_frequency != 0)
{
// 脉冲频率(Hz) = 7.5Q,Q是流量(L/min)
l_minute = (flow_frequency / 6.6); // (脉冲频率 x 60分钟) / 7.5Q = 流量(L/小时)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rate: ");
lcd.print(l_minute);
lcd.print(" L/M");
l_minute = l_minute/60;
lcd.setCursor(0,1);
vol = vol +l_minute;
lcd.print("Vol:");
lcd.print(vol);
lcd.print(" L");
flow_frequency = 0; // 重置计数器
Serial.print(l_minute, DEC); // 打印升/秒
Serial.println(" L/Sec");
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rate: ");
lcd.print( flow_frequency );
lcd.print(" L/M");
lcd.setCursor(0,1);
lcd.print("Vol:");
lcd.print(vol);
lcd.print(" L");
}
}
}