Compare commits

..
1 Commits
Author SHA1 Message Date
wuchuyuan d6c2c6dd52 调整自动模式顺序,调整版本号为1.0.1 2026-09-10 18:19:56 +08:00
5 changed files with 76 additions and 53 deletions
+26 -3
View File
@@ -3,7 +3,7 @@
* @brief 设备功能开关 + 自动玩法 + 手动点动 + 按键动作实现 * @brief 设备功能开关 + 自动玩法 + 手动点动 + 按键动作实现
* @author cyWu <1917507415@qq.com> * @author cyWu <1917507415@qq.com>
* @date 2026.09.10 * @date 2026.09.10
* @version V1.2.0 * @version V1.3.0
* @history * @history
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 DP0 开关、自动玩法、手动点动与按键动作 * - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 DP0 开关、自动玩法、手动点动与按键动作
* - V1.1.0, 2026.08.26, cyWu, 切模式闪灯改到 function_play_mode_apply 统一 * - V1.1.0, 2026.08.26, cyWu, 切模式闪灯改到 function_play_mode_apply 统一
@@ -13,6 +13,7 @@
* 自动模式新增单次最长运行时长,到点回待机 * 自动模式新增单次最长运行时长,到点回待机
* - V1.2.0, 2026.09.10, cyWu, 软关后 APP 下发其它控制指令也可唤醒, * - V1.2.0, 2026.09.10, cyWu, 软关后 APP 下发其它控制指令也可唤醒,
* 唤醒后本拍继续执行该指令(玩法/点动) * 唤醒后本拍继续执行该指令(玩法/点动)
* - V1.3.0, 2026.09.10, cyWu, 短按循环改为 0→4→2→6→1→3→5,App DP1 编号不变
******************************************************************************/ ******************************************************************************/
#include "app_function.h" #include "app_function.h"
@@ -54,6 +55,28 @@ static void function_play_mode_timeout(uint16_t dt);
static void function_hand_poll(void); static void function_hand_poll(void);
static void function_on_click(void); static void function_on_click(void);
/* 短按循环顺序(协议玩法号):停 → s_mode4 → s_mode2 → s_mode6 → s_mode1 → s_mode3 → s_mode5 → 停 */
static const uint8_t s_key_play_seq[7] = {
0, 4, 2, 6, 1, 3, 5
};
/**
* @brief 按短按顺序取下一档玩法
* @param cur 当前 DP1 玩法号 0~6
* @return 下一档玩法号
*/
static uint8_t function_key_play_next(uint8_t cur)
{
uint8_t i;
for (i = 0; i < 7; i++) {
if (s_key_play_seq[i] == cur) {
return s_key_play_seq[(i + 1) % 7];
}
}
return 0;
}
/** /**
* @brief 初始化功能模块状态 * @brief 初始化功能模块状态
* @return 无 * @return 无
@@ -366,7 +389,7 @@ static void function_hand_poll(void)
} }
/** /**
* @brief 短按:自动模式 0→1→…→6→0(闪灯提示交给 function_play_mode_apply * @brief 短按:按 s_key_play_seq 切自动模式(闪灯提示交给 function_play_mode_apply
* @return 无 * @return 无
*/ */
static void function_on_click(void) static void function_on_click(void)
@@ -375,7 +398,7 @@ static void function_on_click(void)
log_info("key click ignored, hand busy\n"); log_info("key click ignored, hand busy\n");
return; return;
} }
function_play_mode_apply((uint8_t)((s_func.play_mode + 1) % 7)); function_play_mode_apply(function_key_play_next(s_func.play_mode));
log_info("key click play_mode=%d\n", s_func.play_mode); log_info("key click play_mode=%d\n", s_func.play_mode);
} }
+31 -31
View File
@@ -2,13 +2,12 @@
* @file app_mode.c * @file app_mode.c
* @brief 自动模式 1~6:按节拍改方向与 PWM 占空比 * @brief 自动模式 1~6:按节拍改方向与 PWM 占空比
* @author cyWu <1917507415@qq.com> * @author cyWu <1917507415@qq.com>
* @date 2026.09.10 * @date 2026.08.24
* @version V1.3.0 * @version V1.2.0
* @history * @history
* - V1.0.0, 2026.08.21, cyWu, 首次发布 * - V1.0.0, 2026.08.21, cyWu, 首次发布
* - V1.1.0, 2026.08.24, cyWu, 接入 H 桥往返节拍 * - V1.1.0, 2026.08.24, cyWu, 接入 H 桥往返节拍
* - V1.2.0, 2026.08.24, cyWu, 节拍带占空比;六档波形加花样 * - V1.2.0, 2026.08.24, cyWu, 节拍带占空比;六档波形加花样
* - V1.3.0, 2026.09.10, cyWu, 调整 1~6 玩法顺序
******************************************************************************/ ******************************************************************************/
#include "system/includes.h" #include "system/includes.h"
@@ -38,10 +37,10 @@ typedef struct {
/* 节拍以 ms=0 结尾,循环播放。同向连续步进只改占空比,换向才刹车。 */ /* 节拍以 ms=0 结尾,循环播放。同向连续步进只改占空比,换向才刹车。 */
static const AppModeStep_t s_mode1[] = { /* 起伏攻防:2s 慢逗再猛收 */ static const AppModeStep_t s_mode1[] = { /* 弹力呼吸:慢加速放、慢加速收,最长 2s */
STEP_OUT(500, DUTY_SOFT), STEP_OUT(1200, DUTY_MID), STEP_OUT(500, DUTY_RUN), STEP_OUT(500, DUTY_MID), STEP_OUT(1200, DUTY_RUN), STEP_OUT(500, DUTY_PUNCH),
STEP_STOP(400), STEP_STOP(400),
STEP_IN(500, DUTY_PUNCH), STEP_IN(500, DUTY_MID), STEP_IN(500, DUTY_MID), STEP_IN(1200, DUTY_RUN), STEP_IN(500, DUTY_PUNCH),
STEP_STOP(400), STEP_STOP(400),
STEP_END STEP_END
}; };
@@ -54,7 +53,31 @@ static const AppModeStep_t s_mode2[] = { /* 飞鸟俯冲:快冲出去,2s 慢
STEP_END STEP_END
}; };
static const AppModeStep_t s_mode3[] = { /* 闪电快闪:两下轻、两下重,短停防 LVD */ static const AppModeStep_t s_mode3[] = { /* 云阶陀螺:短步往返加长,力度一档档加 */
STEP_OUT(800, DUTY_SOFT), STEP_IN(800, DUTY_SOFT),
STEP_OUT(800, DUTY_MID), STEP_IN(800, DUTY_MID),
STEP_OUT(800, DUTY_RUN), STEP_IN(800, DUTY_RUN),
STEP_STOP(400),
STEP_END
};
static const AppModeStep_t s_mode4[] = { /* 起伏攻防:2s 慢逗再猛收 */
STEP_OUT(500, DUTY_SOFT), STEP_OUT(1200, DUTY_MID), STEP_OUT(500, DUTY_RUN),
STEP_STOP(400),
STEP_IN(500, DUTY_PUNCH), STEP_IN(500, DUTY_MID),
STEP_STOP(400),
STEP_END
};
static const AppModeStep_t s_mode5[] = { /* 微风拂动:轻点后歇 2s */
STEP_OUT(500, DUTY_MID), STEP_STOP(1000),
STEP_IN(500, DUTY_MID), STEP_STOP(1200),
STEP_OUT(500, DUTY_RUN), STEP_STOP(800),
STEP_IN(500, DUTY_RUN), STEP_STOP(1500),
STEP_END
};
static const AppModeStep_t s_mode6[] = { /* 闪电快闪:两下轻、两下重,短停防 LVD */
STEP_OUT(400, DUTY_MID), STEP_IN(400, DUTY_MID), STEP_OUT(400, DUTY_MID), STEP_IN(400, DUTY_MID),
STEP_OUT(800, DUTY_RUN), STEP_IN(800, DUTY_RUN), STEP_OUT(800, DUTY_RUN), STEP_IN(800, DUTY_RUN),
STEP_OUT(500, DUTY_PUNCH), STEP_IN(500, DUTY_PUNCH), STEP_OUT(500, DUTY_PUNCH), STEP_IN(500, DUTY_PUNCH),
@@ -63,30 +86,7 @@ static const AppModeStep_t s_mode3[] = { /* 闪电快闪:两下轻、两下重
STEP_END STEP_END
}; };
static const AppModeStep_t s_mode4[] = { /* 弹力伪装:慢加速放、慢加速收,最长 2s */ /* 下标 = 协议玩法编号 DP11~6 对应 s_mode1~s_mode6。短按循环顺序在 app_function.c */
STEP_OUT(500, DUTY_MID), STEP_OUT(1200, DUTY_RUN), STEP_OUT(500, DUTY_PUNCH),
STEP_STOP(400),
STEP_IN(500, DUTY_MID), STEP_IN(1200, DUTY_RUN), STEP_IN(500, DUTY_PUNCH),
STEP_STOP(400),
STEP_END
};
static const AppModeStep_t s_mode5[] = { /* 云阶陀螺:短步往返加长,力度一档档加 */
STEP_OUT(800, DUTY_SOFT), STEP_IN(800, DUTY_SOFT),
STEP_OUT(800, DUTY_MID), STEP_IN(800, DUTY_MID),
STEP_OUT(800, DUTY_RUN), STEP_IN(800, DUTY_RUN),
STEP_STOP(400),
STEP_END
};
static const AppModeStep_t s_mode6[] = { /* 微风拂动:轻点后歇 2s */
STEP_OUT(500, DUTY_MID), STEP_STOP(1000),
STEP_IN(500, DUTY_MID), STEP_STOP(1200),
STEP_OUT(500, DUTY_RUN), STEP_STOP(800),
STEP_IN(500, DUTY_RUN), STEP_STOP(1500),
STEP_END
};
static const AppModeStep_t *const s_tables[7] = { static const AppModeStep_t *const s_tables[7] = {
0, s_mode1, s_mode2, s_mode3, s_mode4, s_mode5, s_mode6 0, s_mode1, s_mode2, s_mode3, s_mode4, s_mode5, s_mode6
}; };
+10 -10
View File
@@ -106,24 +106,24 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl)
case PLAY_MODE_0: /* 停止复位 */ case PLAY_MODE_0: /* 停止复位 */
// TODO: 处理 停止复位 // TODO: 处理 停止复位
break; break;
case PLAY_MODE_1: /* 起伏攻防 */ case PLAY_MODE_1: /* 弹力伪装 */
// TODO: 处理 起伏攻防 // TODO: 处理 弹力伪装
break; break;
case PLAY_MODE_2: /* 飞鸟俯冲 */ case PLAY_MODE_2: /* 飞鸟俯冲 */
// TODO: 处理 飞鸟俯冲 // TODO: 处理 飞鸟俯冲
break; break;
case PLAY_MODE_3: /* 闪电快闪 */ case PLAY_MODE_3: /* 云阶小陀螺 */
// TODO: 处理 闪电快闪
break;
case PLAY_MODE_4: /* 弹力伪装 */
// TODO: 处理 弹力伪装
break;
case PLAY_MODE_5: /* 云阶小陀螺 */
// TODO: 处理 云阶小陀螺 // TODO: 处理 云阶小陀螺
break; break;
case PLAY_MODE_6: /* 微风拂动 */ case PLAY_MODE_4: /* 起伏攻防战 */
// TODO: 处理 起伏攻防战
break;
case PLAY_MODE_5: /* 微风拂动 */
// TODO: 处理 微风拂动 // TODO: 处理 微风拂动
break; break;
case PLAY_MODE_6: /* 闪电快闪 */
// TODO: 处理 闪电快闪
break;
default: default:
break; break;
} }
+5 -5
View File
@@ -154,12 +154,12 @@ typedef enum
typedef enum typedef enum
{ {
PLAY_MODE_0 = 0, /* 停止复位 */ PLAY_MODE_0 = 0, /* 停止复位 */
PLAY_MODE_1 = 1, /* 起伏攻防 */ PLAY_MODE_1 = 1, /* 弹力伪装 */
PLAY_MODE_2 = 2, /* 飞鸟俯冲 */ PLAY_MODE_2 = 2, /* 飞鸟俯冲 */
PLAY_MODE_3 = 3, /* 闪电快闪 */ PLAY_MODE_3 = 3, /* 云阶小陀螺 */
PLAY_MODE_4 = 4, /* 弹力伪装 */ PLAY_MODE_4 = 4, /* 起伏攻防战 */
PLAY_MODE_5 = 5, /* 云阶小陀螺 */ PLAY_MODE_5 = 5, /* 微风拂动 */
PLAY_MODE_6 = 6, /* 微风拂动 */ PLAY_MODE_6 = 6, /* 闪电快闪 */
} PLAY_MODE_t; } PLAY_MODE_t;
/* 充电状态 */ /* 充电状态 */
+4 -4
View File
@@ -53,12 +53,12 @@
| 玩法 | 效果 | | 玩法 | 效果 |
| --- | --- | | --- | --- |
| 停止复位 | 停转 | | 停止复位 | 停转 |
| 起伏攻防 | 慢慢逗弄两秒,突然猛收一下 |
| 飞鸟俯冲 | 快速冲出去,再慢慢收回,模拟小鸟飞扑 |
| 闪电快闪 | 快速连续来回抽动,动作急促 |
| 弹力伪装 | 绳子慢慢放出去再慢慢收回来,来回一次 | | 弹力伪装 | 绳子慢慢放出去再慢慢收回来,来回一次 |
| 飞鸟俯冲 | 快速冲出去,再慢慢收回,模拟小鸟飞扑 |
| 云阶小陀螺 | 小幅度来回抖动,力度逐渐加大,像陀螺转动 | | 云阶小陀螺 | 小幅度来回抖动,力度逐渐加大,像陀螺转动 |
| 起伏攻防战 | 慢慢逗弄两秒,突然猛收一下 |
| 微风拂动 | 轻轻动一下,歇两秒,像被风吹动 | | 微风拂动 | 轻轻动一下,歇两秒,像被风吹动 |
| 闪电快闪 | 快速连续来回抽动,动作急促 |
- 玩法会循环播放,直到切换或停止。 - 玩法会循环播放,直到切换或停止。
- 运行中可随时切换到其他玩法或停止。 - 运行中可随时切换到其他玩法或停止。
@@ -80,7 +80,7 @@
| 操作 | 条件 | 行为 | | 操作 | 条件 | 行为 |
| --- | --- | --- | | --- | --- | --- |
| 短按(松开且未到 3 秒) | 功能开、空闲 | 切换玩法:停 → 玩法1 → … → 玩法6 → 停,循环;绿灯闪两下 | | 短按(松开且未到 3 秒) | 功能开、空闲 | 切换玩法:停 → 起伏攻防战 → 飞鸟俯冲 → 闪电快闪 → 弹力伪装 → 云阶小陀螺 → 微风拂动 → 停,循环;绿灯闪两下。App 仍按 DP1 原编号选玩法 |
| 短按 | 功能已关(App 软关 / 拔充电线后) | 只唤醒功能,不切玩法;挂待机绿灯 | | 短按 | 功能已关(App 软关 / 拔充电线后) | 只唤醒功能,不切玩法;挂待机绿灯 |
| 短按 | 手动点动进行中 | 无效 | | 短按 | 手动点动进行中 | 无效 |
| 长按 3 秒 | 功能开 | 关机进深睡 | | 长按 3 秒 | 功能开 | 关机进深睡 |