Arduino 实现oled显示温湿度和时间-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 921|回复: 5

[未解决] Arduino 实现oled显示温湿度和时间

[复制链接]
发表于 2022-3-7 17:03 | 显示全部楼层 |阅读模式
0.96寸oled显示屏一个页面显示温湿度,另一个页面显示时间,请问如何实现
发表于 2022-3-7 20:58 | 显示全部楼层
 楼主| 发表于 2022-3-7 21:00 | 显示全部楼层
#include <DS1302.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET     4
Adafruit_SSD1306 oled(128, 64, &Wire, OLED_RESET);

DS1302 rtc(2, 3, 4); //对应DS1302的RST,DAT,CLK

int sec_temp;

void initRTCTime(void)//初始化RTC时钟
{
  rtc.writeProtect(false); //关闭写保护
  rtc.halt(false); //清除时钟停止标志
  Time t(2022, 3, 6, 21, 14, 0, 7); //新建时间对象 最后参数位星期数据,周日为1,周一为2以此类推
  rtc.time(t);//向DS1302设置时间数据
}

void updatTime()//打印时间数据
{
  Time tim = rtc.time(); //从DS1302获取时间数据
  char date[20];
  char timer[20];
  snprintf(timer, sizeof(timer), "%02d:%02d:%02d",
           tim.hr, tim.min, tim.sec);
  snprintf(date, sizeof(date), "%04d-%02d-%02d",
           tim.yr, tim.mon, tim.date);

  if (tim.sec != sec_temp) { //一秒刷新一次
    oled.clearDisplay();//清屏
    oled.setTextSize(2.9); //设置字体大小
    oled.setCursor(17, 14);//设置显示位置
    oled.println(timer);
    oled.setTextSize(1.9); //设置字体大小
    oled.setCursor(35, 45);//设置显示位置
    oled.println(date);
    oled.display(); // 开显示
  }
  sec_temp = tim.sec;
}

void setup() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(WHITE);//开像素点发光
  oled.clearDisplay();//清屏

  //新模块上电需要设置一次当前时间,
  //下载完成后需屏蔽此函数再次下载,否则每次上电都会初始化时间数据
  //  initRTCTime();

}

void loop() {
  updatTime();
}
 楼主| 发表于 2022-3-7 21:01 | 显示全部楼层
请看下为什么这个代码实现不了呢
 楼主| 发表于 2022-3-7 21:03 | 显示全部楼层
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "DHT.h"

#define DHTPIN  2
#define DHTTYPE DHT11

//iic驱动方式
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  u8g2.begin();
  dht.begin();
}

char h_str[3];
char t_str[3];
float h;
float t;

void loop() {

  h = dht.readHumidity();//读湿度
  t = dht.readTemperature();//读温度(摄氏度)
  strcpy(h_str, u8x8_u8toa(h, 2));    /* convert m to a string with two digits */
  strcpy(t_str, u8x8_u8toa(t, 2));    /* convert m to a string with two digits */

  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_fur20_tf);
    u8g2.drawStr(0, 23, "T");
    u8g2.drawStr(20, 23, ":");
    u8g2.drawStr(40, 23, t_str);
    u8g2.drawStr(90, 23, "C");

    u8g2.drawStr(0, 63, "H");
    u8g2.drawStr(20, 63, ":");
    u8g2.drawStr(40, 63, h_str);
    u8g2.drawStr(90, 63, "%");
  } while ( u8g2.nextPage() );
  delay(1000);
}
我想将上面这两份代码合在一起,可是实现不了温湿度和时间的显示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:36 , Processed in 0.104203 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表