基于PC104的能移动机器人人机界面设计
/*串口UART0接收中断*/
void __irq IRQ_UART0(void)
{ uint8 i;
if( 0x04==(U0IIR0x0F) ) rcv_new = 1; // 置新数据标志
for(i=0; i8; i++)
{ rcv_buf[i] = U0RBR; // 读FIFO数据,清除中断标志}
VICVectAddr = 0x00; // 中断处理结束
}窗口显示
人机界面主要是通过图标菜单实现移动机器人运动参数的显示,以及运动轨迹的相关操作,如打开、暂停、关闭等。因此,首先定义一个窗口的数据结构,并设置窗口的起始坐标、大小、标题等相关参数;然后调用GUI_WindowsDraw()输出显示窗口
/* 设置主窗口并显示输出 */
mainwindows.x = 0;
mainwindows.y = 0;
mainwindows.with = 240;
mainwindows.hight = 128;
mainwindows.title = (uint8 *) Mobile Robot Interface;
mainwindows.state = NULL;
GUI_WindowsDraw(mainwindows); // 绘制主窗口
图标菜单也需要定义相关的数据结构,其中图标数据和文字显示可以通过字模软件转化为数据。如对应打开图标转化为数据:
uint8 const menuico1[]={
0x00,0x70,0x00,0x1C,0x00,0x12,0x1C,0x1A,
0x17,0x0A,0x21,0xF1,0x20,0x1A,0x4F,0xFE,
0x58,0x02,0x50,0x02,0x60,0x06,0x60,0x04,
0x60,0x04,0x40,0x08,0x7F,0xF8,0x00,0x00,
}; /*;图标打开;宽×高(像素) : 16×16*/
然后,将每一个图标菜单项的显示坐标地址、图标的数据指针、对应的服务函数等进行设置后,即可调用GUI_MenuIcoDraw()实现显示输出。
mainmenu[0].icodat = (uint8 *) menuico1;
mainmenu[0].title = (uint8 *) open;
mainmenu[0].Function = (void(*)())Runopen;
另外,主程序需要先调用GUI_SetColor(1,0)函数来设置前景色及背景色。1表示点显示,0表示点灭。
图标菜单选择
界面中还需实现对图标菜单的选择操作。I2C器件ZLG7290提供了I2C接口功能和键盘中断信号。I2C总线是Philips推出的芯片间串行传输总线,它以2根连线实现了完善的全双工同步数据传送,可以方便的构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。I2C操作模式分为主模式I2C和从模式I2C,分别对应LPC2210作为主机和从机。
本文采用主模式I2C发送接收数据,从而控制三个按键S11、S12、S13的扫描并检测其连击次数。程序中先设置好默认菜单,再调用函数ZLG7290_GetKey()读取被按下的键值。ZLG7290_GetKey()函数通过调用IRcvStr (ZLG7290,1,rece,1),直接读取器件ZLG7290上的按键值。若S11被按下,表示指向上一个图标菜单;若S12被按下,表示选择当前的图标功能;若S13被按下,表示指向下一个图标菜单。
key = ZLG7290_GetKey();
if(key==KEY_OK) break; // 点击OK 键选择
if(key==KEY_NEXT)
{ mainmenu[select].state = 0; // 取消上一选择
GUI_MenuIcoDraw(mainmenu [select]);
select++; // 指向下一菜单
if(select>2) select=0;
mainmenu[select].state = 1;
GUI_MenuIcoDraw(mainmenu [select]);
}
if(key==KEY_BACK)
{ mainmenu[select].state = 0; // 取消上一选择
GUI_MenuIcoDraw(mainmenu [select]);
if(select==0) select=2;
else select--; // 指向下一菜单
mainmenu[select].state = 1;
GUI_MenuIcoDraw(mainmenu [select]);
移动机器人行使轨迹及相关参数显示
为了能实时更新显示数据及行使轨迹,PC104将移动机器人的速度,行驶方向,转角等信息转化为液晶屏上的坐标信息,并调用基本绘图函数GUI_Line(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color),画出当前行驶轨迹;同时,将新的速度值及与前方障碍物的距离值更新到相应位置。
人机界面显示效果
图3为人机界面实现效果图,整个显示窗口大小为240*128;图标菜单大小为16*16,共有六个图标;用户可以根据自己需要添加图标及对应功能。移动机器人行驶轨迹显示窗口大小为160*100;其他运动参数显示窗口大小为80*100,可以显示当前的速度、障碍物的距离和机器人旋转角度。图中小车位置表示轨迹的起点,左下角有坐标显示和比例尺1:500。
结语
随着嵌入式系统应用的飞速发展,人机交互系统的开发将更加广泛。本文阐述的基于ARM2210嵌入式系统的移动机器人人机界面的设计方法,这种方法设计简单,成本低,使操作者与机器人的交互更加友好。
- 嵌入式系统中文输入法的设计(03-02)
- 一种基于CPLD的DSP人机接口模块设计(05-13)
- 基于Qtopia的嵌入式中文输入法设计 (07-15)
- 基于DSP芯片TMS320LF2407的人机界面设计(09-26)
- 基于CPLD的DSP人机接口模块设计(10-30)
- 嵌入式组态软件系统的研究(02-25)