我想要一个arduino使用u8g2驱动ssd1306显示温度曲线的程序
时间: 2024-01-21 07:19:38 浏览: 126
以下是一个简单的Arduino程序,使用U8g2库和SSD1306 OLED显示器来绘制实时温度曲线。这个程序使用一个温度传感器来获取温度数据,并且使用了U8g2库的图形函数来绘制温度曲线。
```C++
#include <U8g2lib.h> // 包含U8g2库
#include <OneWire.h> // 包含OneWire库
#include <DallasTemperature.h> // 包含DallasTemperature库
// 定义数据引脚
#define ONE_WIRE_BUS 2
// 初始化温度传感器
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// 初始化OLED显示器
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
// 定义变量
int temp;
int oldTemp = 0;
int tempArray[128];
int index = 0;
void setup() {
// 初始化串口
Serial.begin(9600);
// 初始化温度传感器
sensors.begin();
// 初始化OLED显示器
u8g2.begin();
}
void loop() {
// 获取温度数据
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
// 确保温度在范围内
if (temp > 50 || temp < -50) {
temp = oldTemp;
} else {
oldTemp = temp;
}
// 添加温度数据到数组中
tempArray[index] = temp;
index++;
// 循环数组
if (index >= 128) {
index = 0;
}
// 清除屏幕并绘制曲线
u8g2.clearBuffer();
u8g2.drawFrame(0, 0, 128, 64);
for (int i = 1; i < 128; i++) {
u8g2.drawLine(i - 1, 64 - tempArray[i - 1], i, 64 - tempArray[i]);
}
u8g2.sendBuffer();
// 延迟
delay(1000);
}
```
这个程序使用了一个名为`U8g2_SSD1306_128X64_NONAME_F_HW_I2C`的U8g2类来初始化OLED显示器。在`setup()`函数中,我们初始化了温度传感器和OLED显示器。在`loop()`函数中,我们获取温度数据,并把它添加到一个数组中。然后,我们循环这个数组,并使用`drawLine()`函数在OLED显示器上绘制温度曲线。最后,我们延迟1秒钟,以便可以观察温度曲线的变化。
阅读全文