鱼C论坛

 找回密码
 立即注册
查看: 514|回复: 5

[新人报道] arduino oled 菜单

[复制链接]
发表于 2024-4-7 17:10:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
@fishc
写一个arduino oled 菜单功能 ,5秒后执行选择的功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-7 17:11:01 | 显示全部楼层
好的,我们可以使用Arduino和OLED显示屏来实现一个简单的菜单功能。

首先,确保你已经连接了Arduino和OLED显示屏,并将显示屏的库文件安装到Arduino IDE中。

接下来,我们需要编写代码来显示菜单项并等待用户选择。下面是一个示例代码:
++
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED显示屏的宽度
#define SCREEN_HEIGHT 64 // OLED显示屏的高度

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int menuIndex = 0; // 菜单选项索引

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // 初始化OLED显示屏

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1); // 设置文本大小
  display.setCursor(0, 0); // 设置光标位置
  
  // 显示菜单项
  display.println("1. 功能一");
  display.println("2. 功能二");
  display.println("3. 功能三");
  
  display.display(); // 显示到屏幕上

  delay(5000); // 等待5秒钟
}

void loop() {
  // 监听用户选择的菜单项
  if (digitalRead(2) == HIGH) {
    menuIndex = 1;
  } else if (digitalRead(3) == HIGH) {
    menuIndex = 2;
  } else if (digitalRead(4) == HIGH) {
    menuIndex = 3;
  }
  
  // 根据用户选择,执行相应的功能
  switch(menuIndex) {
    case 1:
      // 执行功能一的代码
      break;
    case 2:
      // 执行功能二的代码
      break;
    case 3:
      // 执行功能三的代码
      break;
    default:
      // 如果没有选择任何菜单项,可以在这里添加默认操作
      break;
  }
}

在这个示例中,我们使用了Adafruit的GFX库和SSD1306库来操作OLED显示屏。我们首先初始化显示屏,然后在屏幕上显示菜单项。等待5秒后,我们读取按键的输入来获取用户选择的菜单项,并根据选择执行相应的功能。

请注意,这只是一个示例代码,你需要根据你实际的硬件和需求进行适当的修改。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 17:18:16 | 显示全部楼层
FishC 发表于 2024-4-7 17:11
好的,我们可以使用Arduino和OLED显示屏来实现一个简单的菜单功能。

首先,确保你已经连接了Arduino和OL ...

需要增加按键选择,按键在9号引脚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 17:18:37 | 显示全部楼层
py0526vip 发表于 2024-04-07 17:18
需要增加按键选择,按键在9号引脚


好的,我们可以对代码进行修改以支持使用9号引脚作为按键选择。在修改前,请确保在Arduino上将按键连接到9号引脚,并将其设置为输入模式。下面是修改后的代码:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED显示屏的宽度
#define SCREEN_HEIGHT 64 // OLED显示屏的高度

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int menuIndex = 0; // 菜单选项索引

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // 初始化OLED显示屏
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1); // 设置文本大小
  display.setCursor(0, 0); // 设置光标位置
  
  // 显示菜单项
  display.println("1. 功能一");
  display.println("2. 功能二");
  display.println("3. 功能三");
  
  display.display(); // 显示到屏幕上
  delay(5000); // 等待5秒钟
}

void loop() {
  // 监听用户选择的菜单项
  if (digitalRead(9) == HIGH) {
    menuIndex = 1;
  } else if (digitalRead(10) == HIGH) {
    menuIndex = 2;
  } else if (digitalRead(11) == HIGH) {
    menuIndex = 3;
  }
  
  // 根据用户选择,执行相应的功能
  switch(menuIndex) {
    case 1:
      // 执行功能一的代码
      break;
    case 2:
      // 执行功能二的代码
      break;
    case 3:
      // 执行功能三的代码
      break;
    default:
      // 如果没有选择任何菜单项,可以在这里添加默认操作
      break;
  }
}

在这个修改后的代码中,我们使用了9号引脚作为按键输入的引脚(可以根据实际情况进行修改),然后在`loop()`函数中监听按键输入。当按键按下时,我们更新`menuIndex`的值来记录用户的选择。根据`menuIndex`的值,我们执行相应的功能。

请注意,你可能还需要在输入引脚上使用外部上拉电阻或按键上自带的上拉电阻,以确保正常检测按键状态。记得在设置引脚模式时将其设置为输入模式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 17:21:58 | 显示全部楼层
@fishc
arduino oled 显示菜单,通过9号引脚选择,选择到的菜单闪烁, 5秒后执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 17:22:19 | 显示全部楼层
py0526vip 发表于 2024-04-07 17:21
@fishc
arduino oled 显示菜单,通过9号引脚选择,选 ...


好的,下面是一个实现 Arduino OLED 显示菜单和通过9号引脚选择菜单的示例代码:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED屏幕宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED屏幕高度,以像素为单位

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// 菜单选项
const char* menuOptions[] = {"选项1", "选项2", "选项3", "选项4", "选项5"};
int optionCount = sizeof(menuOptions) / sizeof(menuOptions[0]);

int selectedOption = 0; // 当前选中的菜单项
bool isBlinking = false; // 是否正在闪烁

void setup() {
  pinMode(9, INPUT_PULLUP); // 将9号引脚设置为输入模式,并且使用内部上拉电阻
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 初始化OLED显示屏
  display.clearDisplay(); // 清除显示内容
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println("菜单");
  display.display();
}

void loop() {
  // 读取9号引脚的值,判断是否需要切换菜单选项
  if (digitalRead(9) == LOW) {
    selectedOption++;
    if (selectedOption >= optionCount) {
      selectedOption = 0;
    }
    // 选项切换后,开始闪烁
    isBlinking = true;
    delay(200); // 延迟一段时间以避免抖动
  }

  // 清除显示内容
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(0, 0);

  // 显示菜单选项
  for (int i = 0; i < optionCount; i++) {
    if (i == selectedOption && isBlinking) {
      // 选中的菜单项闪烁显示
      display.setTextColor(BLACK, WHITE);
    } else {
      display.setTextColor(WHITE);
    }
    display.println(menuOptions[i]);
  }
  display.display();

  // 开始闪烁后,等待5秒后停止闪烁
  if (isBlinking && millis() - startTime >= 5000) {
    isBlinking = false;
  }
}

这段代码使用了Adafruit提供的库来驱动OLED显示屏。在`setup`函数中,我们初始化了OLED显示屏并显示了标题。在`loop`函数中,我们通过读取9号引脚的状态来切换菜单选项。选项切换后,我们将开始闪烁,并通过`display.setTextColor`函数设置文本颜色来实现闪烁效果。同时,我们使用`millis`函数来计时,当闪烁超过5秒后停止。

希望对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 22:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表