openmv舵机云台 自动追踪色块 STM32源程序

发布者:创新之梦最新更新时间:2020-07-14 来源: 51hei关键字:openmv  舵机云台  自动追踪色块  STM32 手机看文章 扫描二维码
随时随地手机看文章

之前做的舵机云台自动瞄色块的装置 现在已经拆掉了,所以没有图片


就是类似19年国赛电磁的发挥部分要求


单片机源程序如下:

#include "control.h"


u8 key = 0;

u8 mode = 0;

u8 sign = 0;

u16 mode_r = 0;

u16 mode_p = 0;


void TIM1_UP_IRQHandler(void)   //TIM1中断

{

        if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源

        {

                        TIM_ClearITPendingBit(TIM1,TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源                 

                        key = KEY_Scan();

                  mode = click_N_Double(50);


                        if(key == 1)

                        {

                                LED0 = 1;

                                mode_r++;

                                if(mode_r <= 6)

                                        roll = 1500 + 110 * mode_r; //9.9度

                                if(mode_r > 6)

                                        roll = 1500 - 110 * (mode_r - 6);

                                if(mode_r > 12)

                                {

                                        roll = 1500;

                                        mode_r = 0;

                                }

                                delay_ms(100);

                                LED0 = 0;

                        }

                        if(key == 2)

                        {

                                LED1 = 1;

                                mode_p++;

                                if(mode_p <= 3)

                                        pitch = 1000 + 110 * mode_p; //9.9度

                                if(mode_p > 3)

                                        pitch = 1000 - 110 * (mode_p - 3); //9.9度

                                if(mode_p > 6)

                                {

                                        pitch = 1000;

                                        mode_p = 0;

                                }

                                delay_ms(100);

                                LED1 = 0;

                        }

                        

                 if(key == 3)

                 {

                         LED0 = 1;

                         LED1 = 1;

                         TIM_SetCompare1(TIM4,roll);

                         TIM_SetCompare2(TIM4,pitch);

                         delay_ms(100);

                         LED0 = 0;

                         LED1 = 0;

                 }

                 if(mode == 2)

                         sign = 1;

                 if(sign == 1)

                        autoaid();

        }

}


void autoaid(void)

{

        delay_ms(100);

        if(OpenMV_Rx_BUF[0] < 140)

        {

                roll += 33;

                if(roll >= 2160)

                        roll -= 33;

                TIM_SetCompare1(TIM4,roll);

        }

        if(OpenMV_Rx_BUF[0] > 180)

        {

                roll -= 33;

                if(roll <= 840)

                        roll += 33;

                TIM_SetCompare1(TIM4,roll);

        }

        if(OpenMV_Rx_BUF[1] < 90)//0x5F 95

        {

                pitch += 33;

                if(pitch >= 1440)

                        pitch -= 33;

                TIM_SetCompare2(TIM4,pitch);

        }

        if(OpenMV_Rx_BUF[1] > 140)//0x87  135

        {

                pitch -= 33;

                if(pitch <= 670)

                        pitch += 33;

                TIM_SetCompare2(TIM4,pitch);

        }

}


import sensor, image, time

from pyb import UART

import json


threshold = [(32, 60, 127, 41, -128, 127)]


sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.skip_frames(time = 2000 )

sensor.set_auto_whitebal(False)

#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。


clock = time.clock()


uart = UART(3, 115200)


uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位、


while(True):

    clock.tick()

    img = sensor.snapshot()

    blob = img.find_blobs(threshold, area_threshold=300)

    if blob: #如果找到了目标颜色

       # print(blob)

       # uart.write("B3 B3 ")    #一帧数据的帧头

        FH = bytearray([0xb3,0xb3])

        uart.write(FH)

        for b in blob:

        #迭代找到的目标颜色区域

            img.draw_rectangle(b[0:4]) # rect

            img.draw_cross(b[5], b[6]) # cx, cy

            x = b.cx()

            y = b.cy()

            #area = b.area()

            if x >= 256:

                x -= 70

            if x < 256:

                print(x, y,'n')

                data = bytearray([x,y])

                uart.write(data)


关键字:openmv  舵机云台  自动追踪色块  STM32 引用地址:openmv舵机云台 自动追踪色块 STM32源程序

上一篇:STM32F030C8配置使用NRF24L01
下一篇:简化和加快最终产品开发速度,STM32 探索套件问市

推荐阅读最新更新时间:2024-10-29 08:25

STM32 配置PC13~PC15
在STM32的数据手册的管脚分配图中可以看到:PC14与OSC32_IN公用一个引脚,PC15与OSC32_OUT公用一个引脚,它们的使用方法如下: 当LSE(低速外部时钟信号)开启时,这两个公用管脚的功能是OSC32_IN和OSC32_OUT。 当LSE(低速外部时钟信号)关闭时这两个公用管脚的功能是PC14和PC15。 备用区域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的开启或关闭。关于这个寄存器的用法请参看《STM3210x技术参考手册》。 文档下面有一段话: PC13,PC14和PC15引脚通过电源开关进行供电,因此这三个引脚作为输出引脚时有以下限制: 作为输出脚时只能工作在2MHz模式
[单片机]
<font color='red'>STM32</font> 配置PC13~PC15
基于LabVIEW的STM32调试平台设计
0引言 ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。ARM处理器具有耗电少功能强、1 6位/32位双指令集和合作伙伴众多等特点。本设计采用STM32F103ZET6芯片进行研究。此芯片采用ARM 32位的Cortex-M3 CPU作为内核,芯片带有2通道12位的D/A转换器,12通道DMA控制器能支持外设:定时器、ADC、DAC、USART等,具有112个快速IO端口。同时此芯片具有多达13个通信接口,其中包括USB2.0全速接口 . LabVIEW是一种程序开发环境,采用图标代替文本行创建应用程序的图形化编程语言。LabVIEW是一种图形化的编程语言的开发环境,它广泛地被工业界、学术界和研究
[测试测量]
基于LabVIEW的<font color='red'>STM32</font>调试平台设计
STM32,KEIL,MDK新建一个工程
目前感觉这样的文件结构安排最为合理。首先在选定文件夹下建立如下文件: 然后根据芯片,将相关文件放入对应文件夹中,现在以STM32F103RCT6为例。将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x目录下的stm32f10x.h,system_stm32f10x.h,system_stm32f10x.copy到core文件下,STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的stm32f10x_conf.h复制到core下,其下的stm32f10x
[单片机]
<font color='red'>STM32</font>,KEIL,MDK新建一个工程
STM32的FLASH简单应用
  STM3210XXX内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)。也可以作为闪存存放数据。   主存储块:小容量产品 4K 64位        中容量产品 16K 64位        大容量产品 64K 64位   信息块: 258 64位 闪存模块组织织: 中容量(每页1K)和大容量(每页2K)的参照数据手册。   闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个闪存模块都有一个特定的启始地址。   此次测试目的在于利用闪存存储器存放数据,并不是实现程序烧录功能,所以,只关注存储器的读写,保护功能留待日后再研究。   下面的例子是从0x08008204的地址中
[单片机]
<font color='red'>STM32</font>的FLASH简单应用
基于STM32的BMP图片解码系统
在现代便携式设备的应用过程中,常常需要在系统中显示一些图片,而在各种图片格式中,BMP又是最具代表性的一种图片格式。 BMP是一种与硬件设备无关的图像文件格式,使用非常广泛。它采用位映射存储格式,除了图像深度可选以外,BMP文件的图像深度可选1、4、8及24 bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 典型的BMP图像文件由3部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。 ARM公司作为全球32位低功耗处理器设计领域的领导者,曾经设计过很多高性能低功耗的处理器,广泛应用于各种便携式手
[单片机]
基于<font color='red'>STM32</font>的BMP图片解码系统
RT-Thread学习笔记【stm32】(二):线程的创建中的一些问题
本文作者在实现对RTT的线程创建的过程中,发现了一些问题。 首先,我初始化了三个线程a,b,c。 但是在start 的过程中,我发现了一个神奇的现象,那就是,我只能初始化前两个线程, 第三个线程总是初始化失败。 而后我想到可能是,优先级的设置出现问题,于是我更换各种优先级之后发现,问题并没有得到解决。 再后来,我想到了一个重要的问题,那就是我用的是最小板STM,那么会不会是32的ram不够大,而 我的任务堆栈设置的过大,到导致任务无法初始化。 而后,我降低了任务的堆栈,发现,成功开始了线程。
[单片机]
010_STM32程序移植之_lib库建立
1. 测试环境:STM32C8T6 2. 测试接口: 3.串口使用串口一,波特率9600 单片机引脚------------CH340引脚 VCC--------------------VCC GND-------------------GND PA9--------------------RXD PA10-------------------TXD 1. 建立lib库原因:LIB 的一个主要用途,就是用在工作上的,当你某些 C 文件不希望让别人看到源代码,但 又必须给别人使用的时候,把你这些机密的 C 文件编译成 LIB 是一个最好的方式. 2. 在009程序上修改,并为011_STM32开机管理次数做基础 3. 开始修改程
[单片机]
010_STM32程序移植之_lib库建立
STM32的RTC晶振不起振的可能原因?
最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。。。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。 从上述现象来看,我认为对RTC晶振起振影响最大的因素应该是PCB的布线。但是遇到问题时通常是PCB已做好,甚至已经做了几百块,没有回头路了。于是大家更关注的问题似乎就是“如何补救”了。在网上搜索一下,你就会发现世界是如此美好!每个人的经验和建议都不一样,甚至是完全相反的!这种现象告诉我们,除了PCB布线,对晶振起振影响最大的似乎不是电气参数,而
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved