单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4|回复: 0
收起左侧

OPENMV与STM32串口通信解析源程序

[复制链接]
bioo97 发表于 2019-11-26 19:14 | 显示全部楼层 |阅读模式
可以识别两种颜色并反馈到STM32进行解析,标记并区分两种颜色的,内还有stm32追小球的云台图为,STM32通过串口与PC端通信上传数据的效果,帧率很高很稳定!
1.png

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "holder.h"
  7. #include "oled.h"
  8. #include "mpu6050.h"
  9. #include "control.h"
  10. #include "HMI.h"
  11. #include "usart2.h"       
  12. #include "openmv.h"
  13. /*全局变量*/
  14. int PWM=1665;
  15. int16_t p_x=100;
  16. int Holder_PID(int8_t Xerror,int8_t Dzone) ;

  17. int main(void)
  18. {               

  19.         delay_init();                     //延时函数初始化          
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

  21.         uart_init(115200);                  /*opemv串口接收*/
  22.          
  23.         uart3_init(9600);             /*串口屏*/
  24.         uart2_init(9600);            /*串口发送printf*/
  25.          

  26.         while(1)
  27.         {
  28.    

  29.          printf("\n\r X偏移=%d Y偏移=%d \n\r" ,OpenMV_RX ,OpenMV_RY);   /*X轴左负右正 red */
  30.          printf("\n\r X偏移=%d Y偏移=%d \n\r" ,OpenMV_GX ,OpenMV_GY);   /*X轴左负右正 green */
  31.          printf("\n\r 颜色合=%d \n\r",OpenMV_add);                      /*0x00没检测到0x01red 0x02green 0x03都有*/
  32.                        
  33.         }       
  34. }

  35. int Holder_PID(int8_t Xerror,int8_t Dzone)    /*PWM在1750-1950之间对应0~180°*/
  36. {
  37.                 static float  kp=0.08,kd=0.18,Ki=0;
  38.                 static float LastError,SumError,LastPWM,PWM_PID;
  39.                 float Error,dError;

  40.                 char flag;
  41.           Error=Xerror;
  42.           /*积分*/
  43.           SumError+=Error;
  44.        
  45.           if(Xerror<=Dzone&&Xerror>=-Dzone)
  46.                 {
  47.                   return LastPWM;
  48.                 }
  49.                 /*微分*/

  50.           dError=Error-LastError;
  51.           LastError=Error;
  52.                
  53.                 PWM_PID=(kp*Error+kd*dError+flag*Ki*SumError);
  54.                 if(PWM_PID<=Dzone&&PWM_PID>0.5)PWM_PID=1;
  55.                 if(PWM_PID>=-Dzone&&PWM_PID<-0.5)PWM_PID=-1;
  56.                
  57.     PWM=PWM+PWM_PID-2;
  58.                
  59.                 /*限幅*/
  60.                 if(PWM>=1755)PWM=1755;
  61.                 if(PWM<=1575)PWM=1575;
  62.                 LastPWM=PWM;
  63.                
  64.                 return PWM;
  65. }
复制代码

所有资料51hei提供下载:
识别两种颜色.7z (273.48 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表