全国大学生智能汽车大赛(一):摄像头识别赛道代码
全国大学生智能汽车大赛(二):电感采样、卡尔曼滤波、方向控制代码
全国大学生智能汽车大赛(三):上下位机通信协议及代码
下面为正文
/*******************************
* 屏幕显示
* 蓝牙通信
*作者:躺躺我啊
*最终修改日期:2021.6.20
*TC264D
*******************************/
#include "headfile.h"
uint8 data[30];
//向上位机发送信息用
extern int speed_now_int,speed_out_int;
extern int x_error_int,y_error_int;
void data_init(void)
{
data[0] = 0x55; //帧数据头
data[1] = 0xaa; //帧数据头
data[28] = 0x55; //帧数据尾
data[29] = 0xaa; //帧数据尾
}
void send_to_pc(void)
{
data[2] = speed_now_int / 256; //编码器输出,高8位
data[3] = speed_now_int % 256; //编码器输出,低8位
data[4] = speed_out_int / 256; //电机PWM占空比,高8位
data[5] = speed_out_int % 256; //电机PWM占空比,低8位
data[6] = steer.out / 256; //舵机控制输出,高8位
data[7] = steer.out % 256; //舵机控制输出,低8位
data[8] = steer.ll / 256; //电感1输出值,高8位
data[9] = steer.ll % 256; //电感1输出值,低8位
data[10] = steer.l / 256; //电感2输出值,高8位
data[11] = steer.l % 256; //电感2输出值,低8位
data[12] = steer.lm / 256; //电感3输出值,高8位
data[13] = steer.lm % 256; //电感3输出值,低8位
data[14] = steer.m / 256; //电感4输出值,高8位
data[15] = steer.m % 256; //电感4输出值,低8位
data[16] = steer.r / 256; //电感5输出值,高8位
data[17] = steer.r % 256; //电感5输出值,低8位
data[18] = steer.rm / 256; //电感6输出值,高8位
data[19] = steer.rm % 256; //电感6输出值,低8位
data[20] = steer.rr / 256; //电感7输出值,高8位
data[21] = steer.rr % 256; //电感7输出值,低8位
data[22] = steer.all / 256; //电感总输出值,高8位
data[23] = steer.all % 256; //电感总输出值,低8位
data[24] = x_error_int / 256; //横向电感偏差,高8位
data[25] = x_error_int % 256; //横向电感偏差,低8位
data[26] = y_error_int / 256; //纵向电感偏差,高8位
data[27] = y_error_int % 256; //纵向电感偏差,低8位
wireless_send_buff(&data[0],30); //向上位机发送数据
}
void show_all(void)
{
char txt[32] = "xiaoli";
sprintf(txt, "1_ll:%4d 2_l:%4d 3_lm:%4d", steer.ll, steer.l, steer.lm); //显示电感值
ips200_showstr(0,0,txt);
sprintf(txt, "7_rr:%4d 6_r:%4d 5_rm:%4d", steer.rr, steer.r, steer.rm); //显示电感值
ips200_showstr(0,1,txt);
sprintf(txt, "4_mid:%4d", steer.m); //显示电感值
ips200_showstr(0,2,txt);
sprintf(txt, "L_all:%4d ", steer.all); //显示电感总值
ips200_showstr(0,3,txt);
sprintf(txt, "x_left: %4d", steer.x_left); //显示左横电感总值
ips200_showstr(0,4,txt);
sprintf(txt, "x_right:%4d",steer.x_right); //显示右横电感总值
ips200_showstr(0,5,txt);
sprintf(txt, "x_err:%4.1f x_big:%4d", steer.x_error, steer.x_bigerror); //显示电感偏差
ips200_showstr(0,6,txt);
sprintf(txt, "y_err:%4.1f y_big:%4d", steer.y_error, steer.y_bigerror); //显示电感偏差
ips200_showstr(0,7,txt);
sprintf(txt, "steer.out:%4d",steer.out); //显示舵机控制输出
ips200_showstr(0,8,txt);
sprintf(txt, "speed_now:%.1f",speed_param.now); //显示电机PWM
ips200_showstr(0,9,txt);
sprintf(txt, "speed_set:%.1f",speed_param.set); //显示电机PWM
ips200_showstr(0,10,txt);
sprintf(txt, "speed_out:%.1f",speed_param.out); //显示电机PWM
ips200_showstr(0,11,txt);
sprintf(txt, "speed_real:%.1f",speed_param.speed_real); //显示实际速度
ips200_showstr(0,12,txt);
sprintf(txt, "counts_flag:%d counts:%d",speed_param.counts_flag,speed_param.counts); //显示实际速度
ips200_showstr(0,13,txt);
sprintf(txt, "distance:%.1f",speed_param.distance); //显示实际速度
ips200_showstr(0,14,txt);
sprintf(txt, "direct_flag:%d",steer.direct_flag); //显示丢线相关信息
ips200_showstr(0,15,txt);
sprintf(txt, "circle_flag:%d stage:%d",steer.circle_flag,steer.circle_stage); //显示环岛相关信息
ips200_showstr(0,16,txt);
sprintf(txt, "trident_flag:%d time:%d",steer.trident_flag,steer.trident_time); //显示三叉相关信息
ips200_showstr(0,17,txt);
}
//蜂鸣器,time为蜂鸣次数
void bark(int time)
{
int i = 0;
for (i = 0;i < time;i++)
{
gpio_set(P33_10,1); //开启蜂鸣器
systick_delay_ms(STM0, 400); //延时
gpio_set(P33_10,0); //关闭蜂鸣器
}
}
摄像头:8个数据口,一个串口,两eru中断
数据口:00_0 00_1 00_2 00_3 00_4 00_5 00_6 00_7
配置串口:摄像头RX:02_2 摄像头TX:02_3
VSY:02_0
HREF:程序不需要,所以不接
PCLK:02_1
四路运放 A0 A1 A2 A3 等
四个编码器:
LSB:33_7 DIR:33_6
LSB:02_8 DIR:00_9
LSB:10_3 DIR:10_1
LSB:20_3 DIR:20_0
8路pwm:
21_2 21_3 21_4 21_5 02_4 02_5 02_6 02_7
ICM20602:
CLK: P20_11
MOSI: P20_14
MISO: P20_12
CS: P20_13
SPI0
TFT屏幕:
CLK 15_3
MOSI 15_5
MISO 15_4 //实际上TFT没有这个引脚 这里仅仅占位而已
CS0 15_2
BL 15_4 //复用控制背光
REST 15_1
DC 15_0
SPI2
舵机:P33_9
尽量不要使用以下引脚,以下引脚属于boot引脚,不合理的使用容易导致单片机无法启动等问题,因此建议大家尽量不要使用:
P14_2
P14_3
P14_4
P14_5
P14_6
P10_5
P10_6