请问为什么我把ds3231和DHT11一起使用时时钟就乱码了?我用的是I2C的OLED,哪位好心帮忙看一下,代码如下:
#include <dht11.h>
#include <U8glib.h>
#include <DS3231.h>
#include <Wire.h>
dht11 DHT11;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
#define DHT11PIN 4
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits, DoW;
bool ADy, A12h, Apm;
byte second,minute,hour,date,month,year,temperature;
void draw(void)
{
u8g.drawLine(0,15 , 128, 15);
u8g.drawLine(0,51 , 128, 51);
u8g.setFont(u8g_font_gdr10);//字体设置
u8g.setPrintPos(2, 64);
int chk = DHT11.read(DHT11PIN);
u8g.print((float)DHT11.temperature, 1);
u8g.setPrintPos(30, 64);
u8g.print("c");
u8g.setPrintPos(88, 64);
u8g.print((float)DHT11.humidity, 1);
u8g.setPrintPos(116, 64);
u8g.print("%");
u8g.setPrintPos(0, 10);
u8g.print("20");
u8g.print(year);
u8g.print("/");
u8g.print("month");
u8g.print("/");
u8g.print(date);
u8g.print("dow");
u8g.setPrintPos(0, 45); //定义显示位置 横向起始位置0 纵向45
if(PM==0) //判断变量PM返回值 0就显示AM 1就显示PM
{
u8g.print("AM");
}else
{u8g.print("PM");}
u8g.setFont(u8g_font_freedoomr25n); //设定字体(具体请参看 U8GLIB google code页面,大量字体可选)
u8g.print(hour); //输出小时的值
u8g.print(":"); //显示一个冒号
u8g.print("minute"); //显示分钟的值
u8g.setFont(u8g_font_freedoomr10r); //调整显示字体
u8g.print(":"); //再显示冒号
u8g.print(second);
}
void setup(void)
{
Clock.setClockMode(true);
}
void loop(void) {
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond(); //秒
minute=Clock.getMinute(); //分
hour=Clock.getHour(h12, PM); //小时 (分上午和下午模式)
date=Clock.getDate(); //日
month=Clock.getMonth(Century); //月
year=Clock.getYear();
u8g.firstPage();
do {
draw();
long x = random(0,127);
long y = random(51,63);
}
while( u8g.nextPage() );
}
|