#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>
Adafruit_SSD1306 display(128,64,&Wire,-1);
Adafruit_NeoPixel rgb = Adafruit_NeoPixel(60, 3, NEO_GRB + NEO_KHZ800);
static const unsigned char PROGMEM guang[]=
{
0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0xFF,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x42,0x08,0x42,0x10,0x42,0x20,0x3E,0xC0,0x00};/*"光",0*/
static const unsigned char PROGMEM zhao[]={
0x00,0x00,0x7D,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x7D,0x08,0x44,0xFC,
0x44,0x84,0x44,0x84,0x44,0x84,0x7C,0xFC,0x00,0x00,0x48,0x88,0x44,0x44,0x84,0x44};/*"照",1*/
static const unsigned char PROGMEM qiang[]={
0x00,0x00,0xF9,0xFC,0x09,0x04,0x09,0x04,0x09,0xFC,0x78,0x20,0x40,0x20,0x43,0xFE,
0x42,0x22,0x7A,0x22,0x0B,0xFE,0x08,0x20,0x08,0x24,0x08,0x22,0x57,0xFE,0x20,0x02};/*"强",2*/
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};/*"度",3*/
#define photosensitivePin A0 // 定义模拟口A0
#define phTimeInterval 1000 // 检测一次的时间间隔
// 控制模式枚举
enum ControlMode { ENV_MODE, GESTURE_MODE };
ControlMode currentMode = ENV_MODE; // 默认环境光模式
// 手势控制参数
int targetBrightness = 50; // 手势目标亮度
int currentBrightness = 0; // 当前实际亮度
const int fadeStep = 3; // 亮度渐变步长
unsigned long lastFadeTime = 0;
const int fadeInterval = 20; // 渐变间隔(ms)
unsigned long phTimes = 0; // 记录设备运行时间
int photosenVal = 0; // 光照度数值
int photoContent = 0;
void setup() {
rgb.begin();
Serial.begin(9600); // 设置串口波特率为9600
pinMode(photosensitivePin, INPUT);
Serial.println("设备运行");
// 初始化 OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址通常是 0x3C 或 0x3D
Serial.println("OLED 初始化失败!");
while (1); // 如果失败,程序卡死
}
display.clearDisplay(); // 清空屏幕
display.setTextSize(2); // 设置文字大小
display.setTextColor(WHITE); // 设置文字颜色(白色)
display.display(); // 更新显示
}
void loop() {
getPhData(); // 获取光敏电阻的值
}
void getPhData() {
if (millis() - phTimes >= phTimeInterval) {
phTimes = millis();
photosenVal = analogRead(photosensitivePin); // 获取原始值
photosenVal = constrain(photosenVal, 10, 1024);
photoContent = map(photosenVal, 10, 1024, 100, 0);
Serial.print("光照强度: ");
Serial.print(photoContent); // 串口打印对应的值
Serial.println(" %");
display.clearDisplay(); // 清屏
display.drawBitmap(0,0,guang,16,16,1);
display.drawBitmap(16,0,zhao,16,16,1);
display.drawBitmap(32,0,qiang,16,16,1);
display.drawBitmap(48,0,du,16,16,1);
display.setCursor(70, 0);
//display.print("Light:");
display.print(photoContent);
display.print("%");
display.display(); // 更新显示
}
}
这是第一次初始化成功并显示的代码
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>
Adafruit_SSD1306 display(128,64,&Wire,-1);
Adafruit_NeoPixel rgb = Adafruit_NeoPixel(60, 3, NEO_GRB + NEO_KHZ800);
static const unsigned char PROGMEM guang[]=
{
0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0xFF,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x42,0x08,0x42,0x10,0x42,0x20,0x3E,0xC0,0x00};/*"光",0*/
static const unsigned char PROGMEM zhao[]={
0x00,0x00,0x7D,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x7D,0x08,0x44,0xFC,
0x44,0x84,0x44,0x84,0x44,0x84,0x7C,0xFC,0x00,0x00,0x48,0x88,0x44,0x44,0x84,0x44};/*"照",1*/
static const unsigned char PROGMEM qiang[]={
0x00,0x00,0xF9,0xFC,0x09,0x04,0x09,0x04,0x09,0xFC,0x78,0x20,0x40,0x20,0x43,0xFE,
0x42,0x22,0x7A,0x22,0x0B,0xFE,0x08,0x20,0x08,0x24,0x08,0x22,0x57,0xFE,0x20,0x02};/*"强",2*/
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};/*"度",3*/
#define photosensitivePin A0 // 定义模拟口A0
#define phTimeInterval 1000 // 检测一次的时间间隔
// 控制模式枚举
enum ControlMode { ENV_MODE, GESTURE_MODE };
ControlMode currentMode = ENV_MODE; // 默认环境光模式
// 手势控制参数
int targetBrightness = 50; // 手势目标亮度
int currentBrightness = 0; // 当前实际亮度
const int fadeStep = 3; // 亮度渐变步长
unsigned long lastFadeTime = 0;
const int fadeInterval = 20; // 渐变间隔(ms)
unsigned long phTimes = 0; // 记录设备运行时间
int photosenVal = 0; // 光照度数值
int photoContent = 0;
void setup() {
rgb.begin();
Serial.begin(9600); // 设置串口波特率为9600
pinMode(photosensitivePin, INPUT);
Serial.println("设备运行");
// 初始化 OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址通常是 0x3C 或 0x3D
Serial.println("OLED 初始化失败!");
while (1); // 如果失败,程序卡死
}
display.clearDisplay(); // 清空屏幕
display.setTextSize(2); // 设置文字大小
display.setTextColor(WHITE); // 设置文字颜色(白色)
display.display(); // 更新显示
}
void loop() {
getPhData(); // 获取光敏电阻的值
}
void getPhData() {
if (millis() - phTimes >= phTimeInterval) {
phTimes = millis();
photosenVal = analogRead(photosensitivePin); // 获取原始值
photosenVal = constrain(photosenVal, 10, 1024);
photoContent = map(photosenVal, 10, 1024, 100, 0);
Serial.print("光照强度: ");
Serial.print(photoContent); // 串口打印对应的值
Serial.println(" %");
display.clearDisplay(); // 清屏
display.drawBitmap(0,0,guang,16,16,1);
display.drawBitmap(16,0,zhao,16,16,1);
display.drawBitmap(32,0,qiang,16,16,1);
display.drawBitmap(48,0,du,16,16,1);
display.setCursor(70, 0);
//display.print("Light:");
display.print(photoContent);
display.print("%");
display.display(); // 更新显示
}
}
这是第一次初始化成功并显示的代码