[Upload Code]:add Deal Code

This commit is contained in:
Brin 2025-06-11 15:16:27 +08:00
parent cab4180ffa
commit 962629896d
9 changed files with 5142 additions and 1791237 deletions

View File

@ -70,6 +70,7 @@
| 2025-06-04 | 完成串口协议的对接,串口可输出 | |
| | 调试1024点完成CAN版本。 | 串口接收有点问题后面需要看 |
| 2025-06-11 | 完成遥控433MHZ模块的功能调试 | |
| | 接收处理的代码完成 | |
---
@ -81,7 +82,7 @@
- [x] 传感器采集逻辑完成
- [ ] 无线模块开发完成
- [x] 无线模块开发完成
- [x] RTOS 集成调通

View File

@ -49,6 +49,7 @@ extern "C"
#define SOFTNESS_MEDIUM 0xB2 // 中
#define SOFTNESS_HARD 0xB3 // 硬
extern struct rt_event remote_deal_event; // 静态事件对象;
#ifdef __cplusplus
}
#endif

View File

@ -2,6 +2,7 @@
#include "myEdge_ai_app.h"
#include <rtthread.h>
struct rt_event remote_deal_event; // 静态事件对象;
/**
* Modbus CRC16
* @param data
@ -34,7 +35,8 @@ bool send_mattress_command(uint8_t mode_byte, uint8_t *args, size_t args_length)
rt_uint8_t len = 0;
uint16_t crc16 = 0;
// Create command packet
uint8_t packet[20]; // Allocate enough space for command
// Allocate enough space for command
uint8_t packet[32] = {0};
size_t packet_index = 0;
// Start byte
@ -151,7 +153,46 @@ int run_hard_mode(void)
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(SOFTNESS_HARD, parm, 12);
}
///////////////////////////////////////////////////////////////////////////
// 假设buf中已经存有串口数据LC:DAB10893,这是一个ASC码的字串形式,即buf[0]='L'
// buf[1] = 'C'。。。。
// 转码思路 1 先判断前面三字节数据头是否为LC:
// 2 将ASC码的数转成HEX格式
// 3 校验数据和正确否
// 代码如下:
// ASC字母或数字转成HEX数的子函数
///////////////////////////////////////////////////////////////////////////
rt_uint8_t LATER_TO_NUMBER(rt_uint8_t d)
{
if (d >= '0' && d <= '9')
return d & 0x0f;
if (d >= 'A' && d <= 'F')
return d - 'A' + 0x0a;
if (d >= 'a' && d <= 'f')
return d - 'a' + 0x0a;
return 0xff; // 无效数据
}
// 以下为数据校验和转换,数据正确则返回1,否则返回0
uint8_t remote_result[4] = {0};
rt_uint8_t CHK_RF_DAT(uint8_t *buffer)
{
rt_uint8_t i;
uint8_t buf[8] = {0};
if (buffer[0] != 'L' && buffer[1] != 'C' && buffer[2] != ':')
return 0; // 错误数据返回0
for (i = 3; i < (3 + 8); i++) // 转换DAB10893共8个数据为HEX
{
buf[i - 3] = LATER_TO_NUMBER(buffer[i]);
}
remote_result[0] = (buf[0] << 4) + buf[1]; // 组合成应有的HEX格式
remote_result[1] = (buf[2] << 4) + buf[3]; // 组合成应有的HEX格式
remote_result[2] = (buf[4] << 4) + buf[5]; // 组合成应有的HEX格式
remote_result[3] = (buf[6] << 4) + buf[7]; // 组合成应有的HEX格式
if ((uint8_t)(remote_result[0] + remote_result[1] + remote_result[2]) == remote_result[3])
return 1; // 数据校验正确
else
return 0; // 数据错误
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
@ -161,11 +202,69 @@ static struct rt_thread remote_thread;
static rt_uint8_t remote_thread_stack[REMOTE_THREAD_STACK_SIZE];
/* 线程入口函数 */
static volatile rt_uint8_t res = 0;
static void remote_thread_entry(void *parameter)
{
rt_uint32_t e;
while (1)
{
// 等待接收433数据
if (rt_event_recv(&remote_deal_event, 0x01, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) == RT_EOK)
{
rt_kprintf("Recv Data...\r\n");
rt_kprintf("L:%d D:%s", remote_uart_rx_len, remote_uart_rx_buffer);
if (CHK_RF_DAT(remote_uart_rx_buffer) == 1)
{
res = remote_result[2];
rt_kprintf("Data Check Done Key:%d \r\n", res);
hex_dump_simple(remote_result, 4);
// TODO: 进行处理
switch (res)
{
case 00:
run_floating_mode();
rt_kprintf("Key Value : %d Mode: Float\r\n", remote_result[2]);
break;
case 01:
run_turning_cycle();
rt_kprintf("Key Value : %d Mode: Turn\r\n", remote_result[2]);
break;
case 02:
run_prevention_mode();
rt_kprintf("Key Value : %d Mode: Prevention\r\n", remote_result[2]);
break;
case 03:
run_abab_cycle();
rt_kprintf("Key Value : %d Mode: Cycle\r\n", remote_result[2]);
break;
case 04:
run_adaptive_mode();
rt_kprintf("Key Value : %d Mode: Adaptive\r\n", remote_result[2]);
break;
case 05:
run_soft_mode();
rt_kprintf("Key Value : %d Mode: Soft\r\n", remote_result[2]);
break;
case 06:
run_medium_mode();
rt_kprintf("Key Value : %d Mode: Medium\r\n", remote_result[2]);
break;
case 07:
run_hard_mode();
rt_kprintf("Key Value : %d Mode: Hard\r\n", remote_result[2]);
break;
default:
break;
}
// 结束后处理
rt_memset(remote_uart_rx_buffer, 0, sizeof(remote_uart_rx_buffer));
rt_memset(remote_result, 0, sizeof(remote_result));
}
else
{
rt_kprintf("Data Check fAIL \r\n");
}
}
// 如果接收到执行相关指令
rt_thread_mdelay(100); // 可调整周期
}
@ -174,6 +273,7 @@ static void remote_thread_entry(void *parameter)
/* 初始化函数,使用静态线程启动遥控处理 */
int remote_thread_init(void)
{
rt_err_t result = rt_event_init(&remote_deal_event, "remote_evt", RT_IPC_FLAG_FIFO);
rt_thread_init(&remote_thread, // 线程控制块
"remote_task", // 名称
remote_thread_entry, // 入口函数

View File

@ -23,6 +23,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "mySensor_deal.h"
#include "myMattress_ctrl.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -179,7 +180,7 @@ void USART1_IRQHandler(void)
HAL_UART_Receive_DMA(&huart1, remote_uart_rx_buffer, REMOTE_RX_BUFFER_SIZE); // 开启DMA接收
remote_uart_rx_len = received_length;
// 发送事件通知处理线程
// rt_event_send(&uart_rx_event, 0x01);
rt_event_send(&remote_deal_event, 0x01);
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -135,7 +135,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>d</Name>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -153,30 +153,28 @@
<Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F405RGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>180</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>../Core/Src/stm32f4xx_it.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>Origin_MattressData</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>remote_uart_rx_buffer</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>remote_result</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>res</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
<Ww>
@ -191,7 +189,7 @@
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>0</aLwin>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>

File diff suppressed because it is too large Load Diff