实现RFID逻辑
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include "bsp_hall.h" // 添加对 bsp_hall.h 的包含
|
||||
#include "bsp_track_ir.h" // 添加对 bsp_track_ir.h 的包含
|
||||
#include "bsp_sr04.h" // 添加超声波头文件
|
||||
#include "bsp_rc522.h" // 添加 RFID 头文件
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -83,6 +84,13 @@ const osThreadAttr_t sr04Task_attributes = {
|
||||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
};
|
||||
/* Definitions for rc522Task */
|
||||
osThreadId_t rc522TaskHandle;
|
||||
const osThreadAttr_t rc522Task_attributes = {
|
||||
.name = "rc522Task",
|
||||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityBelowNormal,
|
||||
};
|
||||
/* Definitions for CmdQueue */
|
||||
osMessageQueueId_t CmdQueueHandle;
|
||||
const osMessageQueueAttr_t CmdQueue_attributes = {
|
||||
@@ -107,6 +115,7 @@ void StartDefaultTask(void *argument);
|
||||
void CarCtrl_Task(void *argument);
|
||||
void speed_get(void *argument);
|
||||
void sr04_task(void *argument);
|
||||
void rc522_task(void *argument);
|
||||
|
||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||
|
||||
@@ -126,6 +135,9 @@ void MX_FREERTOS_Init(void) {
|
||||
hall_init(); // 初始化霍尔传感器
|
||||
track_ir_init(); // 初始化轨迹红外传感器
|
||||
sr04_init(); // 初始化超声波
|
||||
rc522_init(); // 初始化 RFID 模块
|
||||
|
||||
|
||||
|
||||
/* USER CODE END Init */
|
||||
|
||||
@@ -162,6 +174,9 @@ void MX_FREERTOS_Init(void) {
|
||||
/* creation of sr04Task */
|
||||
sr04TaskHandle = osThreadNew(sr04_task, NULL, &sr04Task_attributes);
|
||||
|
||||
/* creation of rc522Task */
|
||||
rc522TaskHandle = osThreadNew(rc522_task, NULL, &rc522Task_attributes);
|
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */
|
||||
/* add threads, ... */
|
||||
/* USER CODE END RTOS_THREADS */
|
||||
@@ -256,6 +271,43 @@ void sr04_task(void *argument)
|
||||
/* USER CODE END sr04_task */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Header_rc522_task */
|
||||
/**
|
||||
* @brief Function implementing the rc522Task thread.
|
||||
* @param argument: Not used
|
||||
* @retval None
|
||||
*/
|
||||
/* USER CODE END Header_rc522_task */
|
||||
void rc522_task(void *argument)
|
||||
{
|
||||
/* USER CODE BEGIN rc522_task */
|
||||
rc522_card_info_t card;
|
||||
char uid_str[3 * RC522_UID_MAX_LEN] = {0};
|
||||
station_id_t station = STATION_NONE;
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
rc522_status_t st = rc522_poll(&card);
|
||||
if (st == RC522_OK) {
|
||||
if (rc522_uid_to_string(&card, uid_str, sizeof(uid_str))) {
|
||||
printf("RFID UID: %s, SAK:0x%02X, ATQA:0x%04X\r\n",
|
||||
uid_str, card.sak, card.atqa);
|
||||
}
|
||||
// 站点匹配逻辑
|
||||
station = rc522_match_station(card.uid, card.uid_len);
|
||||
if (station == STATION_1) {
|
||||
printf("到达站点1!\r\n");
|
||||
// 可在此处添加到站动作,如停车、蜂鸣等
|
||||
} else if (station == STATION_2) {
|
||||
printf("到达站点2!\r\n");
|
||||
// 可在此处添加到站动作,如停车、蜂鸣等
|
||||
}
|
||||
}
|
||||
osDelay(100);
|
||||
}
|
||||
/* USER CODE END rc522_task */
|
||||
}
|
||||
|
||||
/* Private application code --------------------------------------------------*/
|
||||
/* USER CODE BEGIN Application */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user