# SoftWare_Box **Repository Path**: wei-chen-yi/soft-ware_-box ## Basic Information - **Project Name**: SoftWare_Box - **Description**: 一个软件盒子小程序,包括电子钢琴、扫雷、传感器监控三个模块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-07 - **Last Updated**: 2025-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Software Box 软件盒子 一个基于LVGL图形库的嵌入式多功能软件盒子,集成了电子钢琴、扫雷游戏和传感器监控三个功能模块。 ## 项目概述 Software Box是一个运行在嵌入式Linux平台上的图形化应用程序集合,使用LVGL图形库构建用户界面。该项目使用了并发中的线程与进程以及递归等知识。 ## 并发技术运用 ### 1. 多线程技术 - **传感器监控模块**:创建独立的线程实时读取串口数据,避免阻塞主线程,确保UI界面的流畅性 - **扫雷游戏模块**:使用单独线程处理游戏计时器,保证计时准确且不影响游戏界面响应 - **电子钢琴模块**:采用多线程处理音频播放,支持同时播放多个音符实现和声效果 ### 2. 进程间通信 - **音频播放**:通过创建子进程调用外部音频播放器程序,实现非阻塞音频播放 ### 3. 异步处理 - **用户输入处理**:所有用户输入事件通过异步回调机制处理,提高响应速度 - **定时任务**:利用定时器实现异步更新界面和数据刷新 ## 优化 ### 1.扫雷游戏模块 - 修改了退出键响应逻辑,改为返回欢迎界面,保证资源都释放完全。 - 调整了游戏界面各个组件的大小,并且禁用了滑动条,保证了游戏网格都能在界面上显示出来,以及没有滑动条的干扰。 - 设置标签固定宽度以防止标签跳动 ### 2.电子钢琴模块 - 增加了返回键响应逻辑,返回欢迎界面,保证资源都释放完全。 ## 功能模块 ### 1. 电子钢琴 (Electronic Piano) - 包含7个白键和5个黑键的虚拟钢琴键盘 - 支持触摸演奏,可播放预录制的音符音频文件 - 录音功能:可以录制并保存演奏序列 - 回放功能:可以播放已保存的演奏序列 ### 2. 扫雷游戏 (Minesweeper) - 三种难度级别: - 简单:8×8网格,10个地雷 - 中等:16×16网格,40个地雷 - 困难:30×16网格,99个地雷 - 游戏功能: - 左键点击揭开方块 - 右键长按标记地雷 - 计时器记录游戏时间 - 暂停/继续功能 - 自动展开空白区域 - 首次点击保证安全 ### 3. 传感器监控 (Sensor Monitor) - 实时显示传感器数据: - 光照强度传感器(通过/dev/ttySAC1串口) - 距离传感器(通过/dev/ttySAC3串口) - 设备状态检测和错误处理 - 实时数据更新显示 ## 项目结构 ### 源文件说明 - `main.c` - 程序入口,初始化LVGL和输入设备 - `src/lcd.c` - 欢迎界面和模块启动逻辑 - `src/piano_block.c` - 电子钢琴实现 - `src/game.c` - 扫雷游戏界面逻辑 - `src/game_logic.c` - 扫雷游戏核心逻辑 - `src/sensor.c` - 传感器数据读取和显示 - `inc/*.h` - 相关头文件 ## 编译和运行 ### 编译要求 - ARM交叉编译工具链 (arm-linux-gcc 5.4.0) - CMake 3.10或更高版本 - LVGL图形库依赖 ### 编译步骤 使用CMake进行编译: ```bash mkdir build cd build cmake .. make -j ``` 当你修改了CMakeLists.txt文件时,你需要重新运行cmake命令来生成新的Makefile。 ```bash make clean cd .. rm -rf build mkdir build && cd build cmake .. make -j ``` 修改源代码后,只需要重新编译: ```bash make -j ``` ### 运行步骤 将编译生成的可执行文件 `main` 复制到GEC6818开发板上,并确保开发板的 `/dev/fb0` 显示设备和 `/dev/input/event0` 输入设备正常工作。然后在开发板上运行以下命令: ```bash chmod u+x main ./main ``` ## 硬件要求 - 支持framebuffer的嵌入式Linux设备 - 触摸屏输入设备 (/dev/input/event0) - 音频输出设备 - 串口传感器设备: - 光照传感器: /dev/ttySAC1 - 距离传感器: /dev/ttySAC3 ## 使用说明 - 1.启动程序后进入欢迎界面 - 2.选择三个功能模块之一: - Electronic Piano: 虚拟钢琴演奏 - Minesweeper: 扫雷游戏 - Sensor Monitor: 传感器数据监控 - 3.点击"Exit"退出程序 ### 电子钢琴操作 - 点击琴键演奏音符 - Begin Recording: 开始录制演奏 - Stop Recording: 停止录制 - Play Recording: 播放录制的演奏 - Back: 返回主菜单 ### 扫雷游戏操作 - 选择难度级别开始游戏 - 左键点击揭开方块 - 长按标记可能的地雷 - Restart: 重新开始游戏 - Pause: 暂停/继续游戏 - Back: 返回主菜单 ### 传感器监控 - 实时显示光照强度和距离数据 - 设备不可用时显示错误信息 - Back: 返回主菜单 ### 注意事项 - 确保音频文件存放在./audio/目录下,命名格式为note_*.mp3 - 确保串口设备节点存在且具有读写权限 - 程序运行时会自动创建./audio/目录用于存储录音文件 - 录音文件以recording_YYYYMMDD_HHMMSS.txt格式保存 ### 依赖库 - LVGL (LittlevGL) 图形库 - 标准C库 - POSIX线程库(pthread) - 数学库(m)