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