大一参加智能车大赛,近期利用gpio制作了个简易版的菜单,可以实现利用按键对不同的参数的数值显示与更改,这里分享下思路,因为是第一次写,若有不妥的地方,请批评指出
首先最初的想法是觉得在串口助手上看变量值,与反复烧录调参过于麻烦(下载器的线还被我不小心弄断了),想着在屏幕显示摄像头图像剩余的地方显示参数的值,并且试着改变参数的值
在屏幕上加上显示的函数即可完成第一步的显示
(推荐每个显示行隔15,mode的显示在119,我是这样的)
那如何改变值呢?
首先要把之前宏定义的值改为全局变量,源文件定义为原来的值,然后依据之前在b站上逐飞51单片机学习的思路利用gpio来控制参数。
先对gpio初始化(放初始化里),按键四个引脚是P20_0,P20_1,P20_2,P20_3。初始化为向下输出0,不按的话就一直是1,以此来检测电平(根据个人喜好,我是这样初始化的)
当引脚的电平为0时,作为判断条件(!0),进入判断语句,为了防止按键抖动,加入延迟与死循环,跳出死循环后再进行处理,每按一次,变量自加0.1,或者自减0.1这样。
因为屏幕空余的地方有限,就想着如果每次按一次按键,就有一个参数(mode)加一(这里我用的是P20_3根据个人爱好,哪个按键都行的),用mode的值来作为条件,进行屏幕上不同东西的显示,和按键不同的功能,因为不同的参数要加减的值不同(目标速度要加减的值肯定就比较大,如果调拐弯系数啥的就肯定要零点几的调,对吧)
有个很重要的点就是,在mode的处理最后一定要加个清屏函数,不然屏幕上的数会乱在一起
在gpio_process(放主循环里)里要有个优先级最高的来按键电平检测来改变mode,其次就是要有个来决定是加还是减的一个参数mode_,跟mode的差不多,区别就是只有0和1(我的是如果是0就减,是1就加)
( 在屏幕上固定地显示)
接下来就是怎么显示与改参数了
按一下P20_3,mode的值从0变为1,再按一下,继续加1(想要有几种模式就给mode的上限那加个判断,如果达到上限就清零就行了)
if(mode==0){情况一,用P20_1/P20_2来改变两个变量,是加是减看mode_是正是负}
if(mode==2){}if(mode==3){}.....后面的都是一样的,不过是改的变量不一样,每次加减的值不一样罢了
然后在图像处理的函数image_process里面加上不同模式下的图像显示if(mode==0){显示mode还有想要显示的变量的值}if(mode==1){一样的}(要注意的是别超出了显示屏范围,不然会有断言)
至于为什么不是用外部中断,因为exit函数一用,按一下按键屏幕就卡死,我也不知道为什么,反正只是想先做个简易的菜单,能用就行,功能简单,也好编辑
如果图像处理在第二个核,想要改变第一个核的参数,那么就用flash传输就行(我是这样写的),以后有机会再写这个吧,用gpio写的简易菜单就是这样的,如有不足,望批评指出