最终章
这一章把剩下的OLED显示模块、按钮模块分享一下,当前这个离线无存储的版本,基本告一段落。
如果后续能进化成🈶存储、联网版本,就再开一个小系列分享一下。
逐个分析
display.h
#include <Arduino.h>
#include <Wire.h>
// OLED 0.96 库
#include <ssd1306.h>
// OLED 0.96
// 接口:GND->GND、VDD->VCC(5V)、SCK->SCK/A5、SDA->SDA/A4
// 协议:I2C
// 地址:0x3C
namespace SSD_1306 {
unsigned int width = 128;
unsigned int lineHeight = 8;
unsigned int charMax = 24;
}
namespace Display {
struct _OLED {
void init() {
// 初始化OLED
Wire.begin();
ssd1306_128x64_i2c_init();
ssd1306_setFixedFont(ssd1306xled_font6x8);
ssd1306_clearScreen();
}
void printRaw(unsigned int left, unsigned int top, char* str, unsigned int style = STYLE_NORMAL) {
ssd1306_printFixed(left, top, str, style);
}
void printNRaw(unsigned int left, unsigned int top, char* str, unsigned int style = STYLE_NORMAL) {
ssd1306_printFixedN(left, top, str, style, 1);
}
void print(char* str, unsigned int left, unsigned int top) {
printRaw(left, SSD_1306::lineHeight * top, str);
}
void printRight(char* str, int top) {
uint16_t left = getLeft(str);
print(str, left, top);
}
void drawBuffer(unsigned int left, unsigned int top, uint8_t* buffer) {
ssd1306_drawBuffer(left, top, 3, 8, buffer);
}
void drawLine