基于Arduino Uno的桌面竞速游戏机:硬件搭建与状态机逻辑实现
1. 项目概述从零打造一个桌面竞速游戏机“Louies Arduino Race Game”这个项目听起来就带着一股浓厚的个人创作和复古街机的味道。它本质上是一个基于Arduino微控制器平台完全由自己动手搭建的、物理交互式的竞速游戏装置。你可以把它想象成一个微缩版的街机赛车游戏但它的核心不是运行在电脑屏幕里的虚拟程序而是由真实的按钮、灯光、显示屏甚至可能是一个小小的舵机控制的“赛车”构成的实体。这个项目的魅力在于它完美融合了硬件搭建、嵌入式编程和游戏设计。你不仅是在写代码更是在创造一个可以触摸、可以听到反馈、可以与朋友面对面竞技的玩具。它非常适合那些已经玩腻了单纯让LED闪烁或者舵机转动的Arduino爱好者想要挑战一个更综合、更有趣的应用。通过这个项目你能系统地学习到如何将多个输入如按钮和输出如LED、显示屏设备协同工作如何设计游戏逻辑如计时、计分、胜负判定以及如何优化代码以保证游戏的流畅性和响应速度。最终成品可以是一个两人对战的反应速度测试器也可以是一个单人挑战最快圈速的计时游戏全看你的创意。2. 核心硬件选型与电路设计思路要搭建这样一个竞速游戏我们需要把整个系统拆解成几个核心模块控制大脑、玩家输入、游戏反馈和电源。每个模块的选择都直接影响到最终的游戏体验和制作难度。2.1 主控板的选择为何是Arduino Uno对于“Louies Race Game”这类项目Arduino Uno R3几乎是毋庸置疑的首选。原因很实在引脚足够、资源适中、生态无敌。Uno板载14个数字I/O口其中6个可作PWM输出和6个模拟输入口这对于连接两个玩家的按钮、多个LED指示灯以及一个显示屏来说绰绰有余。它的16MHz主频和2KB SRAM处理这类实时性要求不极端、逻辑复杂度中等的游戏逻辑完全够用。市面上也有更强大的板子比如Arduino Mega引脚更多或ESP32性能更强且带Wi-Fi但对于入门到中级的综合项目Uno的性价比和简易性是最佳的。庞大的社区意味着任何你遇到的问题几乎都能找到现成的解决方案或库文件支持。我个人的经验是在项目初期选择生态最成熟的平台能帮你避开至少50%的坑。2.2 输入与输出设备清单一个基础的双人竞速游戏需要以下硬件玩家输入x2两个大型的、手感清晰的瞬时按钮作为每位玩家的“油门”。通常选用常开型的12mm或16mm金属按钮带LED背光的那种效果更佳。视觉反馈起跑灯一组3个LED红、黄、绿模拟赛车起跑的信号灯序列红→红黄→绿。胜负指示灯两个不同颜色如蓝、红的LED分别指示哪位玩家获胜。游戏状态显示一个0.96英寸或1.3英寸的OLED显示屏I2C接口。这是项目的点睛之笔用于显示“准备”、“开始”、每位玩家的反应时间、胜利次数等。选择I2C接口的OLED是因为它仅需2根数据线SDA, SCL极大节省了引脚。听觉反馈一个有源蜂鸣器。用于发出“滴”声提示准备、起跑信号音、胜利音效等能极大增强游戏的沉浸感。电源一个可靠的5V/2A的直流电源适配器通过Uno的电源接口供电。切忌仅靠USB供电尤其是当连接了多个LED和显示屏时USB的500mA电流可能不足导致设备不稳定。2.3 电路连接原理与注意事项电路搭建是整个项目的物理基础务必遵循“电源路径清晰信号线有序”的原则。按钮连接两个按钮的一端分别接至Arduino的数字引脚如引脚2和3另一端接地。同时启用Arduino内部的上拉电阻在代码中设置INPUT_PULLUP这样按钮未按下时引脚读为高电平按下时变为低电平省去了外接上拉电阻的麻烦。LED连接所有LED必须串联限流电阻通常220Ω或330Ω的电阻是安全选择。将电阻接在LED正极与Arduino数字引脚之间LED负极接地。对于起跑灯序列可以分别用三个引脚控制。OLED连接I2C OLED仅需四根线VCC接5VGND接地SDA接A4引脚SCL接A5引脚。这是Arduino Uno上固定的I2C引脚。蜂鸣器连接正极接一个数字引脚如引脚8负极接地。注意在焊接或使用面包板连接时建议先为每个模块如所有LED、按钮组单独测试确认无误后再集成。我曾因为一个LED的限流电阻虚焊导致整个系统电流异常排查了半天。下面是一个简化的接线表示例展示了核心部件的连接关系组件引脚/连接连接到Arduino引脚说明玩家A按钮一端数字引脚 2启用内部上拉按下为低电平另一端GND玩家B按钮一端数字引脚 3启用内部上拉另一端GND起跑红灯正极经电阻数字引脚 4负极GND起跑黄灯正极经电阻数字引脚 5负极GND起跑绿灯正极经电阻数字引脚 6绿灯亮代表可出发负极GND玩家A胜LED正极经电阻数字引脚 9负极GND玩家B胜LED正极经电阻数字引脚 10负极GNDOLED显示屏VCC5VGNDGNDSDAA4I2C数据线SCLA5I2C时钟线有源蜂鸣器正极数字引脚 8负极GND3. 游戏逻辑设计与核心代码实现硬件是骨架软件才是灵魂。这个游戏的逻辑并不复杂但需要清晰地处理多个状态和玩家交互。3.1 状态机游戏流程的核心框架用“状态机”的思想来设计游戏逻辑是最清晰的。整个游戏可以划分为以下几个状态IDLE待机状态上电初始化OLED显示欢迎信息如“Louies Race Game”所有LED熄灭等待开始信号。READY准备状态当系统检测到某个启动条件如按下某个特定按钮或等待一段时间后进入。OLED显示“Ready...”蜂鸣器发出短促“滴”声起跑红灯亮起。COUNTDOWN倒计时状态准备后进入随机长度的延时例如1-3秒模拟真实起跑的不确定性。期间红灯保持黄灯亮起或红黄同时亮。这里是防作弊关键必须在随机延时结束后才亮绿灯。GO开始状态随机延时结束绿灯亮起蜂鸣器发出长音同时Arduino开始一个高精度计时使用micros()函数。游戏进入等待玩家按键的状态。REACTION反应状态循环检测两个按钮的输入。一旦有玩家按下按钮立即记录当前时间戳计算该玩家的反应时间当前时间减去“GO”状态开始的时间。RESULT结果显示状态比较两位玩家的反应时间决出胜者。在OLED上显示“Player A Wins! Time: 0.215s”或“Player B is Too Fast! (抢跑)”等信息并点亮对应玩家的胜利LED。等待几秒后自动或手动复位返回IDLE状态。使用enum枚举和switch-case语句来实现状态机会让代码非常易读和易于维护。3.2 关键代码段解析与防作弊机制让我们看看几个核心代码片段以及其中蕴含的细节。首先定义引脚和变量#include Wire.h #include Adafruit_SSD1306.h // OLED库 // 引脚定义 const int btnPlayerA 2; const int btnPlayerB 3; const int ledRed 4, ledYellow 5, ledGreen 6; const int ledWinA 9, ledWinB 10; const int buzzer 8; // 游戏状态 enum GameState { IDLE, READY, COUNTDOWN, GO, REACTION, RESULT }; GameState currentState IDLE; // 计时相关 unsigned long goTime; // 记录“GO”开始的微秒数 unsigned long reactionTimeA, reactionTimeB; // 玩家反应时间 bool playerAReacted false; bool playerBReacted false; // 随机倒计时 unsigned long randomDelay; unsigned long countdownStartTime;防作弊的“随机倒计时”实现这是游戏公平性的核心。不能在READY状态后固定延时否则玩家会背下节奏。case READY: oled.clearDisplay(); oled.setCursor(0,0); oled.print(Ready...); oled.display(); digitalWrite(ledRed, HIGH); tone(buzzer, 1000, 200); // 准备音 // 生成一个随机延时比如1000到3000毫秒之间 randomDelay random(1000, 3001); countdownStartTime millis(); // 记录进入倒计时的时刻 currentState COUNTDOWN; break; case COUNTDOWN: if (millis() - countdownStartTime randomDelay) { // 随机延时结束进入GO状态 digitalWrite(ledYellow, LOW); digitalWrite(ledGreen, HIGH); // 绿灯亮可以抢答了 tone(buzzer, 1500, 500); // 起跑音 goTime micros(); // 使用微秒级精度计时 currentState GO; } else if (millis() - countdownStartTime randomDelay - 500) { // 倒计时最后0.5秒亮黄灯红黄同时亮 digitalWrite(ledYellow, HIGH); } // 在COUNTDOWN状态下如果检测到按钮按下则判定为抢跑 if (digitalRead(btnPlayerA) LOW || digitalRead(btnPlayerB) LOW) { // 触发抢跑处理逻辑 handleFalseStart(); } break;反应计时与胜负判定在GO状态中持续检测按钮。一旦按下立即计算时间。case GO: // 检测玩家A if (!playerAReacted digitalRead(btnPlayerA) LOW) { reactionTimeA micros() - goTime; playerAReacted true; } // 检测玩家B if (!playerBReacted digitalRead(btnPlayerB) LOW) { reactionTimeB micros() - goTime; playerBReacted true; } // 如果至少有一个玩家反应了进入结果状态 if (playerAReacted || playerBReacted) { // 稍等片刻确保可能同时按下的另一个按键也被捕获 delay(50); currentState RESULT; } break; case RESULT: // 判断胜负 bool aValid playerAReacted reactionTimeA 0; // 有效反应 bool bValid playerBReacted reactionTimeB 0; if (!aValid !bValid) { // 都没按理论上不会但做保护 displayResult(No Winner?); } else if (aValid !bValid) { // A赢 digitalWrite(ledWinA, HIGH); displayResult(A Wins: String(reactionTimeA/1000.0) ms); } else if (!aValid bValid) { // B赢 digitalWrite(ledWinB, HIGH); displayResult(B Wins: String(reactionTimeB/1000.0) ms); } else { // 都按了比较时间 if (reactionTimeA reactionTimeB) { digitalWrite(ledWinA, HIGH); displayResult(A Faster: String(reactionTimeA/1000.0) ms); } else if (reactionTimeB reactionTimeA) { digitalWrite(ledWinB, HIGH); displayResult(B Faster: String(reactionTimeB/1000.0) ms); } else { // 平局微秒级相同概率极低但存在 digitalWrite(ledWinA, HIGH); digitalWrite(ledWinB, HIGH); displayResult(Tie!); } } delay(3000); // 结果显示3秒 resetGame(); // 重置所有变量和LED返回IDLE状态 break;4. 系统集成、调试与优化心得当所有代码模块编写完毕硬件也连接好后真正的挑战——系统集成与调试就开始了。这个过程往往是问题集中爆发的阶段但也是收获最大的阶段。4.1 分模块调试法不要试图一次性上传完整代码并期望它完美运行。我强烈建议采用分模块调试输入测试先写一个简单的程序循环读取两个按钮的状态并打印到串口监视器确保每个按钮按下和释放都能被正确识别且无抖动误触发。输出测试分别测试控制每一组LED起跑灯、胜负灯的亮灭测试蜂鸣器发声测试OLED屏幕能否正常显示文字和图形。核心逻辑测试将游戏状态机的骨架搭起来暂时用串口打印代替实际的LED和屏幕输出。比如打印“Entering READY state”“Random Delay: 2350ms”“GO!”。确保状态转换的逻辑正确随机延时正常工作。集成测试将各个模块的代码逐步合并。先合并输入和状态机再合并输出。每合并一部分就上传测试一次。4.2 常见问题与排查实录在实际制作中你几乎一定会遇到下面这些问题问题一按钮反应不灵或连发。现象有时按下没反应有时轻轻碰一下程序却认为按了好几次。原因机械按钮的“抖动”。在按下和释放的瞬间金属触点会在几毫秒内产生一系列不稳定的通断信号。解决软件消抖。不要在loop()中直接读引脚判断而是记录按下时的millis()只有当按钮状态稳定保持超过20-50毫秒才认为是一次有效动作。或者使用更优雅的Bounce2库它帮你处理了所有消抖逻辑。#include Bounce2.h Bounce debouncerA Bounce(); void setup() { debouncerA.attach(btnPlayerA, INPUT_PULLUP); debouncerA.interval(25); // 设置25毫秒消抖间隔 } void loop() { debouncerA.update(); if (debouncerA.fell()) { // 检测到下降沿按下 // 处理按下事件 } }问题二OLED屏幕不显示或乱码。现象屏幕一片空白或者显示奇怪的字符。排查检查接线VCC、GND、SDA、SCL四根线是否接对、接牢。I2C设备对接触不良极其敏感。检查地址使用一个I2C扫描程序确认你的OLED屏幕的I2C地址通常是0x3C或0x3D。在初始化Adafruit_SSD1306对象时传入正确的地址。检查库确保安装了正确的Adafruit_SSD1306库以及其依赖的Adafruit_GFX库。初始化后清屏并显示在setup()中初始化屏幕后立即执行display()和clearDisplay()。问题三游戏节奏奇怪感觉“卡顿”。现象状态切换不流畅按下按钮后反馈延迟明显。原因在loop()中使用了delay()函数。delay()会阻塞整个程序导致在此期间无法检测按钮输入感觉就是“卡住了”。解决使用非阻塞式定时。用millis()来管理所有的时间间隔。前面状态机中的随机延时判断就是用millis() - startTime interval的方式实现的。整个loop()函数应该快速循环绝不长时间阻塞。问题四蜂鸣器声音小或刺耳。现象声音太轻或者只有“嗒嗒”的噪声没有音调。解决确认使用的是有源蜂鸣器给电就响有固定频率。无源蜂鸣器需要自己用PWM产生频率才能发声。检查驱动电流Arduino引脚输出电流有限约20mA。如果蜂鸣器工作电流较大可能需要一个三极管如8050来驱动。不过对于普通小型有源蜂鸣器直连通常没问题。使用tone(pin, frequency, duration)函数可以发出指定频率和时长的声音比单纯digitalWrite让蜂鸣器响更可控。4.3 体验优化与功能扩展基础功能稳定后可以考虑以下优化让游戏体验更上一层楼增加音效多样性为不同状态准备、抢跑、胜利、失败设置不同的音调和节奏。tone()函数可以改变频率组合出简单旋律。美化OLED显示使用Adafruit_GFX库的绘图功能绘制进度条表示随机倒计时或者显示一个简单的赛车动画。记录历史成绩加入一个EEPROM存储模块记录最快反应时间、玩家胜率等数据并在OLED上展示排行榜。多种游戏模式通过一个模式切换开关增加“单人练习模式”只与随机时间赛跑、“极限挑战模式”绿灯亮起时间极短等。外壳与装饰用亚克力板、木板甚至3D打印一个外壳将电路板、按钮、LED规整地封装起来贴上贴纸一个充满个性的桌面游戏机就诞生了。这个项目从构思到实现最深的体会是嵌入式开发是一个不断在硬件和软件之间折衷、调试的过程。一个稳定的项目离不开清晰的逻辑设计、可靠的硬件连接以及对细节如消抖、非阻塞、电源的持续关注。当看到朋友围着你做的这个简陋但有趣的小机器争相比赛时那种成就感远非单纯购买一个成品玩具可比。它不仅仅是一个游戏更是你逻辑思维、动手能力和解决问题能力的完整体现。

相关新闻

基于Arduino与WS2812B的双人竞速游戏开发实战

基于Arduino与WS2812B的双人竞速游戏开发实战

1. 项目概述:从“玩具”到“竞技场”的蜕变如果你手头正好有一块Arduino开发板,几个LED灯和几个按钮,你通常会拿它们来做什么?点亮流水灯,做个简单的计数器,或者控制一个舵机?这些经典项目固然有…

2026/8/19 4:00:26 阅读更多 →
AutoSurrogate:LLM驱动的多智能体框架,实现地下流动模拟代理模型自主构建

AutoSurrogate:LLM驱动的多智能体框架,实现地下流动模拟代理模型自主构建

1. 项目概述:当大语言模型成为地下流动的“总工程师”最近在跟几位做油藏数值模拟和地下水污染预测的朋友聊天,大家不约而同地提到了同一个痛点:构建一个靠谱的代理模型(Surrogate Model),实在是太耗时耗力…

2026/8/19 4:00:26 阅读更多 →
汽车产业转型:从规模扩张到创新驱动的实战路径

汽车产业转型:从规模扩张到创新驱动的实战路径

1. 从“大而不强”到“强而有力”:一个汽车大省的转型逻辑最近几年,如果你关注汽车产业,尤其是新能源汽车的版图变化,一定会注意到一个现象:一些传统的汽车工业大省,正在经历一场深刻的“身份焦虑”。它们拥…

2026/8/19 4:00:26 阅读更多 →

最新新闻

FreeRTOS延时精度解析:vTaskDelay与vTaskDelayUntil的差异与应用

FreeRTOS延时精度解析:vTaskDelay与vTaskDelayUntil的差异与应用

1. 项目概述:为什么FreeRTOS的延时精度值得深究?在嵌入式实时操作系统(RTOS)的开发中,任务调度和时序控制是核心中的核心。我们经常需要在任务中实现精确的延时,比如以100ms为周期读取传感器数据&#xff0…

2026/8/19 7:19:06 阅读更多 →
嵌入式工程师如何高效利用线上技术会议:从GD32到C2000的实战学习法

嵌入式工程师如何高效利用线上技术会议:从GD32到C2000的实战学习法

1. 嵌入式开发者如何从一场线上会议中榨取最大价值?作为一名在嵌入式一线摸爬滚打了十几年的老工程师,我参加过无数线下技术会议,也经历过疫情后线上会议的爆发。当看到“The Embedded Online Conference – May 20 – 21, 2020”这个标题时&…

2026/8/19 7:19:06 阅读更多 →
嵌入式开发实战:5个Makefile编写技巧提升构建效率与可维护性

嵌入式开发实战:5个Makefile编写技巧提升构建效率与可维护性

1. 项目概述:为什么嵌入式软件构建需要一份好用的Makefile?如果你在嵌入式开发领域摸爬滚打过一段时间,肯定对“编译”这两个字又爱又恨。爱的是,它能把你的代码变成实实在在可以运行的固件;恨的是,这个过程…

2026/8/19 7:19:06 阅读更多 →
Arm架构演进:从计算子系统到边缘AI工具链的开发者实践指南

Arm架构演进:从计算子系统到边缘AI工具链的开发者实践指南

1. 从Arm Dev Summit 2020看技术风向:一次迟到的复盘与深度解读最近在整理技术资料时,翻到了2020年Arm Dev Summit的一些旧闻和资料。虽然已经是四年前的会议,但当时释放出的许多信号,在今天看来,不仅没有过时&#xf…

2026/8/19 7:19:06 阅读更多 →
基于RP2040的硬件自动化工具DuckyClaw:从USB HID模拟到脚本引擎设计

基于RP2040的硬件自动化工具DuckyClaw:从USB HID模拟到脚本引擎设计

1. 项目缘起:从“软件爪子”到“硬件爪子”的进化最近在折腾一个挺有意思的玩意儿,我把它叫做DuckyClaw。这个名字听起来有点怪,但如果你玩过或者听说过“OpenClaw”这个项目,大概就能猜到几分。简单来说,DuckyClaw 是…

2026/8/19 7:19:06 阅读更多 →
嵌入式软件仿真实战:3个技巧提升开发效率与代码质量

嵌入式软件仿真实战:3个技巧提升开发效率与代码质量

1. 项目概述:嵌入式软件仿真的价值与挑战在嵌入式开发领域,硬件依赖一直是个让人头疼的问题。想象一下,你精心编写的代码,因为一块还没到货的开发板,或者一个难以复现的硬件故障,整个项目进度就被卡住了。更…

2026/8/19 7:18:06 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →