Arduino摇杆操作OLED多级菜单(两层界面练习)

本文介绍如何使用Arduino和C++通过摇杆操控OLED屏幕展示多级菜单。内容包括菜单结构设计、按键功能映射及索引处理,详细解析了不同界面之间的移动逻辑,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 源代码源自:

(Arduino提高篇15—摇杆操作OLED多级菜单_TonyIOT的博客-优快云博客_arduino 多级菜单

 根据个人的理解,画图理解,根据结构体中的变量,我将index索引和界面操作menu分为在一个方格内,表示同一个意思,index有九个界面。

 

typedef struct
{
  unsigned char index;
  unsigned char up;
  unsigned char down;
  unsigned char left;
  unsigned char right;
  void (*operation)(void);
} KEY_TABLE;

 根据上图,其中四个按键对应的功能理解为:

上UP--------------同级别界面左移动或无法移动则保持本界面

下DOWN--------------同级别界面右移动或无法移动则保持本界面

左LEFT--------------返回上一级或无法返回则保持本界面

右RIGHT--------------往下一级或无法往下则保持本界面

假设在index为0的情况下,也就是menu11情况下,往up同级别左移动的操作界面为本身menu11,那么对应的索引号为0,down同级别右移的界面为menu12,索引号为1,left返回上级为本身menu11索引号为0,right往下一级移动的界面最先跳到索引号为2的界面,即menu12,

所以inex=0时,结构体数组变量赋值情况为:{0,0,1,0,2,(*menu11)}

同理假如换到index=7的情况,LEFT往上一级为3,RIGHT往下一级是无法移动的,所以是本身索引号7,UP同级别左移无法移动过到6这边(特别注意不是同一树支不能乱移动),只能为7,DOWN右移为8。结构体数组变量赋值情况为:{7, 7, 8, 3, 7, (*menu33)}

那么假设index=1,即menu12,

 

 可以同级别左移,不能右移,可以下移,不能上移,则为{1, 0, 1, 1, 4, (*menu12)}。

综合以上规律总结所有的界面, 完整的结构体数组变量赋值情况为:

KEY_TABLE table[9] =
{
  {0, 0, 1, 0, 2, (*menu11)},
  {1, 0, 1, 1, 4, (*menu12)},
  {2, 2, 3, 0, 5, (*menu21)},
  {3, 2, 3, 0, 7, (*menu22)},
  {4, 4, 4, 1, 4, (*menu23)},
  {5, 5, 6, 2, 5, (*menu31)},
  {6, 5, 6, 2, 6, (*menu32)},
  {7, 7, 8, 3, 7, (*menu33)},
  {8, 7, 8, 3, 8, (*menu34)},
};

原完整代码为

/*
   OLED_Menu
   摇杆操作OLED多级菜单
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET     4
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);

#define pinX  A0
#define pinY  A1

int valueX = 0;
int valueY = 0;
unsigned char keyValue = 0;

//定义按键结构体
typedef struc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值