stm32利用oled显示屏与按键进行PID参数调节实现人机交互
上一个学期在学校做四轮车利用PID实现直线走,在调试过程中,我之前是每改一个参数就下载程序进控制板进行调试,观察车是否偏移来确定pid参数,但是后来我发现这样的效率很慢,经别人提醒后,我自己做了一个小小的人机交互界面,来显示pid的参数以及对pid参数进行调整。
以下是显示效果:
接着我在附上主要代码:
- // 功能描述 : OLED 7针SPI接口演示例程(STM32F103系列)
- // 说明:
- // ----------------------------------------------------------------
- // GND 电源地
- // VCC 3.3v电源
- // D0 PA5(SCL)
- // D1 PA7(SDA)
- // RES PB0
- // DC PB1
- // CS PA4
- #include "delay.h"
- #include "sys.h"
- #include "oled.h"
- #include "key.h"
- int main(void)
- {
-
- u8 t[]={10,10,10}; //因为取整数在显示屏上面显示比较好处理,所以这里把要显示的数字都改成整数
- //至于在PID调参数的时候,你可以把这里的t[0]、t[1]、t[2]当成是P、I、D的参数
- //把t[0]、t[1]、t[2]除以10就可以变成小数了,u8是0-255的范围
- delay_init();
- OLED_Init();
- KEY_Init(); //初始化按键
-
- OLED_ColorTurn(0); //0正常显示,1 反色显示
- OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
- OLED_Refresh();
- while(1)
- {
- //由于带回来的器材有限,我这里只做了一个参数的调节,其他参数也是一样的道理
- if(KEY0==1)
- t[0]++;
- if(KEY1==1)
- t[0]--;
-
- OLED_ShowString(0,0,"P:",16);
- OLED_ShowNum(16,0,t[0],3,16);
- OLED_ShowChar(32,0,46,16);//显示ASCII字符,一个ASCII为46的小数点
-
- OLED_ShowString(0,16,"I:",16);
- OLED_ShowNum(16,16,t[1],3,16);
- OLED_ShowChar(32,16,46,16);//显示ASCII字符,一个ASCII为46的小数点
-
- OLED_ShowString(0,32,"D:",16);
- OLED_ShowNum(16,32,t[2],3,16);
- OLED_ShowChar(32,32,46,16);//显示ASCII字符,一个ASCII为46的小数点
-
- OLED_Refresh();
- delay_ms(200);
- }
- }
复制代码 上面只是简单的进行三个参数的调节,方法是通过按键控制参数的增加还是减少,由于我带回家的器件不是很足,程序中只做了一个参数的调节,就是通过两个按键控制参数的增减,实现对PID参数的调节并显示在屏幕上。
关于oled显示屏的各种程序,可以看我之前发的文章,里面有好几种oled显示屏。
————————————————
版权声明:i土豆
|