release v0.9
This commit is contained in:
1 parent
0045c0c390
commit
14f2ff94d0
11 files changed
+337
-61
No files matched your search
+58
@@ -12,6 +12,7 @@
|
||||
* ESP32 GPIO2 -> I2C SDA (← MPU)
|
||||
* ESP32 GPIO3 -> I2C SCL
|
||||
* ESP32 GPIO27 -> RGB LED (WS2812)
|
||||
* ESP32 GPIO8 -> 按钮 (低电平有效, 触发识别)
|
||||
* ESP32 GND -> 电机 GND / MPU GND
|
||||
*
|
||||
* 注: 日志控制台已切换到 USB Serial/JTAG (COM 口监视),
|
||||
@@ -27,12 +28,63 @@
|
||||
#include "protocol.h"
|
||||
#include "rgb.h"
|
||||
#include "actuator.h"
|
||||
#include "key.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
static const char *TAG = "MAIN";
|
||||
|
||||
/* ---- 按钮识别任务 ---- */
|
||||
#define RECOGNIZE_TIMEOUT_MS 20000
|
||||
#define RECOGNIZE_POLL_MS 100
|
||||
|
||||
static void button_recognize_task(void *pvParam)
|
||||
{
|
||||
while (1) {
|
||||
if (key_is_pressed()) {
|
||||
ESP_LOGI(TAG, "按钮按下, 归零后再发送 RECOGNIZE ...");
|
||||
|
||||
/* ---- 归零: 舵机抬起 + Z 回 0° ---- */
|
||||
actuator_servo_up();
|
||||
actuator_motor_angle(ACTUATOR_ADDR_ANGLE, 0.0f, 50, 100, true);
|
||||
vTaskDelay(pdMS_TO_TICKS(500));
|
||||
|
||||
/* ---- XY 回零: X=0, Y=330 (vel=1500 acc=200) ---- */
|
||||
actuator_motor_mm(ACTUATOR_ADDR_X, 0.0f, 1500, 200, true);
|
||||
actuator_motor_mm(ACTUATOR_ADDR_Y1, 330.0f, 1500, 200, true);
|
||||
vTaskDelay(pdMS_TO_TICKS(2000));
|
||||
|
||||
ESP_LOGI(TAG, "归零完成, 发送 RECOGNIZE ...");
|
||||
|
||||
/* 清除旧 Cycle 记录 */
|
||||
actuator_clear_last_cycle();
|
||||
|
||||
/* 发送识别指令 */
|
||||
edc_proto_send_recognize();
|
||||
|
||||
/* 等待 MPU 回传 Cycle, 超时则发送 REQUEST */
|
||||
bool got_cycle = false;
|
||||
int loops = RECOGNIZE_TIMEOUT_MS / RECOGNIZE_POLL_MS;
|
||||
for (int i = 0; i < loops; i++) {
|
||||
vTaskDelay(pdMS_TO_TICKS(RECOGNIZE_POLL_MS));
|
||||
if (actuator_is_last_cycle_valid()) {
|
||||
got_cycle = true;
|
||||
ESP_LOGI(TAG, "RECOGNIZE 成功, 已收到 Cycle");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!got_cycle) {
|
||||
ESP_LOGW(TAG, "RECOGNIZE 超时 (%d ms), 发送 CYCLE_REQUEST",
|
||||
RECOGNIZE_TIMEOUT_MS);
|
||||
edc_proto_send_request();
|
||||
}
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(50));
|
||||
}
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
/* 初始化 RGB LED (GPIO27, 最先启动, 指示系统状态) */
|
||||
@@ -45,12 +97,18 @@ void app_main(void)
|
||||
/* 初始化电磁铁 (GPIO5) */
|
||||
magnet_init(GPIO_NUM_5);
|
||||
|
||||
/* 初始化按钮 (GPIO8, 低电平有效, 触发识别) */
|
||||
key_init(GPIO_NUM_8);
|
||||
|
||||
/* 初始化通讯协议 (I2C 从机 GPIO2/3 + UART0 GPIO11/12) */
|
||||
edc_proto_init(NULL);
|
||||
|
||||
/* 启动协议接收任务 */
|
||||
xTaskCreate(edc_proto_task, "proto", 4096, NULL, 2, NULL);
|
||||
|
||||
/* 启动按钮识别任务 */
|
||||
xTaskCreate(button_recognize_task, "btn", 2048, NULL, 1, NULL);
|
||||
|
||||
/* 上电延时 2 秒, 等待电机闭环初始化完毕 */
|
||||
ESP_LOGI(TAG, "等待电机初始化...");
|
||||
vTaskDelay(pdMS_TO_TICKS(2000));
|
||||
|
||||
Reference in new issue
Block a user