#include <U8g2lib.h>
// OLED 屏幕实例
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/4, /* data= */ 5);
// 眼睛形状枚举
typedef enum {
RECTANGLE,
// 其他形状可以在这里添加
} EyeShape;
// 眼睛类
class Eye {
public:
Eye(int x, int y, int w, int h, EyeShape shape)
: centerX(x), centerY(y), width(w), height(h), shape(shape) {}
void setPosition(int newX, int newY) {
centerX = newX;
centerY = newY;
}
void setSize(int newW, int newH) {
width = newW;
height = newH;
}
void setShape(EyeShape newShape) {
shape = newShape;
}
void draw(U8G2_SSD1306_128X64_NONAME_F_HW_I2C *u8g2) const {
int x = centerX - width / 2;
int y = centerY - height / 2;
switch (shape) {
case RECTANGLE:
u8g2->drawRBox(x, y, width, height, 2);
break;
// 其他形状的绘制可以在这里扩展
}
}
private:
int centerX;
int centerY;
int width;
int height;
EyeShape shape;
};
void setup() {
Serial.begin(115200);
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体
u8g2.setContrast(255); // 设置对比度
}
void loop() {
// 清屏
u8g2.clearBuffer();
// 获取 OLED 屏幕尺寸
int faceWidth = u8g2.getWidth();
int faceHeight = u8g2.getHeight();
// 根据脸的宽度和高度自动生成眼睛的宽度和高度
int eyeWidth = faceWidth / 4;
int eyeHeight = faceHeight / 4;
// 定义眼睛的中心位置
int centerX = faceWidth / 4;
int centerY = faceHeight / 2;
// 创建眼睛对象
Eye leftEye(centerX, centerY, eyeWidth, eyeHeight, RECTANGLE);
// 定义眼睛的相对距离
int relativeX = faceWidth / 8;
// 创建并绘制右边的眼睛
Eye rightEye(centerX + relativeX, centerY, eyeWidth, eyeHeight, RECTANGLE);
// 绘制眼睛
leftEye.draw(&u8g2);
rightEye.draw(&u8g2);
// 显示缓冲区内容到屏幕上
u8g2.sendBuffer();
}