如何在小车任务板上添加一个转向灯指令?

举报
holo.yh 发表于 2021/06/14 22:51:54 2021/06/14
【摘要】 转弯转向灯代码如何写?首先打开HARDWARE目录下的tba.c(任务板的程序)79行的任务板转向灯控制函数,代码如下:/**函数功能: 任务板转向灯控制参 数:LorR L_LED--左转向灯 R_LED--右转向灯 swch SET -- 开 RESET--关返 回 值: 无*/void Set_tba_WheelLED(uint8_t LorR,uint8_...

首先打开HARDWARE目录下的tba.c(任务板的程序)79行的任务板转向灯控制函数,代码如下:


/**
函数功能: 任务板转向灯控制
参    数:LorR  L_LED--左转向灯   R_LED--右转向灯
		  swch  SET -- 开     RESET--关
返 回 值: 无
*/
void Set_tba_WheelLED(uint8_t LorR,uint8_t swch)//第一个形参:左转向灯还是右转向灯  第二个形参:转向灯开启还是关闭
{
	switch(LorR)
	{
		case L_LED: //左转向灯
			if(swch) //如果swch等于SET(SET!=0始终为真,右击SET进入SET的定义可查看。definition:定义),代表左转向灯打开
				GPIO_ResetBits(GPIOH,GPIO_Pin_10);  //如果成立,清除GPIOH第10个端口,即让灯亮。 reset:清零、重置
			else	
				GPIO_SetBits(GPIOH,GPIO_Pin_10);   //否则,就让端口10的灯灭
			break;
		case R_LED: //右转向灯
			if(swch)
				GPIO_ResetBits(GPIOH,GPIO_Pin_11);	 //如果成立,清除GPIOH第11个端口,即让灯灭。 reset:清零、重置
			else
				GPIO_SetBits(GPIOH,GPIO_Pin_11);		 //否则,就让端口11的灯灭
			break;
	}
}


右击SET(81行左右,在注释里),点击Go To Definition Of 'SET',进入到下列函数:

观察857行,我们发现,RESET被赋值为0,SET被赋值为非0 。


右击L_LED,点击Go To Definition Of 'L_LED',进入到tba.h里。

#include "sys.h" 添加到tba.h里。如下图:

首先确定任务板操作的是哪几个端口,如何确定?通过任务板转向灯控制函数的下面这两条语句确定


			if(swch) //如果swch等于SET(即1),代表左转向灯打开
				GPIO_ResetBits(GPIOH,GPIO_Pin_10); //清除GPIOH第10个灯清零


可以看到左转是对GPIOH第10个灯清零,于是我们打开sys.h(右击上一张图片里的sys.h,点击 open document "sys.h")的第55行,如下

复制#define PHout(n),粘贴到tba.h里,并将这个端口宏定义为一个变量:


#define Tba_L_LED PHout(10)  //将任务板的左转向灯端口PHout(10)宏定义为Tba_L_LED变量
#define Tba_R_LED PHout(11)  //将任务板的右转向灯端口PHout(11)宏定义为Tba_R_LED变量

改写完后如图所示:


右转类似,上面已经写出。



调用(已测,都可用):

Tba_L_LED = 0; //任务板左转向灯开启

Set_tba_WheelLED(L_LED,SET);//任务板左转向灯开启,这里的SET也可以用非零正数代替

Tba_L_LED = 1; //任务板左转向灯关闭

Set_tba_WheelLED(L_LED,RESET);//任务板左转向灯关闭


Tba_R_LED = 0; //任务板右转向灯开启

Set_tba_WheelLED(R_LED,SET);//任务板右转向灯开启

Tba_R_LED = 1; //任务板右转向灯关闭

Set_tba_WheelLED(R_LED,RESET);//任务板右转向灯关闭





形式参数只有一个速度,原因是循迹无需给定小车要行驶多少码盘值,循迹的原理是让小车从任意位置,沿着黑线行驶至下个十字路口处,当循迹板扫描到黑线时,小车停止运行;或者从协议上看,循迹的主指令为0x06,对应的副指令只有速度值,没有码盘值。


由于任务板转向灯控制函数的代码:当1时灯端口灯灭,swch = 0时端口灯亮,与常理相反,所以我们将左转向灯和右转向灯if(swch) ……else …… 的两条语句调换顺序,换成我们符合我们正常逻辑的顺序。最终代码如下:


最后,使用时调用此函数即可:

Tba_R_LED = 1; //任务板左转向灯开启

Tba_R_LED = 0; //任务板左转向灯关闭

Tba_R_LED = 1; //任务板右转向灯开启

Tba_R_LED = 0; //任务板右转向灯关闭

例如:




【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。