找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1961|回复: 0
打印 上一主题 下一主题
收起左侧

PIXY视觉追踪程序

[复制链接]
跳转到指定楼层
楼主
ID:464977 发表于 2019-6-29 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pixy视觉追踪模块,使用串口通信,只需在主程序调用即可。

源程序如下:
  1. #include "pixy/pixy.h"
  2. uint16_t a,b,c,d,e;


  3. uint8_t Raw_Data[40];//原始数据大包,为解串准备
  4. uint8_t counter;//计数用

  5. void usart2_init(u32 baudRate)
  6.         {
  7.                
  8.         GPIO_InitTypeDef    GPIO_InitStructure;
  9.   NVIC_InitTypeDef    NVIC_InitStructure;
  10.         USART_InitTypeDef   USART_InitStructure;

  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  13.                
  14.         GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
  15.                
  16.         //UART2 GPIO  TX配置
  17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  18.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  20.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  21.                
  22.   //UART2 GPIO  RX配置
  23.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  25.   GPIO_Init(GPIOD, &GPIO_InitStructure);

  26.         //UART 数据格式配置
  27.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  28.         USART_InitStructure.USART_Parity = USART_Parity_No;
  29.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  30.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  31.         USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
  32.         USART_InitStructure.USART_BaudRate = baudRate;
  33.         USART_Init(USART2, &USART_InitStructure);
  34.        
  35.         //中断配置
  36.   USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
  37.   NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  38.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  39.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  40.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  41.   NVIC_Init(&NVIC_InitStructure);

  42.        
  43.   USART_Cmd(USART2, ENABLE);  //使能串口
  44.        
  45.         USART_ClearFlag(USART2, USART_FLAG_TC);
  46.        
  47.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断

  48.         //Usart NVIC 配置
  49.   NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
  50.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级1
  51.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                //子优先级0
  52.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  53.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、
  54. }




  55. void USART2_IRQHandler(void)                                  //Pixy_Uart_ReadData
  56. {
  57.         int i;
  58.        
  59.   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)       //等待读取数据寄存器DR
  60.         {
  61.                 USART_ClearITPendingBit(USART2,USART_IT_RXNE);
  62.                 Raw_Data[counter] = USART_ReceiveData(USART2);
  63.                 counter++;
  64.                 if(counter == 40)
  65.                 {
  66.                         counter=0;                                             //重新回数组头
  67.                
  68.                         for(i=0;i<40;i++)                                      //计算更新一次坐标
  69.                         {
  70.                                 if((Raw_Data[i] == 0x55)&&(Raw_Data[i+1] == 0xaa)&&(Raw_Data[i+2] == 0x55)&&(Raw_Data[i+3] == 0xaa))
  71.                                         {
  72.                                                 a= Raw_Data[i+6]  + Raw_Data[i+7]*256;           //   a   颜色代号
  73.                                                 b= Raw_Data[i+8]  + Raw_Data[i+9]*256;           //   b   X坐标
  74.                                                 c= Raw_Data[i+10] + Raw_Data[i+11]*256;          //   c   Y坐标
  75.                                                 d= Raw_Data[i+12] + Raw_Data[i+13]*256;          //   d   width
  76.                                                 e= Raw_Data[i+14] + Raw_Data[i+15]*256;          //   e   height
  77.                                                 break;                                           //   跳出for循环
  78.                                         }
  79.                         }
  80.                
  81.                 }
  82.         }
  83. }
复制代码

所有资料51hei提供下载:
pixy.zip (1.67 KB, 下载次数: 13)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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