.. _3测试代码:

3.测试代码
==========

运行代码之前，请先下载库文件并导入库中：

:download:`库文件下载 <./库文件.zip>`

::

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