Update binary files in 3D directory: modified SLDASM and SLDPRT files

This commit is contained in:
2026-04-14 16:43:47 +08:00
parent e46b5559d2
commit fb9e67a955
7 changed files with 1058 additions and 0 deletions

94
Core/Bsp/bsp_track_ir.c Normal file
View File

@@ -0,0 +1,94 @@
#include "bsp_track_ir.h"
void track_ir_init(void)
{
/*
* 引脚模式和上下拉由 CubeMX 配置。
* 这里先保留初始化接口,后续若需要滤波/标定可直接扩展。
*/
}
// 读取原始电平状态bit=1 表示 GPIO 为高电平)
uint8_t track_ir_get_raw_mask(void)
{
uint8_t mask = 0;
if (HAL_GPIO_ReadPin(H1_GPIO_Port, H1_Pin) == GPIO_PIN_SET) {
mask |= TRACK_IR_H1_BIT;
}
if (HAL_GPIO_ReadPin(H2_GPIO_Port, H2_Pin) == GPIO_PIN_SET) {
mask |= TRACK_IR_H2_BIT;
}
if (HAL_GPIO_ReadPin(H3_GPIO_Port, H3_Pin) == GPIO_PIN_SET) {
mask |= TRACK_IR_H3_BIT;
}
if (HAL_GPIO_ReadPin(H4_GPIO_Port, H4_Pin) == GPIO_PIN_SET) {
mask |= TRACK_IR_H4_BIT;
}
return mask;
}
// 读取线状态掩码bit=1 表示对应通道检测到黑线)
uint8_t track_ir_get_line_mask(void)
{
uint8_t mask = 0;
if (HAL_GPIO_ReadPin(H1_GPIO_Port, H1_Pin) == TRACK_IR_ACTIVE_LEVEL) {
mask |= TRACK_IR_H1_BIT;
}
if (HAL_GPIO_ReadPin(H2_GPIO_Port, H2_Pin) == TRACK_IR_ACTIVE_LEVEL) {
mask |= TRACK_IR_H2_BIT;
}
if (HAL_GPIO_ReadPin(H3_GPIO_Port, H3_Pin) == TRACK_IR_ACTIVE_LEVEL) {
mask |= TRACK_IR_H3_BIT;
}
if (HAL_GPIO_ReadPin(H4_GPIO_Port, H4_Pin) == TRACK_IR_ACTIVE_LEVEL) {
mask |= TRACK_IR_H4_BIT;
}
return mask;
}
track_ir_state_t track_ir_basic_judge(void)
{
uint8_t line_mask = track_ir_get_line_mask();
uint8_t left_mask = line_mask & (TRACK_IR_H4_BIT | TRACK_IR_H3_BIT);
uint8_t right_mask = line_mask & (TRACK_IR_H2_BIT | TRACK_IR_H1_BIT);
if (line_mask == 0U) {
return TRACK_IR_STATE_LOST;
}
if (line_mask == (TRACK_IR_H1_BIT | TRACK_IR_H2_BIT | TRACK_IR_H3_BIT | TRACK_IR_H4_BIT)) {
return TRACK_IR_STATE_CROSS;
}
if ((left_mask != 0U) && (right_mask == 0U)) {
return TRACK_IR_STATE_LEFT;
}
if ((right_mask != 0U) && (left_mask == 0U)) {
return TRACK_IR_STATE_RIGHT;
}
return TRACK_IR_STATE_CENTER;
}
const char *track_ir_state_to_string(track_ir_state_t state)
{
switch (state) {
case TRACK_IR_STATE_LOST:
return "LOST";
case TRACK_IR_STATE_LEFT:
return "LEFT";
case TRACK_IR_STATE_CENTER:
return "CENTER";
case TRACK_IR_STATE_RIGHT:
return "RIGHT";
case TRACK_IR_STATE_CROSS:
return "CROSS";
default:
return "UNKNOWN";
}
}

49
Core/Bsp/bsp_track_ir.h Normal file
View File

@@ -0,0 +1,49 @@
#ifndef __BSP_TRACK_IR_H
#define __BSP_TRACK_IR_H
#include "main.h"
/*
* 红外循迹 4 路状态位定义bit=1 表示检测到黑线)
* bit0 -> H1, bit1 -> H2, bit2 -> H3, bit3 -> H4
*/
#define TRACK_IR_H1_BIT (1U << 0)
#define TRACK_IR_H2_BIT (1U << 1)
#define TRACK_IR_H3_BIT (1U << 2)
#define TRACK_IR_H4_BIT (1U << 3)
/*
* 红外模块有效电平:常见 TCRT5000 模块为低电平有效。
* 若你的模块是高电平有效,可在编译选项或此处改为 GPIO_PIN_SET。
*/
#ifndef TRACK_IR_ACTIVE_LEVEL
#define TRACK_IR_ACTIVE_LEVEL GPIO_PIN_RESET
#endif
/**
* @brief 基础循迹判定结果
*/
typedef enum {
TRACK_IR_STATE_LOST = 0, // 全灭,丢线
TRACK_IR_STATE_LEFT, // 线偏左
TRACK_IR_STATE_CENTER, // 居中
TRACK_IR_STATE_RIGHT, // 线偏右
TRACK_IR_STATE_CROSS // 十字/大面积黑线
} track_ir_state_t;
/* 初始化接口当前仅预留GPIO 配置由 CubeMX 负责) */
void track_ir_init(void);
/* 读取原始电平状态bit=1 表示 GPIO 为高电平) */
uint8_t track_ir_get_raw_mask(void);
/* 读取线状态掩码bit=1 表示对应通道检测到黑线) */
uint8_t track_ir_get_line_mask(void);
/* 最基础方向判定:丢线 / 左偏 / 居中 / 右偏 / 十字 */
track_ir_state_t track_ir_basic_judge(void);
/* 便于日志输出的状态字符串 */
const char *track_ir_state_to_string(track_ir_state_t state);
#endif /* __BSP_TRACK_IR_H */