- 本项目用用到了两个实用的软件包:
- EasyFlash一款开源的轻量级嵌入式Flash存储器库
- EasyLogger一款超轻量级、高性能的 C/C++ 日志库
software:【相关软件设计】
└──Camera 【OV2640例程】
├──RT-Thread 【RTT示例】
├──rt-thread-master
└──bsp
└──stm32f40x 【控制中心程序】
目录组 | 描述 |
---|---|
Kernel | 它用于存放RT-Thread内核源文件 |
User | 它用于存放用户应用文件 |
Applications | 它用于存放外设应用程序 |
Drivers | 它用于存放相关外设驱动 |
STM32_StdPeriph | 它用于存放STM32固件库文件 |
cpu | 它用于存放内核相关文件 |
Fliesystem | 它用于存放虚拟文件系统 |
DeviceDrivers | 它用于存放RT-Thread驱动 |
finsh | 它用于存放RT-Thread Finsh组件 |
libc | 它用于存放RT-Thread 相关文件 |
Easylogger | 它用于存放RT-Thread Easylogger组件 |
EasyFlash | 它用于存放RT-Thread EasyFlash |
Utilities | 它用于存放相关工具与滤波算法 |
+——RT-Thread
| └──Kernel 【RT-Thread内核初始化】
| ├── Normal Peripherals Init 【普通外设初始化】
| ├── System self-check 【系统自检:检测是否所有外设初始化完成】
| └── Read Gyroscope data 【读取JY901 九轴数据】
| ├── Detection input devices 【检测输入设别】
| ├── Attitude Control 【姿态控制】
| └──......
- 全部数据按照16进制
- 定义机头方向为X轴,机头朝向为x正方向
- 定义垂直于机头方向为y轴,向左为y正方向
编号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
数据所代表的含义 | 包头 | 包头 | 数据长度位 | 深度锁定位 | 方向锁定位 | X轴动力模拟量 | Y轴动力模拟量 | 垂直运动方向位 | 旋转运动方向位 | 油门量 | 灯亮度控制位 | 变焦摄像头动作位 | 云台控制位 | 机械臂控制位 | Reserve | Reserve | Reserve | Reserve | 启动停止位 | 校验位 |
具体描述 | AA | 55 | 10 | x | x | x | x | ON/OFF | SUM | |||||||||||
数组编号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
控制字格式:0xAA 0x55 0x10+控制字节(16字节)+校验字(所有字节相加后,保留最后一个字节)
- 第1字节:包头位
- 第2字节:包头位
- 第3字节:数据长度位
- 第4字节:0x01表示深度锁定,0x02表示人工控制(可指定默认值)
- 第5字节:0x01表示方向锁定,0x02表示随水动(可指定默认值)
- 第6字节:【左摇杆上下状态】摇杆模拟量 前后状态(0~255)即摇杆居中时为128(即停止),最下为0,最上位255
- 第7字节:【左摇杆左右状态】摇杆模拟量 左右状态(0~255)即摇杆居中时为128(即停止),最左为0,最右为255
- 第8字节:【右摇杆上下状态】摇杆模拟量 上下状态(0~255)即摇杆居中时为128(即停止),最下为0,最上位255
- 第9字节:【右摇杆左右状态】摇杆模拟量 旋转状态(0~255)即摇杆居中时为128(即停止止),最左为0,最右为255
- 第10字节:0x00
0xff (0255) 表示的油门大小:4档位可调,LB加档,LT减档,可分别设置4个档位油门大小 【不用】 - 第11字节:灯的亮度控制,0x01表示变亮,0x02表示变暗,0x00表示不动作(默认)
- 第12字节:摄像头焦距控制,0x01表示聚焦,0x02表示变放焦, 0x11表示放大,0x12表示缩小,0x00表示不动作(默认)
- 第13字节:云台转动,0x01表示向上,0x02表示向下,0x03表示归中,0x00表示不动作(默认)
- 第14字节:机械手动作,0x01表示张开,0x02表示关闭,0x00表示不动作(默认)
- 第15字节:保留(reserve)
- 第16字节:保留(reserve)
- 第17字节:保留(reserve)
- 第18字节:保留(reserve)
- 第19字节:0x00 默认 0x01表示启动, 0x02表示停止
- 第20字节:累加和校验
控制字格式:0xAA 0x55 0x16+控制字节(22字节) +校验字(所有字节相加后,保留最后一个字节)
- 第一,二字节:电压第一字节表示整数部分,第二字节小数部分
- 第三,四字节:舱外水温度第一字节表示整数部分,第二字节小数部分
- 第五,六字节:舱内CPU内核温度第一字节表示整数部分,第二字节小数部分
- 第七字节:深度值(0~16777215cm)精确到厘米 【高8位】
- 第八字节:深度值(0~16777215cm)精确到厘米 【中8位】
- 第九字节:深度值(0~16777215cm)精确到厘米 【低8位】
-
第十字节:航向角(Yaw) 【高8位】记为YawH
-
第十一字节:航向角(Yaw)【低8位】记为YawL 计算方法:偏航角(z 轴)Yaw=((YawH<<8)|YawL)/32768*180(°) 航向角(Yaw),两字节(0~359)可用0度代表正北方,90度代表正东,以此类推
-
第十二字节:俯仰角(Pitch)【高8位】记为PitchH
-
第十三字节:俯仰角(Pitch)【低8位】记为PitchL 计算方法:俯仰角(y 轴)Pitch =((PitchH<<8)| PitchL)/32768*180(°) 俯仰角(Pitch),可用0°表示水平
-
第十四字节:横滚角(Roll)【高8位】记为RollH
-
第十五字节:横滚角(Roll)【低8位】记为RollL 计算方法:横滚角(x 轴)Roll =((RollH<<8)| RollL)/32768*180(°) 横滚角(Roll),可用0°表示水平
-
第十六字节:航行速度(0~255)单位m/s
-
第17字节:设备状态标志,0x00表示都正常操作,0x01表示机械手开到头了,0x02表示摄像头转到头了,0x03表示机械手和摄像头都转到头了
设备状态标志8bit | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
代表含义 | 深度传感器初始化成功 | 所有串口设备初始化成功 | IO设备初始化成功 | PWM设备初始化成功 | 聚焦开到头 | 变焦开到头 | 云台开到头 | 机械手到头 |
- 第18字节:本设备的启动停止位(若返回的为0x01,代表本设备为启动状态;若为0x02 或 0x00,代表本设备为停止状态;则上位机 【P】图标需要对应)
- 第19字节:保留
- 第20字节:保留
- 第21字节:保留
- 第22字节:保留
所以,我们发送的字符串就应该为: 0xAA 0x55 0x10 控制字节(16字节) 校验字(所有字节相加后,保留最后一个字节) 若需其他的数据发送,按照此数据格式自行添加即可