Rice我叫加饭? · 2021年02月03日

基于RT-THREAD nano的平衡车--上位机软件

首发:Rice 嵌入式开发技术分享
作者:RiceDIY

简要

  • 平衡车文章分为4篇进行说明:
  1. 《平衡车 - 硬件》:讲解平衡车的硬件设计。
  2. 《平衡车 - 软件》:讲解平衡车的软件设计,算法。
  3. 《平衡车 - 上位机》:讲解调参上位机的设计
  4. 《平衡车 - 微信小程序》:讲解微信小程序作为遥控器的实现。

image.png

软件设计

  1. 上位机与下位机通信,是采用串口通信,我自己定义了一个协议:
struct data_packet {  
  unsigned char head;  
  unsigned char type;  
  unsigned char channel;  
  unsigned char reserver1;  
  int data;  
  int reserver2 :24;  
  int tail :8;  
};  
  • 其中head和tail是固定的。head为oxbc,tail为'\n'
  • type:参数设置类型,方向控制类型,波形显示控制类型
typedef enum {  
    BC_PARAM_TYPE = 0x01,  
    BC_DIRECTION_TYPE,  
    BC_WAVEFORM_TYPE,  
}BC_DATA_TYPE;  
  • channel:根据不同类型选择不同的通道类型:
// BC_PARAM_TYPE  
typedef enum {  
    BC_BALANCE_P_PARAM_CHANNEL = 0x01,  
    BC_BALANCE_I_PARAM_CHANNEL,  
    BC_BALANCE_D_PARAM_CHANNEL,  
    BC_SPEED_P_PARAM_CHANNEL,  
    BC_SPEED_I_PARAM_CHANNEL,  
    BC_SPEED_D_PARAM_CHANNEL,  
    BC_SPEED_PARAM_CHANNEL,  
}BC_PARAM_CHANNEL;  
  
// BC_DIRECTION_TYPE  
typedef enum {  
    BC_UP_DIRECTION_CHANNEL = 0x01,  
    BC_DOWN_DIRECTION_CHANNEL,  
    BC_LEFT_DIRECTION_CHANNEL,  
    BC_RIGHT_DIRECTION_CHANNEL,  
    BC_LEFT_UP_DIRECTION_CHANNEL,  
    BC_LEFT_DOWN_DIRECTION_CHANNEL,  
    BC_RIGHT_UP_DIRECTION_CHANNEL,  
    BC_RIGHT_DOWN_DIRECTION_CHANNEL,  
}BC_DIRECTION_CHANNEL;  
  
// BC_WAVEFORM_TYPE  
typedef enum {  
    BC_BALANCE_PID_WAVEFORM_CHANNEL = 0x01,  
    BC_SPEED_PID_WAVEFORM_CHANNEL,  
    BC_SPEED_WAVEFORM_CHANNEL,  
}BC_WAVEFORM_CHANNEL;  
  • data: 具体类型,具体通道对应的数值。
  1. 其中波形图显示,采用QT的chart组件,Qt开发我不熟悉,所以我只能上github搬砖,果真有人写了对应的demo,所以我就直接搬过来了。它包含四个文件:callout.cpp, callout.h, chartview.cpp,chartview.h。

效果:

640 (14).gif

关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。

image.png
推荐阅读

更多嵌入式技术干货请关注Rice 嵌入式开发技术分享
推荐阅读
关注数
1761
内容数
51
一个周末很无聊的嵌入式软件工程师,写写经验,写写总结。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息