实现这个功能可以考虑以下步骤:
定义一个变量来存储屏幕开关状态,例如isOLEDOn,初始值设置为关闭状态(false)。
在button2的回调函数中,判断isOLEDOn的值,如果为false,则将其设置为true,打开屏幕显示;如果为true,则将其设置为false,关闭屏幕显示。
在button1的回调函数中,添加判断逻辑,判断isOLEDOn的值,如果为true,则执行数字+1并展示的操作,否则不执行任何操作。
在初始化时,打开和关闭屏幕。
为了控制屏幕的电源,可以使用一个自锁按键开关。只需要将OLED的电源线连接到开关的一个端口,再将另一个端口连接到5V电源和GND,然后在按下开关时切换电源的连接状态,从而实现屏幕的启用和关闭。
以下是示例代码:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int button1Pin = 15;
int button2Pin = 2;
bool isOLEDOn = false;
void button1Pressed() {
if (isOLEDOn) {
// 执行数字+1并展示的操作
}
}
void button2Pressed() {
if (isOLEDOn) {
// 关闭屏幕显示
isOLEDOn = false;
display.ssd1306_command(SSD1306_DISPLAYOFF);
} else {
// 打开屏幕显示
isOLEDOn = true;
display.ssd1306_command(SSD1306_DISPLAYON);
}
}
void setup() {
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
attachInterrupt(button1Pin, button1Pressed, FALLING);
attachInterrupt(button2Pin, button2Pressed, FALLING);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void loop() {
// 持续运行
}
这是一个简单的示例,只是实现了基本的逻辑,具体实现方式可以根据具体需求进行调整。