你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32CubeIDE+MPU6051做的动量轮平衡自行车(二)

[复制链接]
STMCU小助手 发布时间:2023-2-9 17:21
背景
        本文用于记录平衡自行车的制作过程,及制作中遇到的问题;总体方案如下:采用采用STM32F103C8T6作为主控单元、MPU-6050作为位姿采集单元、0.96寸OLED显示位姿、无刷电机带动动量轮调节小车平衡、1S锂电池配合5V和12V升压模块作为电源、蓝牙模块用于和微信小程序进行无线通讯和PID调试、舵机用于控制行驶方向和支撑小车。

OLED规格及参数简介
我用的是四针脚IIC通讯的OLED,0.96寸,像素是128*64的,如下所示:

QK78WJ[]K9IB[Q5E_UM`~JE.png

OLED显示MPU-6050位姿数据
    在上一篇专栏建立工程()的基础上,添加OLED驱动函数到iCode文件中,步骤参考上一篇专栏。

K4139BKYAAV6I4WV9892SNG.png

在main函数中添加OLED初始化函数,如下所示:
  1. /* USER CODE BEGIN 2 */

  2. /* ************0.96寸OLED初始化设置************* */
  3. char buffer[16];//float转换成char[]
  4. OLED_Init();
  5. OLED_ON();
  6. OLED_Clear();
  7. OLED_ShowStr(25,0,"DIY",2);
  8. OLED_ShowCN(49, 0, 0);//攻
  9. OLED_ShowCN(65, 0, 1);//城
  10. OLED_ShowCN(81, 0, 2);//狮
  11. OLED_ShowStr(10,2,"Temp:",2);
  12. OLED_ShowStr(10,4,"Pitch:",2);

  13. /* ************MPU-6050初始化设置************* */
  14. while (MPU_Init()){                //如果初始化失败,继续初始�?
  15.           printf("MPU_Init_Fail...");
  16. }

  17. /* USER CODE END 2 */

  18. /* Infinite loop */
  19. /* USER CODE BEGIN WHILE */
  20. while (1)
  21. {
  22.           /* ************获取和显示温度************* */
  23.           float temp = MPU_Get_Temperature()/100.0;
  24.           sprintf(buffer, "%.1f", temp);//float转换成char[]
  25.           OLED_ShowStr(68,2,buffer,2);

  26.           /* **********获取和显示MPU-6050位姿*********** */
  27.           GetAngle();
  28.           sprintf(buffer, "%.2f", Pitch);//float转换成char[]
  29.           if (Pitch>=0){
  30.                   OLED_ShowStr(60,4," ",2);
  31.                   OLED_ShowStr(100,4," ",2);
  32.                   OLED_ShowStr(68,4,(unsigned char*)buffer,2);
  33.           }
  34.           else
  35.           {
  36.                   OLED_ShowStr(100,4," ",2);
  37.                   OLED_ShowStr(60,4,(unsigned char*)buffer,2);
  38.           }
  39.    /* USER CODE END WHILE */

  40.    /* USER CODE BEGIN 3 */
  41. }
复制代码



/* USER CODE BEGIN 2 */ /* ************0.96寸OLED初始化设置************* */ char buffer[16;//float转换成char[] OLED_Init(); OLED_ON(); OLED_Clear(); OLED_ShowStr(25,0,"DIY",2); OLED_ShowCN(49, 0, 0);//攻 OLED_ShowCN(65, 0, 1);//城 OLED_ShowCN(81, 0, 2);//狮 OLED_ShowStr(10,2,"Temp:",2); OLED_ShowStr(10,4,"Pitch:",2); /* ************MPU-6050初始化设置************* */ while (MPU_Init()){                //如果初始化失败,继续初始�?          printf("MPU_Init_Fail..."); } /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) {          /* ************获取和显示温度************* */          float temp = MPU_Get_Temperature()/100.0;          sprintf(buffer, "%.1f", temp);//float转换成char[]          OLED_ShowStr(68,2,buffer,2);          /* **********获取和显示MPU-6050位姿*********** */          GetAngle();          sprintf(buffer, "%.2f", Pitch);//float转换成char[]          if (Pitch>=0){                  OLED_ShowStr(60,4," ",2);                  OLED_ShowStr(100,4," ",2);                  OLED_ShowStr(68,4,(unsigned char*)buffer,2);          }          else          {                  OLED_ShowStr(100,4," ",2);                  OLED_ShowStr(60,4,(unsigned char*)buffer,2);          }   /* USER CODE END WHILE */   /* USER CODE BEGIN 3 */ }

显示效果如下:

YWD9W3{EJ_7}J]3HE27S`6K.png

创建中文字库
        打开字体取模软件PCtoLCD2002.exe,点击【模式】,选择字符模式。

SCRF~R`%RS3SETOY[IQO]3Q.png

        点击【选项】进行如下设置,定义每个汉字的显示大小为16×16像素:

ESJU@J@OB)}R]2[N[LO6P68.png

        输入要取模的文字,点击【生成文字】。

575T~%L31Y`O]@1XI_8J4$W.png

        将复制的内容粘贴到驱动函数库中 FONT.h 中 unsigned char F16x16[]数组中:
  1. unsigned char F16x16[] =
  2. {
  3. 0x08,0x08,0x08,0xF8,0x08,0x08,0x48,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,                0x10,0x30,0x10,0x1F,0x08,0x08,0x88,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,/*"攻",0*/
  4. /* (16 X 16 , 宋体 )*/
  5. 0x20,0x20,0xFF,0x20,0x20,0xF8,0x88,0x88,0x88,0x08,0xFF,0x08,0x09,0xCA,0x08,0x00,                        0x10,0x30,0x1F,0x88,0x68,0x1F,0x10,0x20,0x9F,0x40,0x27,0x18,0x26,0x41,0xF0,0x00,/*"城",1*/
  6. /* (16 X 16 , 宋体 )*/
  7. 0x22,0x14,0x08,0xF4,0x02,0xF8,0x00,0xFF,0x02,0xF2,0x12,0xFE,0x12,0xF2,0x02,0x00,
  8. 0x44,0x82,0x41,0x3F,0x80,0x47,0x30,0x0F,0x00,0x1F,0x00,0xFF,0x10,0x1F,0x00,0x00,/*"狮",2*/
  9. /* (16 X 16 , 宋体 )*/
  10. };
复制代码

OLED_ShowStr(25,0," DIY",2);
OLED_ShowCN(41,0,0);//攻
OLED_ShowCN(57,0,1);//城
OLED_ShowCN(73,0,2);//狮

显示效果如下:

QRXZ(HIB@)N1(@(`M~~CNC2.png


作者:DIY攻城狮

收藏 评论0 发布时间:2023-2-9 17:21

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版