openmv与其他单片双向串口通信

2023-05-16

Openmv与其他单片双向串口通信


目的

为了让openmv进行阈值切换或者只运行某一部分代码,因此需要openmv与其他单片建立双向通信进行更改内部参数。

起因

openmv自带接收函数uart.read() 进行接收,但接收回来的数据类型为字符串不能用于数值的比较,需要将字符串打散转化为字符类型,因此我采用强制转换的方法,代码如下

def recive_data():
    global tmp_data
    if uart.any():        #等待接收
      t = uart.read();	  #读入数据
      tmp_data=int(t)     #强制转换为整型变量
      print(tmp_data)

注意:因为将字符串强制转换为整型,此代码只能接收以数字所建立的标志位。其他标志会引起代码报错,这也是代码的一个大bug,希望大家多多指教。


以下收发颜色捕捉的完整代码

import json
import ustruct
import sensor, image, time
from pyb import UART
thresholds = [(30, 50, 40, 90, 35, 80), # red_thresholds
              (30, 60, -80, -20, 0,40), # green_thresholds
              (10, 40, 0, 40, -80, -20)] # blue_thresholds

clock = time.clock()
uart = UART(3,115200)
uart.init(115200, bits=8, parity=None, stop=1)
def sending_data(cx,cy):
    global uart;
    #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
    #data = bytearray(frame)
    data = ustruct.pack("<bbhhhhb",              #格式为俩个字符俩个短整型(2字节)
                       0x2C,                       #帧头1
                       0x12,                       #帧头2
                       int(cx), # up sample by 4    #数据1
                       int(cy), # up sample by 4    #数据2
                       int(c),                      #
                       int(R),
                       0x5B)
    uart.write(data);   #必须要传入一个字节数组
    print(cx)
    print(cy)
    print(c)
    print(R)
def sending_data1(q):
    global uart;
    #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
    #data = bytearray(frame)
    data = ustruct.pack("<bbhhhhb",              #格式为俩个字符俩个短整型(2字节)
                       0x2C,                       #帧头1
                       0x12,                       #帧头2
                       int(cx), # up sample by 4    #数据1
                       int(cy), # up sample by 4    #数据2
                       int(q),                      #
                       int(40),
                       0x5B)
    uart.write(data);   #必须要传入一个字节数组

def recive_data():
    global tmp_data
    if uart.any():
      t = uart.read();
      tmp_data=int(t)
      print(tmp_data)
def compare(shu1,shu2):
   if (shu1 >= shu2):
        return shu1
   else:
        return shu2
def find_max(blobs):    #定义寻找色块面积最大的函数
   max_size=0
   for blob in blobs:
    if blob.pixels() > max_size:
        max_blob=blob
        max_size = blob.pixels()
        return max_blob
c=0
tmp_data=0
while(1):
    if(tmp_data==1):
            sensor.reset()
            sensor.set_pixformat(sensor.RGB565)
            sensor.set_framesize(sensor.QVGA)
            sensor.skip_frames(time = 2000)
            sensor.set_auto_gain(False) # must be turned off for color tracking
            sensor.set_auto_whitebal(False) # must be turned off for color tracking
            sensor.set_vflip(False)
            sensor.set_hmirror(False)
            while(1):
                img = sensor.snapshot().lens_corr(1.8)
                for blob in img.find_blobs(thresholds, pixels_threshold=300, area_threshold=300):
                    blobs=img.find_blobs(thresholds, pixels_threshold=300, area_threshold=300)
                    if blobs:#如果找到了目标颜色
                        max_b = find_max(blobs)
                        img.draw_rectangle(max_b.rect())
                        img.draw_cross(max_b.cx(), max_b.cy())
                        x = max_b.density()
                        if(x<0.6 and x>0.4):
                          c=1
                        elif(x>0.7 and x<0.8):
                          c=2
                        elif(x>0.8):
                          c=3
                        cx = max_b.cx()
                        cy = max_b.cy()
                        R  = max_b.w()
                        sending_data(cx,cy)
                recive_data()
    elif(tmp_data==2):
        sensor.reset()
        sensor.set_pixformat(sensor.RGB565)
        sensor.set_framesize(sensor.QQVGA)
        sensor.skip_frames(time = 2000)
        sensor.set_auto_gain(False) # must be turned off for color tracking
        sensor.set_auto_whitebal(False) # must be turned off for color tracking
        sensor.set_vflip(False)
        sensor.set_hmirror(False)
        while(1):
            img = sensor.snapshot()
            max_size = 0
            for c in img.find_circles(threshold = 4000, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 2, r_max = 100, r_step = 2):
                    area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
                    cx=c.x()
                    cy=c.y()
                    #area为识别到的圆的区域,即圆的外接矩形框
                    statistics = img.get_statistics(roi=area)#像素颜色统计
                    print(statistics)
                    #(0,100,0,120,0,120)是红色的阈值,所以当区域内的众数(也就是最多的颜色),范围在这个阈值内,就说明是红色的圆。
                    #l_mode(),a_mode(),b_mode()是L通道,A通道,B通道的众数。
                    if 5<statistics.l_mode()<20 and 0<statistics.a_mode()<40 and 0<statistics.b_mode()<40:#if the circle is red
                       img.draw_rectangle(area, color = (255, 0, 255))
                       #sending_data(c.x(),c.y())
                       c=1
                       R=0

                       sending_data(cx,cy)
                    elif 20<statistics.l_mode()<40 and -40<statistics.a_mode()<0 and -40<statistics.b_mode()<0:
                        img.draw_rectangle(area, color = (255, 255, 0))
                        c=2
                        R=0

                        sending_data(cx,cy)
                    elif 40<statistics.l_mode()<60 and -20<statistics.a_mode()<40 and -40<statistics.b_mode()<50:
                        img.draw_rectangle(area, color = (255, 255, 0))
                        c=3
                        R=0

                        sending_data(cx,cy)
            recive_data()
    else :
            recive_data()

后续

其他单片机的接收函数只需要配置串口中断,然后在相应串口中断服务函数里面写好相应的解析函数即可,具体不在详解。发送函数只需发送0-9数字即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openmv与其他单片双向串口通信 的相关文章

  • openmv是双串口

    openmv是双串口
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c
  • Openmv+STM32F103C8T6视觉巡线小车

    Openmv巡线 机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码 xff1a book openmv cc project follow lines html 根据官网视频及教程将源码注入openmv中 小车巡的是黑线
  • openmv中模块解析

    模块解析 1 sensor摄像头模块 xff1a 包含了感光芯片与图像预处理的各项操作 sensor reset 重置并初始化OpenMV sensor set pixformat sensor RGB565 选择颜色空间与像素格式RGB5
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物
  • 【openmv专题】串口通信

    这篇文章主要讲述openmv串口通信过程中会出现错位 xff0c 因缓存空间不足带来的串口报错问题 xff0c 直接进入正题 xff1a 串口通信有同步和异步之分 xff0c 而openmv用的是异步通信 xff0c 需要有缓存区 xff0
  • 2019电赛--无人机题目OpenMV总结

    此文章在我的博客链接 xff1a https sublimerui top archives d508d500 html NOTES xff1a 上一篇相关博文 xff0c 准备阶段OpenMV学习笔记链接 xff1a https blog
  • Openmv色块追踪

    Openmv 拿到后第一次进行开发 xff08 颜色追踪 xff09 Openmv本身是具有很多的内置函数的 xff0c 基本都是别人给我们写好了 xff0c 需要我们自己去调用 xff0c 并给函数传递参数以实现我们需要的效果 但是很多初
  • Openmv学习day2——AprilTag

    仅作为个人学习 xff0c 原文地址 xff1a 链接 link AprilTag的简介 AprilTag是一个视觉基准系统 xff0c 可用于各种任务 xff0c 包括AR xff0c 机器人和相机校准 这个tag可以直接用打印机打印出来
  • 【毕业设计】基于STM32及OpenMV的云台追踪装置

    目录 修改记录1 摘 要2 整体功能分析3 硬件选型3 1 OpenMV4 Cam H73 2 STM32F103ZET63 3 DS3120舵机3 4 LED补光板3 5 供电及稳压3 6 硬件连接 4 软件功能实现4 1 OpenMV部
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • 使用OPENMV控制云台自动追踪Apriltag,测出与Apriltag距离并且通过串口发送给单片机。

    使用openmv控制云台自动跟踪Apriltag xff0c 并且将openmv与Apriltag距离通过串口发送到单片机 如果有openmv的同学直接将main py和pid py复制到flash中就可以了 注意 xff01 Aprilt
  • OpenMV H7也就是OpenMV4来啦 最新

    17年开始做过了四个版本的openmv 可谓是电赛好帮手 开发了两年的openmv xff0c 我的目的就是让openmv变得便宜 目前官方的第四代openmv还在众筹中 xff1a https www kickstarter com pr
  • OpenMV与Arduino通信—串口

    文章目录 96 Arduino 96 的串口函数接收函数 96 Serial read 96 检测串口 96 Serial available 96 串口通信例程 96 OpenMV 96 代码 96 Arduino 96 代码 所有要进行
  • 通过Python调用OpenMV识别小球获取坐标

    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块 xff0c 目标是成为机器视觉界的 Arduino 它成本低易拓展 xff0c 开发环境友好 xff0c 除了用于图像处理外 xff0c 还可以用Python调用其硬件资
  • 【OpenMv小车】OpenMv追小球的小车之pid调用

    pid py gt gt https github com wagnerc4 flight controller blob master pid py openmv 官网 xff1a http book openmv cc project
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77

随机推荐

  • 解决mac安装完torch_geometric,import的时候报错的问题。

    问题描述 使用torch geometric官方的命令安装好了torch geometric xff0c 安装的过程非常丝滑流畅 xff0c 但是安装好了import的时候就报错OSerror 注意事项 不要用他生成的命令安装 xff1a
  • CXF内容总结

    CXF 61 XFire webservice框架 43 Celtrix ESB框架 http cxf apache org 内置jettyweb服务器 服务器端 xff1a 1 开发webservice接口 xff0c 要用 64 web
  • Could NOT find UV (missing: UV_LIBRARY UV_INCLUDE_DIR)

    cd var tmp git clone https github com libuv libuv git cd libuv autogen sh configure make make install 注 xff1a 下不来直接去网页下载
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模
  • 【STM32】串口数据帧接收与分析处理算法

    基于对串口FIFO的通信数据帧进行接收和分析处理 xff08 关于串口FIFO使用可以参见作者另一篇博文 xff09 算法流程 xff1a 串口中断函数接收数据到FIFO 根据通信协议GetInterUARTMessage 函数对数据帧进行
  • 【STM32】HAL库开发教程(三)—定时器使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中定时器的使用 一 开发步骤 1 STM32CubeMX配置 在左侧引脚配置处勾选TIM2进行配置在TIM2模式
  • 直立车想节能——2020全国大学生智能车车竞赛经验记录之我想要直立(平衡小车串级pid调参经验)

    平衡车我相信很多电赛测控的入门的玩家都也玩过 xff0c 很多朋友们也都听说过平衡小车之家这家淘宝店铺 而串级PID也是一个经典且牛批的方案而广为人知 xff0c 所以在这样的比赛结束之后作为俩套方案都试过的我 xff0c 谈一谈平衡小车之
  • 慎用apt autoremove

    1 remove 卸载软件包 2 autoremove 卸载所有自动安装且不再使用的软件包 3 purge 卸载并清除软件包的配置 平时经常会卸载或删除一些东西 xff0c 系统也会友好提示你进行自动删除一些相关的文件 xff0c 但是有可
  • 推送镜像到DockerHub报无访问权限

    推送镜像到DockerHub 我们推送镜像到DockerHub时会遇到没有访问资源权限的问题 requested access to the resource is deni ed 这是因为dockerhub不知道是谁推送的镜像 xff0c
  • mysql5主从配置教程

    mysql5主从配置 同学们会有mysql主从配置的需求吗 xff1f 这里我给大家讲一下mysql5 7的主从配置教程 我们通过docker来安装mysql 这样会方便很多 拉取镜像 docker pull docker pull mys
  • 解决ubuntu下kazam录制视频无法在windows播放问题

    记录贴 Kazam是ubuntu下一个功能性截屏软件 xff0c 但是在使用的过程中 xff0c 发现Kazam录屏的视频能够在QQ发送 xff0c 但是只能播放 xff0c 不能下载 xff0c window下也不能播放 查找了一些资料发
  • 深入理解以太网PHY自协商及调试心得

    最近调某个phy芯片 xff0c 心态爆炸 xff0c 不过好歹最后有个好结果 自协商基本原理 自动协商模式是端口根据另一端设备的连接速度和双工模式 xff0c 自动把它的速度调节到最高的公共水平 xff0c 即线路两端能具有的最快速度和双
  • 平衡小车的资料

    根据网上平衡小车之家的资料引脚需要用 xff1a LED PA12 Key PA15 OLED RST Clr PC13 RS Clr PB4 SCLK Clr PC15 SDIN Clr PC14 ADC PA4 TIM3 PB0 PB1
  • 注解

    好处 把问题暴露在编译时期 xff1b 增强程序健壮性 xff1b 可以让JVM检查除了语法错误以外的其他的自定义检查 xff1b 位置 可以加到包 xff0c 类 xff0c 方法 xff0c 字段 xff0c 局部变量等位置 xff1b
  • 【知识图谱】课程笔记1---知识图谱简介

    1 知识图谱 知识图谱是一种基于图的数据结构 由节点 point 和边 Edge 组成 每个节点表示一个 实体 每条边为实体与实体之间的 关系 知识图谱本质上是语义网络 通过这种先验的知识网络 xff0c 让机器像人类一样可以联想 推理 它
  • 特征检测+SIFT点匹配+PNP位姿确定

    SIFT特征检测 43 FLANN点匹配 43 PNP位姿确定 软件环境 windows 10 vs2013 opencv3 1 0 43 opencv3 1 0 contrib 基本原理 1 SIFT 特征点检测 43 匹配 2 PNP位
  • STM32CUBEIDE(MX续)学习笔记(七)——FREERTOS+DMA+队列+循环数组方式进行串口收发

    一 收发主要逻辑 1 接收 xff1a 利用DMA和空闲中断一次接收一帧的不定长数据 xff0c 接收到数据后 暂停 xff08 之后分析为何要暂停而不是停止 xff09 DMA xff0c 快速利用结构体存储接收到数据的地址和长度 xff
  • C语言 malloc() + 结构体指针定义结构体变量

    之前在学习链表的过程中 xff0c 笔者认为新节点必须如下定义 xff1a struct Node p struct Node int val p pNext int main Node Node1 Node Node2 Node Node
  • Windows JDK8 安装

    Windows JDK8 安装 准备步骤安装完成 准备 准备jdk8 官网下载 xff1a https www oracle com java technologies javase javase jdk8 downloads html 根
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c