3.测试代码

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");
    }
   }
}