8.6 KiB
8.6 KiB
#领域/未知
#复盘/0 #临时/备忘 #状态/待处理
20260507-备忘-主题名-文件内容
一句话描述
[________]
[主要涉及文件]
mainwindow.cpp
[需求说明]
我已经更新 gen_main.c 为最新测试 main.c 内容
下面是我发现的问题:
-
RobotInit(); 不应该出现在 start_task 中
-
NYT_USER_UCOS();
while(1);的位置没有在 int main() 的最后
[核心需求]
最终组合的 main.c
[初始代码]
void start_task(void) {
[自定义代码]
}
int main() {
[优先运行代码]
NYT_USER_UCOS();
while(1);
}
右侧预览显示
void start_task(void) {
[自定义代码]
}
[注意事项]
-
在修改代码时不要一次性进行太多颠覆性修改,要引导我来逐步分析和实现
-
gen_main.c 中的内容是最新生成的 main.c
[补充说明]
下方代码仅供测试是否正常组合的参考,实际应用会灵活修改
初始代码
#include "main.h"
#include "2020zhjn.h"
#include "Servo.h"
int s2_k=200;//1号舵机张开
int s2_b=120;//1号舵机闭合
int s_color=0;//颜色识别变量1
int beep_t=8; //非十字模块路口鸣叫时间
int beep_t1=4;//过十字模块路口鸣叫时间
int SD1=60;//非十字拼装块直线速度
int SD2=45;//非十字拼装块转弯速度
int SD3=55;//非十字拼路口冲出速度
/*高低速轨迹函数*/
void H_LOW(int H_L)//1为高速 0为低速
{
if(H_L==0)DRIVE_CROSS(7,2,-4,-7,-10);//低速走轨迹函数
else DRIVE_CROSS(8,6,1,-2,-4);//高速走轨迹函数
}
int flog=0;
int fga=0;
int fdou=0;
/*多任务系统参数设置*/
void *User_Task1_Handle=NULL;
void *User_Task2_Handle=NULL;
void *User_Task3_Handle=NULL;
void *User_Task4_Handle=NULL;
void *User_Task5_Handle=NULL;
void USERTASK1();
void USERTASK2();
void USERTASK3();
void USERTASK4();
void USERTASK5();
int red_blue_all=8,gray_green_all=4;//木块总数量
int red_blue=0,gray_green=0;//识别到的木块数
/****垃圾分拣任务舵机角度设置,
以下参数必调,否则无法完成任务****/
int s9_zuo=53,s9_you=182,s9_fuwei=116;
int s10_xia=173,s10_zhong=125,s10_fang=75;
int s8_xia=70,s8_zhong=125,s8_fang=165;
/********************************
以下函数为小车抖动(电机)函数,理解后也可自行修改
****************************************/
void q_h_dou(int n)//前后抖次数
{
int speed=70;
int i;
for(i=0;i<n;i++)
{
M_T(50,speed,speed);
M_T(70,-speed,-speed);
}
msleep(800);
}
void servo9_dou(int n)//9号舵机抖
{
int speed=70;
int i;
for(i=0;i<n;i++)
{
S_K(9,s9_zuo,500);S_K(9,s9_you,800);
S_K(9,s9_fuwei,500);
//M_T(70,-speed,-speed);
}
OSTimeDly(1000);
}
/********************************
以下函数为颜色识别函数,理解后也可自行修改
红蓝识别函数:ReadColor(1) 返回值:1为红色 2为蓝色
灰绿识别函数:ReadColor(2) 返回值:3为灰色 4为绿色
其他颜色可自行修改函数
****************************************/
int Read_Color(u8 mode)//
{
u8 iii=0;
int I_R1,I_G1,I_B1,I_C1;
int I_R2,I_G2,I_B2,I_C2;
int I_R3,I_G3,I_B3,I_C3;
int I_R4,I_G4,I_B4,I_C4;
//红色木块采集RGB值数据
I_R1 = Read_Addr(900);
I_G1 = Read_Addr(901);
I_B1 = Read_Addr(902);
I_C1 = Read_Addr(903);
//蓝色木块采集RGB值数据
I_R2 = Read_Addr(904);
I_G2 = Read_Addr(905);
I_B2 = Read_Addr(906);
I_C2 = Read_Addr(907);
//灰色木块采集RGB值数据
I_R3 = Read_Addr(908);
I_G3 = Read_Addr(909);
I_B3 = Read_Addr(910);
I_C3 = Read_Addr(911);
//绿色木块采集RGB值数据
I_R4 = Read_Addr(912);
I_G4 = Read_Addr(913);
I_B4 = Read_Addr(914);
I_C4 = Read_Addr(915);
//木块容差调整,默认为50,可通过主机修改
RED_V = Read_Addr(916);//红色模块容差调整
BLUE_V = Read_Addr(917);//蓝色模块容差调整
HUI_V = Read_Addr(918);//灰色模块容差调整
GRE_V = Read_Addr(919);//绿色模块容差调整
OSIntEnter();
TCS34725_GetRawData_USART(RGB);//颜色数据获取
OSIntExit();
while((((RGB[0]>3900)||(RGB[1]>3900)||(RGB[2]>3900)||(RGB[3]>3900))&&(iii<20)))
{
iii++;
OSIntEnter();
TCS34725_GetRawData_USART(RGB);
OSIntExit();
}
//以上代码无需修改 ////////////////////////
//RGB[0]:实际读取R值
//RGB[1]:实际读取G值
//RGB[2]:实际读取B值
//RGB[3]:实际读取C值
if(mode==1)//红蓝识别模式
{
if(
(RGB[0]>(I_R1-100))&&(RGB[0]<(I_R1+100))
&&(RGB[3]>(I_C1-50 ))&&(RGB[3]<(I_C1+50))
)return 1;//红色
else if(
(RGB[2]>(I_B2-100))&&(RGB[2]<(I_B2+100))
&&(RGB[3]>(I_C2-50))&&(RGB[3]<(I_C2+50))
)return 2;//蓝色
else return 0;
}
else if(mode==2)//灰绿识别模式
{
if(
(RGB[0]>(I_R3-50))&&(RGB[0]<(I_R3+50))
&&(RGB[1]>(I_G3-50))&&(RGB[1]<(I_G3+50))
&&(RGB[3]>(I_C3-50))&&(RGB[3]<(I_C3+50))
)return 3;//灰色
else if(
(RGB[0]>(I_R4-50))&&(RGB[0]<(I_R4+50))
&&(RGB[1]>(I_G4-50))&&(RGB[1]<(I_G4+50))
&&(RGB[3]>(I_C4-50))&&(RGB[3]<(I_C4+50))
)return 4;//绿色
else return 0;
}
//可自定义其他模式
}
/********************************
以下函数为颜色识别函数,理解后也可自行修改
其他颜色木块识别函数:ReadColor_other
返回值:1为颜色1 2为颜色2
其他颜色可自行修改函数
****************************************/
int Read_Color_other(void)
{
u8 iii=0;
int I_R1,I_G1,I_B1,I_C1;
int I_R2,I_G2,I_B2,I_C2;
int I_R3,I_G3,I_B3,I_C3;
int I_R4,I_G4,I_B4,I_C4;
//色块1 RGBC采集数据值
I_R1 = Read_Addr(922);
I_G1 = Read_Addr(923);
I_B1 = Read_Addr(924);
I_C1 = Read_Addr(925);
//色块2 RGBC采集数据值
I_R2 = Read_Addr(926);
I_G2 = Read_Addr(927);
I_B2 = Read_Addr(928);
I_C2 = Read_Addr(929);
//色块1、色块2 容差调整
Color1_V = Read_Addr(930);
Color2_V = Read_Addr(931);
OSIntEnter();
TCS34725_GetRawData_USART(RGB);//颜色数据获取
OSIntExit();
while((((RGB[0]>3900)||(RGB[1]>3900)||(RGB[2]>3900)||(RGB[3]>3900))&&(iii<20)))
{
iii++;
OSIntEnter();
TCS34725_GetRawData_USART(RGB);//颜色数据获取
OSIntExit();
}
//以上代码无需修改 ////////////////////////
if(
(RGB[0]>(I_R1-50))&&(RGB[0]<(I_R1+50))
&&(RGB[1]>(I_G1-50))&&(RGB[1]<(I_G1+50))
&&(RGB[2]>(I_B1-50))&&(RGB[2]<(I_B1+50))
&&(RGB[3]>(I_C1-50))&&(RGB[3]<(I_C1+50))
)return 1;//色块1
else if(
(RGB[0]>(I_R2-50))&&(RGB[0]<(I_R2+50))
&&(RGB[1]>(I_G2-50))&&(RGB[1]<(I_G2+50))
&&(RGB[2]>(I_B2-50))&&(RGB[2]<(I_B2+50))
&&(RGB[3]>(I_C2-50))&&(RGB[3]<(I_C2+50))
)return 2;//色块2
else return 0;
}
/********************************
以下函数为舵机抖动函数,理解后也可自行修改
****************************************/
void duoji_dou(int n)//前后抖次数
{
int speed=70;
int i;
S_K(10,s10_fang,0);S_K(8,s8_fang,600);
for(i=0;i<n;i++)
{
S_K(10,s10_fang+10,0);S_K(8,s8_fang-10,0);delay_ms(20);
S_K(10,s10_fang,0);S_K(8,s8_fang,0);delay_ms(20);
}
delay_ms(500);
}
优先运行代码
SuDu_motor_Exp1();Com2_Init(115200); //串口初始化
//Com1_Init(115200);
// DRIVE(7,2,-4,-7,-10);
H_LOW(1);//默认高速轨迹
// DRIVE_CROSS(8,6,1,-2,-4);
ZHJN_init();//内部代码初始化
//address_data();
setTraceIIC(1,4,3);//setTraceIIC(2,4,3);
Color_tcs34725_Init();
SPI_OLED_LED_HIGH();
if(Read_Addr(5)==0||Read_Addr(5)==-1)
{
Write_Addr(899,100);Write_Addr(898,100);
Write_Addr(5,1);
}
IIC_servos(9,s9_fuwei);//msleep(200);
/*舵机测试默认显示值*/