arduino oled显示程序。用的oled是金逸晨的0.96寸IIC接口的oled。

dht11测试温湿度。

温度低于阈值后蜂鸣器报警,电位器调节报警阈值。

程序如下:

#include <Arduino.h>
#include <U8g2lib.h>
#include <DHT.h>
#include <avr/pgmspace.h>
#define beep 3

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

DHT dht(2, DHT11);



int baojing=0;

//大白12864屏幕
//U8G2_ST7565_64128N_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
//小精0.96寸oled屏幕(金逸晨)
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//88888888

//温
const unsigned char wen[]= {
0x00,0x00,0xC4,0x1F,0x48,0x10,0x48,0x10,0xC1,0x1F,0x42,0x10,0x42,0x10,0xC8,0x1F,
0x08,0x00,0xE4,0x3F,0x27,0x25,0x24,0x25,0x24,0x25,0x24,0x25,0xF4,0x7F,0x00,0x00
};
//度
const unsigned char du[]= {
0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,
0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70};
//湿
const unsigned char shi[]= {
0x00,0x00,0xE4,0x1F,0x28,0x10,0x28,0x10,0xE1,0x1F,0x22,0x10,0x22,0x10,0xE8,0x1F,
0x88,0x04,0x84,0x04,0x97,0x24,0xA4,0x14,0xC4,0x0C,0x84,0x04,0xF4,0x7F,0x00,0x00};
//℃
const unsigned char C[]= {
0x00,0x00,0x00,0x00,0xEE,0x01,0x1A,0x02,0x14,0x02,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x02,0xE0,0x01,0x00,0x00,0x00,0x00};

void u8g2_prepare(void) {
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
}

char nowchar[32];

void setup(void) {
Serial.begin(9600);
dht.begin();
u8g2.begin();
u8g2_prepare();
pinMode(beep,OUTPUT);
digitalWrite(beep,LOW);
}

void loop(void) {
delay(30);
float h=2.0;
float t=3.0;
baojing=map(analogRead(A0),0,1023,-40,60);
h = dht.readHumidity();
// Read temperature as Celsius (the default)
t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) ) {
Serial.println(F("Failed to read from DHT sensor!"));
//return;
}
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g_font_unifont); // choose a suitable font
u8g2.drawXBM(0,0,16,16,wen);//x坐标0,y坐标0,宽度,高度,编码word1
u8g2.drawXBM(16,0,16,16,du);//x坐标0,y坐标0,宽度,高度,编码word1
u8g2.drawStr(32,2,":"); // write something to the internal memory
u8g2.setCursor(40,2);
u8g2.print(t); // write something to the internal memory
u8g2.drawXBM(60,2,12,14,C);//x坐标0,y坐标0,宽度,高度,编码word1

u8g2.drawXBM(0,16,16,16,shi);//x坐标0,y坐标0,宽度,高度,编码word1
u8g2.drawXBM(16,16,16,16,du);//x坐标0,y坐标0,宽度,高度,编码word1
u8g2.drawStr(32,18,":"); // write something to the internal memory
u8g2.setCursor(40,18);
u8g2.print(h); // write something to the internal memory
u8g2.drawStr(60,18,"%"); // write something to the internal memory

u8g2.drawStr(0,32,"Tem thr:"); // write something to the internal memory
u8g2.setCursor(66,32);
u8g2.print(baojing); // write something to the internal memory
u8g2.drawXBM(90,32,12,14,C);//x坐标0,y坐标0,宽度,高度,编码word1

if(t<baojing)
digitalWrite(beep,HIGH);
else
digitalWrite(beep,LOW);

//u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
//u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory
//u8g2.drawStr(0,22,"QQ:953598974"); // write something to the internal memory
//u8g2.setCursor(0,30);
//u8g2.print(h); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}

显示效果:

arduino oled显示程序_#include