#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// 定義 OLED 顯示器的尺寸
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// 初始化 OLED 顯示器
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// 定義按鈕引腳
const int upButtonPin = 10;
const int downButtonPin = 9;
const int enterButtonPin = 8;
const int returnButtonPin = 7;
// 初始化菜單索引
int menuIndex = 0;
// 菜單項目
const char* menuItems[] = {"Class", "Number", "Name"};
const int numMenuItems = sizeof(menuItems) / sizeof(menuItems[0]);
void setup()
{
// 初始化串口
Serial.begin(9600);
// 初始化 OLED 顯示器
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // 顯示兩秒
// 初始化按鈕引腳
pinMode(upButtonPin, INPUT_PULLUP);
pinMode(downButtonPin, INPUT_PULLUP);
pinMode(enterButtonPin, INPUT_PULLUP);
pinMode(returnButtonPin, INPUT_PULLUP);
// 顯示初始內容
showInitialContent();
delay(2000); // 顯示兩秒
// 清空顯示器
display.clearDisplay();
display.display();
}
void loop()
{
// 檢測按鈕輸入
if (digitalRead(upButtonPin) == LOW)
{
menuIndex--;
if (menuIndex < 0) menuIndex = numMenuItems - 1;
delay(200); // 防止按鈕重複觸發
}
if (digitalRead(downButtonPin) == LOW)
{
menuIndex++;
if (menuIndex >= numMenuItems) menuIndex = 0;
delay(200); // 防止按鈕重複觸發
}
if (digitalRead(enterButtonPin) == LOW)
{
// 在這裡添加進入菜單功能的代碼
Serial.println("Enter button pressed");
delay(200); // 防止按鈕重複觸發
}
if (digitalRead(returnButtonPin) == LOW)
{
// 在這裡添加返回功能的代碼
Serial.println("Return button pressed");
delay(200); // 防止按鈕重複觸發
}
// 顯示菜單
displayMenu();
}
void showInitialContent()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("CTAS"));
display.setCursor(0, 10);
display.println(F("C201"));
display.display();
}
void displayMenu()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
for (int i = 0; i < numMenuItems; i++)
{
if (i == menuIndex) {
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // 反轉顏色顯示選中的菜單項
} else {
display.setTextColor(SSD1306_WHITE);
}
display.setCursor(0, i * 10);
display.println(menuItems[i]);
}
display.display();
}