ESP32想让oled屏幕模块化开启和关闭,怎么封装呢?

ESP32如何让oled屏幕模块化开启和关闭,我现在各个部件单独都实现了功能:
1、一个oled屏幕
2、一个按键button1,我已经实现了点击按键控制屏幕上的一个数字依次加一,并展示。
但是我这个oled屏幕不需要常亮,我想把它作为一个模块(或者叫一个独立的外设),我的需求是想增加一个按钮button2,点击这个按钮让oled屏幕功能启用或显示,再按一次关闭屏幕,然后再执行点击button1,数字+1,并展示。

现在我屏幕展示用的timer1,按钮点击用了timer2。我应该怎么封装才能实现这个功能呢?(oled的电源线用自锁按键开关?还是什么的?)求指点思路。

实现这个功能可以考虑以下步骤:

  1. 定义一个变量来存储屏幕开关状态,例如isOLEDOn,初始值设置为关闭状态(false)。

  2. 在button2的回调函数中,判断isOLEDOn的值,如果为false,则将其设置为true,打开屏幕显示;如果为true,则将其设置为false,关闭屏幕显示。

  3. 在button1的回调函数中,添加判断逻辑,判断isOLEDOn的值,如果为true,则执行数字+1并展示的操作,否则不执行任何操作。

  4. 在初始化时,打开和关闭屏幕。

为了控制屏幕的电源,可以使用一个自锁按键开关。只需要将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() {
  // 持续运行
}

这是一个简单的示例,只是实现了基本的逻辑,具体实现方式可以根据具体需求进行调整。