arduino驱动iic接口0.96寸OLED(用SSD_1360库)

目录

1.安装配置库

2.汉字取模

3.代码


1.安装配置库

首先需要安装配置库文件,显示屏一共需要配置两个库,温湿度计一共需要配置1个库。

还有两个SPI和Wire库这个是arduino IDE自带的硬件层面的库,不需要配置,安装arduino IDE之后就自动配置好了,不需要额外的配置。

接下来我们安装Adafruit_SSD1306库。

跑到arduino库管理器,搜索SSD1306,安装搜到的第二个库,如下图:

安装完成后就可以了。

然后配置Adafruit_GFX库,如下图(这个可以在github下载):

2.汉字取模

用PCtoLCD2002这个取模工具,如下图:

找到文字模式,如下图:

取模汉字时配置如下:

3.代码

这个代码可以显示温湿度,可以用电位器调节温度报警阈值,当实际温度小于报警阈值,则蜂鸣器报警,代码如下:

//包含库文件
#include <SPI.h> 
#include <Wire.h>  
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 
#include "DHT.h"

#define OLED_RESET 4
#define beep 3
//新建显示屏对象
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
//新建dht对象
DHT dht(2, DHT11);

//汉字取模
//温
static const unsigned char PROGMEM wen[]= {
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00
};
 
//度
static const unsigned char PROGMEM du[]= {
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E
};
 
//湿
static const unsigned char PROGMEM shi[]= {
0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,
0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00
};
 
//℃
static const unsigned char PROGMEM C[]= {
0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,
0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00
};
//报警阈值
int baojing=0;
 
void setup() 
{
   //初始化温湿度传感器
   dht.begin();
   //初始化显示屏
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
   //初始化串口
   Serial.begin(9600);
   //清屏
   display.clearDisplay();
   //设置字体大小
   display.setTextSize(2);
   display.setTextColor(INVERSE);  
   //初始化蜂鸣器控制IO口
   pinMode(beep,OUTPUT);
   digitalWrite(beep,LOW);
} 
void loop()
{
  float h=2.0;
  float t=3.0;
  //采集报警阈值
  baojing=map(analogRead(A0),0,1023,-40,60);
  //读取温度
  h = dht.readHumidity();
  //读取湿度
  t = dht.readTemperature();
  //检查是否读取温湿度成功
  if (isnan(h) || isnan(t) ) {
    Serial.println(F("Failed to read from DHT sensor!"));
    //return;
  }
     display.clearDisplay();//清屏
     Serial.println("End");
     display.setTextColor(WHITE);//开像素点发光
     display.clearDisplay();//清屏
     //显示汉字“温度”
     display.drawBitmap(0, 0, wen, 16, 16, 1); //画出字符对应点阵数据
     display.drawBitmap(16, 0, du, 16, 16, 1);
     //在32,4坐标处显示冒号
     display.setCursor(32,4);
     display.print(":");
     //在42,2坐标处显示温度
     display.setCursor(42,2);
     display.print(t);
     //显示℃符号
     display.drawBitmap(106,2,C,16,16,1);//x坐标0,y坐标0,宽度,高度,编码word1
     //显示汉字“湿度”
     display.drawBitmap(0, 18, shi, 16, 16, 1); //画出字符对应点阵数据
     display.drawBitmap(16, 18, du, 16, 16, 1); //画出字符对应点阵数据
     display.setCursor(32,19);
     display.print(":");
     display.setCursor(42,20);
     display.print(int(h));
     display.setCursor(72,20);
     display.print("%");
     //显示报警阈值
     display.setCursor(0,40);
     display.print("Tem:"); // write something to the internal memory
     display.setCursor(46,40);
     display.print(baojing);  // write something to the internal memory
     display.drawBitmap(80,40,C,16,16,1);//x坐标0,y坐标0,宽度,高度,编码word1
     Serial.println("hello world");
     display.display();
     //如果温度小于报警阈值,则蜂鸣器报警
      if(int(t)<baojing)
      {
        digitalWrite(beep,HIGH);
        Serial.println("beep high");
      }
      else
      {
        digitalWrite(beep,LOW);
        Serial.println("beep low");
      }
     delay(1000);
}

显示效果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen953

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值