发表日期:2017-02-17 15:06:01文章编辑:亮宁电子浏览次数: 标签:
一、预备知识
亮宁机器人主板上自带了两个按钮,分别为K1和K2(如图1)。在日常使用机器人的过程中,我们通常在机器人通电启动后,按下K2按钮使机器人开始运行;当需要机器人重新开始运行程序时,我们按下K1按钮使机器人复位。这里将详细介绍这两个按钮的功能和用法。
图1.按钮的位置
二、功能说明
1、K1按钮
K1是Reset按钮,又称为复位按钮,其作用是在机器人带电的状态下,重新启动机器人,一般情况下,用于重新运行机器人内部的程序。
需要注意的是,当K1被按下后,机器人和电脑一样,会有一个自检重启的过程。只有当自检重启彻底完成之后,机器人才会回到程序运行前的最初状态,K2键按下才起作用。
2、K2按钮
K2按钮是个普通的按钮,用B_start()函数调用。当按下K2时,机器人开始运行B_start()之后的程序。当B_start()函数放在整个机器人程序的开头时,则在按下K2按钮之前,机器人始终处于停止等待状态,直到K2按钮被按下,机器人才开始运行。
K2按钮在内部和48号数字口相连。当K2被按下时,48号数字口返回0;当K2处于松开状态,48号数字口返回1。因此,当我们不需要机器人等待按键再运行,或者用其它设备和语句来代替B_start()实现机器人的手动启动时,可以把K2按钮作为一个简单的开关来使用。
三、使用说明
1、按下K1后,机器人的自检重启过程,根据实际情况大概需要2秒钟左右的时间,如果我们在按下K1后不加停顿,立马就去按K2来启动机器人,此时自检重启没有完成,按键不起作用,那么无论我们怎样反复的去按K2按钮,都是无效的。
因此,正确的做法是:
1) 当我们按下K1后,稍等片刻,再按K2。如果发现K2按钮无效,不要反复的按K2,而是应重新按下K1,并等待更多的时间后再尝试按K2。
2) 当机器人程序已经运行结束时,可以马上按下K1来复位机器人,这样在下一次运行之前便不需要等待机器人重启与自检了。
3) 在写机器人程序时,我们可以用如下的程序框架来设计,便能在不使用K1按钮的情况下,只用K2按钮来控制反复运行。
机器人简单巡线程序:
#include<LNDZ.h>
int ll,l,m,r,rr,n;
void init()
{
}
void repeat()
{
B_start(); //1*
while(1) //构造循环来实现repeat的功能。
{
ll=AR(4)<619;//这里的值只是示例,具体值需实测。
l=AR(2)<632;
m=AR(1)<509;
r=AR(3)<644;
rr=AR(5)<684;
n=ll+l+m+r+rr;
if(ll==0) motor(-40,40);
else if(l==0) motor(0,40);
else if(m==0) motor(40,40);
else if(r==0) motor(40,0);
else if(rr==0) motor(40,-40);
if(n<3)
{
motor(0,0);
break; //跳出while(1)循环
}
}
注:1*、B_start()写在了repeat()函数内,B_start()之后的程序运行结束后,不需要按K1便能回到按键等待,以后我们每按一次K2按钮来启动机器人,从而仅用K2来实现程序的重复运行。
2、因为K2内部与48号数字口相连,可以利用这个特点把K2按钮当成一个开关。具体见如下程序。
机器人自动测值程序:
#include <LNDZ.h>
int llm,lm,mm,rm,rrm,ll,l,m,r,rr,n,t=0;
void init()
{
pinMode(48,INPUT);//说明48号数字输入口
while (DR(48)==1)//K2按钮按下去后数字口返回0
{
ll=AR(4);
l=AR(2);
m=AR(1);
r=AR(3);
rr=AR(5); //1*
}
beep(600); //2*
while (DR(48)==1)
{
llm=(ll+AR(4))/2;
lm=(l+AR(2))/2;
mm=(m+AR(1))/2;
rm=(r+AR(3))/2;
rrm=(rr+AR(5))/2; //3*
}
beep(600); //4*
while (DR(48)==1);
beep(600);
}
void repeat()
{
ll=AR(4)<llm;//小于号为逻辑运算符。成立时返回1,不成立时返回0
l=AR(2)<lm;
m=AR(1)<mm;
r=AR(3)<rm;
rr=AR(5)<rrm;
n=ll+l+m+r+rr;
if(ll==0) motor(-40,40);
else
else
else
else
if (n<3)
{
motor(0,0);
while (1);
}
}
注:1*、当按钮没被按下去的时候,反复地读取4、2、1、3、5号模拟口上的值。
2*、当按钮被按下,跳出以上while循环后,鸣叫一声,以示成功读取一种颜色的返回值。该beep语句还能消除按键抖动。
3*、再次等待按钮被按下,等待过程中,不断地读取另外一种颜色的返回值,并且进行平均值的计算。
4*、当按钮被按下,跳出以上while循环后,鸣叫一声,以示成功计算出黑白两色的分界线,各传感器的分界线分别存于变量llm、lm、mm、rm、rm中。