stm32利用oled显示屏与按键进行PID参数调节实现人机交互

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显示屏。
下面附上代码链接:
stm32利用oled显示屏及按键实现对PID参数的显示与调节
代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!

猜你喜欢

转载自blog.csdn.net/weixin_44069765/article/details/113808758