上一个学期在学校做四轮车利用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利用语音识别与播报智能控制led灯
下一篇:stm32f103c8t6控制ESP8266与手机APP通信
设计资源 培训 开发板 精华推荐
- AH1308 应用提示 - Mantis TJA1044 3.3V 高速 CAN 收发器
- 逆变系统用光电耦合器
- LTM4643IY 2.375V 至 5V 输入、四路 1V、1.2V、1.5V、1.8V 输出降压稳压器的典型应用
- LTC3624IMSE-2 具有 800mA 突发钳位、fSW = 1MHz 的可调输出电压、2A 同步降压型稳压器的典型应用
- 基于LNBH25S的LNB电源评估板
- 【霜秋凛然FRPS】插拔服务器电源笼
- LT3973HMSE-3.3 1.8V 降压转换器的典型应用
- 使用 Analog Devices 的 LTC3615IFE-1 的参考设计
- EVAL-AD7797EBZ,用于应变计的 AD7797、24 位、123SPS ADC 的评估板
- ADR435A 5 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力