[Upload Code]:Add Mattress Com Message

This commit is contained in:
Brin 2025-05-20 17:05:54 +08:00
parent e6b87cf8bc
commit ca2eb69045
10 changed files with 4064 additions and 3769 deletions

View File

@ -57,6 +57,7 @@
| 2025-05-16 | 更换芯片STM32F405 | 重新构建 |
| 2025-05-19 | AI算法融合完毕验证数据集可行 | 文件更新 |
| 2025-05-20 | 新建AI线程 算法功能验证完成 修改串口 | 线程增加 |
| | 增加床垫部分的协议 | |
---

View File

@ -4,6 +4,7 @@
"myedge_ai_app.h": "c",
"app_x-cube-ai.h": "c",
"usart.h": "c",
"main.h": "c"
"main.h": "c",
"mymattress_ctrl.h": "c"
}
}

View File

@ -42,6 +42,8 @@ extern "C"
float ai_output[3]; // 结果数组
} model_t;
extern model_t model;
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,56 @@
#ifndef MYMATTRESS_CTRL_H
#define MYMATTRESS_CTRL_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "main.h"
/*
*
*
*
* 0xAA LEN 0x01 ~ 0x06 STATUS p1~p12 CRC 0D 0A
*
*
* 6 12 CRC校验
*
*
* 0xAA 0xAA
* LEN
* 0x01~0x06 /ID6
* STATUS /
* p1~p12 0x0012
* CRC CRC16-Modbus ~
* 0x0D 0x0A
*
*
* AA | 19 | 01 02 03 04 05 06 | XX | 00 00 00 00 00 00 00 00 00 00 00 00 | CRC_H CRC_L | 0D 0A
*
*
* - XX 0xA1
* - CRC_H CRC_L CRC16-Modbus
*/
// Mattress control modes
#define MODE_MANUAL 0xA0 // 手动压力控制
#define MODE_PREVENTION 0xA1 // 防褥疮
#define MODE_ADAPTIVE 0xA2 // 自适应模式
#define MODE_ABAB 0xA3 // ABAB 交替充放气
#define MODE_TURNING 0xA4 // 左右翻身
#define MODE_FLOATING 0xA5 // 悬浮模式
// Softness settings
#define SOFTNESS_SOFT 0xB1 // 软
#define SOFTNESS_MEDIUM 0xB2 // 中
#define SOFTNESS_HARD 0xB3 // 硬
#ifdef __cplusplus
}
#endif
#endif // MYEDGE_AI_APP_H

View File

@ -167,12 +167,12 @@ int AiModel(uint8_t *input)
}
res = predicted_class;
model.result = predicted_class;
model.confidence = max_confidence;
model.status = AI_STATUS_COMPLETED;
model.confidence = max_confidence * 100.0f;
// Map class to posture name for debugging
const char *posture_names[] = {"Supine", "Left Side", "Right Side"};
rt_kprintf("Detected posture: %s (confidence: %d%%)\n",
posture_names[predicted_class], (int)(model.confidence * 100.0f));
posture_names[predicted_class], (int)(model.confidence));
rt_memcpy(model.ai_output, aiOutData, sizeof(aiOutData));
return res;
}

View File

@ -0,0 +1,188 @@
#include "myMattress_ctrl.h"
#include "myEdge_ai_app.h"
#include < rtthread.h>
/**
* Modbus CRC16
* @param data
* @param length
* @return 16 CRC
*/
uint16_t crc16_modbus(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
for (uint16_t i = 0; i < length; i++)
{
crc ^= data[i]; // 将数据字节与 CRC 的低字节异或
for (uint8_t j = 0; j < 8; j++)
{
if (crc & 0x0001)
crc = (crc >> 1) ^ 0xA001; // 多项式为 0xA001即 0x8005 反转)
else
crc >>= 1;
}
}
return crc;
}
/**
* Send command to the mattress controller
*/
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
size_t packet_index = 0;
// Start byte
packet[packet_index++] = 0xAA;
// Add Length
len = 1 + 1 + 6 + 13 + 2 + 2;
packet[packet_index++] = len;
// Add ID bytes
for (int i = 1; i < 7; i++)
{
packet[packet_index++] = i;
}
// Mode byte
packet[packet_index++] = mode_byte;
// Parameter bytes
for (size_t i = 0; i < args_length; i++)
{
packet[packet_index++] = args[i];
}
// CRC16 增加
crc16 = crc16_modbus(packet, (1 + 1 + 6 + 13));
packet[packet_index++] = crc16 >> 8;
packet[packet_index++] = crc16 & 0xff;
// End byte
packet[packet_index++] = 0x0D;
packet[packet_index++] = 0x0A;
rt_kprintf("--------------------------------\n");
for (int i = 0; i < packet_index; i++)
rt_kprintf("packet[%d] = %x\n", i, packet[i]);
return true;
// Send packet
// TODO:增加串口发送
}
/// @brief 漂浮模式
/// @param duration_sec
/// @return 成功 失败
int run_floating_mode(void)
{
if (!(model.status == AI_STATUS_COMPLETED && model.result == POSTURE_SUPINE && model.confidence >= 70.0f))
{
return 0; // 条件不满足
}
// 发送“漂浮模式”指令
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(MODE_FLOATING, parm, 12);
}
/// @brief 翻转模式
/// @param duration_sec
/// @return 成功 失败
int run_turning_cycle(void)
{
if (!(model.status == AI_STATUS_COMPLETED && model.result == POSTURE_SUPINE && model.confidence >= 70.0f))
{
return 0; // 条件不满足
}
// 发送 MODE_TURNING 命令
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(MODE_TURNING, parm, 12);
}
/// @brief 运行防褥疮模式
/// @return 1=成功0=失败
int run_prevention_mode(void)
{
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(MODE_PREVENTION, parm, 12);
}
/// @brief 运行 ABAB 交替充气循环
/// @return 1=成功0=失败
int run_abab_cycle(void)
{
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(MODE_ABAB, parm, 12);
}
/// @brief 运行自适应模式
/// @return 1=成功0=失败
int run_adaptive_mode(void)
{
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(MODE_ADAPTIVE, parm, 12);
}
/// @brief 设置床垫软模式
/// @return 1=成功0=失败
int run_soft_mode(void)
{
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(SOFTNESS_SOFT, parm, 12);
}
/// @brief 设置床垫中等模式
/// @return 1=成功0=失败
int run_medium_mode(void)
{
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
return send_mattress_command(SOFTNESS_MEDIUM, parm, 12);
}
/// @brief 设置床垫硬模式
/// @return 1=成功0=失败
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);
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
/* 定义线程栈与控制块(静态分配) */
#define REMOTE_THREAD_STACK_SIZE 1024
static struct rt_thread remote_thread;
static rt_uint8_t remote_thread_stack[REMOTE_THREAD_STACK_SIZE];
/* 线程入口函数 */
static void remote_thread_entry(void *parameter)
{
while (1)
{
// 等待接收433数据
// 如果接收到执行相关指令
rt_thread_mdelay(100); // 可调整周期
}
}
/* 初始化函数,使用静态线程启动遥控处理 */
int remote_thread_init(void)
{
rt_thread_init(&remote_thread, // 线程控制块
"remote_task", // 名称
remote_thread_entry, // 入口函数
RT_NULL, // 参数
&remote_thread_stack[0], // 栈起始地址
sizeof(remote_thread_stack), // 栈大小
18, // 优先级(比 ai_thread 高一点)
10); // 时间片
rt_thread_startup(&remote_thread); // 启动线程
return 0;
}
INIT_APP_EXPORT(remote_thread_init); // 启动自动初始化

File diff suppressed because one or more lines are too long

View File

@ -311,6 +311,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Src\myMattress_ctrl.c</PathWithFileName>
<FilenameWithoutPath>myMattress_ctrl.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -321,7 +333,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -333,7 +345,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -345,7 +357,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -357,7 +369,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -369,7 +381,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -381,7 +393,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -393,7 +405,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -405,7 +417,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -417,7 +429,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -429,7 +441,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -441,7 +453,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -453,7 +465,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -465,7 +477,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -477,7 +489,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -497,7 +509,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -517,7 +529,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -529,7 +541,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -549,7 +561,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -561,7 +573,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -573,7 +585,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -585,7 +597,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -597,7 +609,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -609,7 +621,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -621,7 +633,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -633,7 +645,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -645,7 +657,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -657,7 +669,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -677,7 +689,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -697,7 +709,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>37</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -725,7 +737,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -737,7 +749,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -749,7 +761,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -761,7 +773,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -773,7 +785,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -793,7 +805,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>43</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -805,7 +817,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -825,7 +837,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -837,7 +849,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -849,7 +861,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -861,7 +873,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -873,7 +885,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -885,7 +897,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -897,7 +909,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -909,7 +921,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -921,7 +933,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -933,7 +945,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -945,7 +957,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -957,7 +969,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -969,7 +981,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -981,7 +993,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -993,7 +1005,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1005,7 +1017,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1017,7 +1029,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -473,6 +473,11 @@
<FileType>1</FileType>
<FilePath>../Core/Src/stm32f4xx_hal_msp.c</FilePath>
</File>
<File>
<FileName>myMattress_ctrl.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\Src\myMattress_ctrl.c</FilePath>
</File>
</Files>
</Group>
<Group>

File diff suppressed because it is too large Load Diff