我正在Arduino Uno上制作一个数字时钟项目 . 我被要求做的是制作一个数字时钟,在不使用RTC模块的情况下显示在LCD上 . 但我想添加一些东西,如DHT11温度和湿度传感器 . 我想在第一行显示TIME:HH:MM:SS,在第二行我想显示TEMP(* C):XX.YY,等待片刻,清除第二行(我用空白做了)空间),然后显示HUM(%):XX.YY . 等等 . 我只想延迟第二行2秒,同时从温度变为湿度,以清楚地看到温度和湿度值 . 但它延迟了整个系统,时间值也延迟了延迟时间 . 我只想让时钟一直显示并分别显示温度和湿度 . 这是我的代码如下:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>
#define dht_apin 2
LiquidCrystal_I2C lcd(0x27, 16, 2);
dht DHT;
int h=14; //hour
int m=50; //minute
int s=20; //second
int flag;
int TIME;
const int hs=8;
const int ms=9;
void setup()
{
lcd.begin();
lcd.backlight();
}
void loop()
{
delay(1000);
lcd.setCursor(0,0);
s=s+1;
lcd.print("TIME:");
lcd.print(h);
lcd.print(":");
lcd.print(m);
lcd.print(":");
lcd.print(s);
delay(400);
if(flag==24)flag=0;
delay(1000);
lcd.clear();
if(s==60){
s=0;
m=m+1;
}
if(m==60)
{
m=0;
h=h+1;
flag=flag+1;
}
//Temperature and humidity
DHT.read11(dht_apin);
lcd.setCursor(0,1);
lcd.print("TEMP(*C):");
lcd.print(DHT.temperature);
delay(2000);
lcd.setCursor(0,1);
lcd.print(' ');
lcd.setCursor(0,1);
lcd.print("HUM(%):");
lcd.print(DHT.humidity);
delay(1000);
}
谢谢!
1 回答
正如DigitalNinja所说,
delay
阻止了一切 . 如果你想保持运行,你必须使用中断 .中断停止执行代码以跳转到循环外的特定函数 . 它不像_2911315那样阻止时钟 . 一切都在运行,但你基本上根据外部事件(引脚上升,时间已过......)基本上插入你需要的功能 .
您可以使用Timer1库每X秒执行一次操作 . 或者使用attachInterrupt创建自己的系统 .
我在TimerOne参考页面中对此示例进行了评论并对其进行了评论