MSPM0G3507——OPENMV给M0传数据(用数据包)互相通信(以循迹为例)

OPENMV端代码

# main.py -- put your code here!
import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_DS, SEARCH_EX
import time
import sensor, displayuart = UART(3, 115200, bits=8, parity=None, stop=1, timeout_char=1000)
roi1 = [(0, 80, 20, 10),(20, 80, 35, 10),(55, 80, 50, 10),(105, 80, 35, 10),(140, 80, 20, 10),]led = pyb.LED(1)
led.on()sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time=2000)
sensor.set_auto_gain(False)
sensor.set_auto_whitebal(True)
GROUND_THRESHOLD = ((0, 16, -62, 123, -19, 40))#def send_five_uchar(c1, c2, c3, c4, c5):#  global uart;# data = ustruct.pack("<BBBBBBBB",#                    0xa3,#                   0xb3,#                  c1, c2, c3, c4, c5,#                0xc3)#uart.write(data);#print(data)while True:data = 0blob1 = Noneblob2 = Noneblob3 = Noneblob4 = Noneblob5 = Noneflag = [0, 0, 0, 0, 0]img = sensor.snapshot().lens_corr(strength=1.7, zoom=1.0)blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])if blob1:flag[0] = 1if blob2:flag[1] = 1if blob3:flag[2] = 1if blob4:flag[3] = 1if blob5:flag[4] = 1time.sleep_ms(10)# send_five_uchar(flag[0], flag[1], flag[2], flag[3], flag[4])data = bytearray([0xa3, 0xb3,flag[0],flag[1],flag[2],flag[3],flag[4],0xc3])  # 打包:帧头1 + 帧头2 + x + y + 帧尾uart.write(data);print(data)for rec in roi1:img.draw_rectangle(rec, color=(255, 0, 0))

M0端代码


#include "ti_msp_dl_config.h"#include "oled.h"
#include "stdio.h"
int openmv_data[8]; //openmv发来的数据包
int a1=5, a2=5, a3=5,a4=5,a5=5;
int b =5;int data_test(int data[])           //判断数据是否合理的函数
{if(data[7]!=0xc3) return 0;  //帧尾//if(data[2]>150)   return 0;  //x坐标上限//if(data[3]>110)   return 0;  //y坐标上限return 1;
}int main(void)
{uint8_t str[64];SYSCFG_DL_init();NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);                 //先清除一下中断,防止直接接入中断NVIC_EnableIRQ(UART_0_INST_INT_IRQN);                       //开启串口的中断OLED_Init();OLED_Fill(0x00);OLED_ShowStr(0,0,(unsigned char*)("MSPM0G3507"),1);while (1){sprintf((char *)str, "%d", a1);OLED_ShowStr(0,4, str,2);sprintf((char *)str, "%d", a2);OLED_ShowStr(16,4, str,2);sprintf((char *)str, "%d", a3);OLED_ShowStr(32,4, str,2);sprintf((char *)str, "%d", a4);OLED_ShowStr(48,4, str,2);sprintf((char *)str, "%d", a5);OLED_ShowStr(64,4, str,2);b=data_test(openmv_data);sprintf((char *)str, "%d", b);OLED_ShowStr(0,6, str,2);}
}void UART_0_INST_IRQHandler(void)
{static int i=0;switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {case DL_UART_MAIN_IIDX_RX:DL_GPIO_togglePins(GPIO_LEDS_PORT,GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);// gEchoData = DL_UART_Main_receiveData(UART_0_INST);//DL_UART_Main_transmitData(UART_0_INST, gEchoData);openmv_data[i++] = DL_UART_Main_receiveData(UART_0_INST);	//接收数据if(openmv_data[0]!=0xa3) i=0;             		//判断第一个帧头if((i==2)&&(openmv_data[1]!=0xb3)) i=0;    		//判断第二个帧头if(i==8)        //代表一组数据传输完毕{i = 0;			if( data_test(openmv_data) )             		//判断数据合理性{a1 = openmv_data[2]; a2 = openmv_data[3]; a3 = openmv_data[4]; a4 = openmv_data[5]; a5 = openmv_data[6]; }}break;default:break;}
}

串口的配置:

 

 

 

 

串口0默认是通过数据线通信的,需要把串口0的跳线帽换一下位置,

用IO引脚的串口0在下一篇文章讲

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474375.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024上半年网络工程师考试《应用技术》试题一

阅读以下说明&#xff0c;回答问题。 【说明】 MPLS基于(1)进行转发&#xff0c;进行MPLS标签交换和报文转发的网络设备称为(2)&#xff0c;构成MPLS域(MPSDomain)。位于MPLS域边缘、连接其他网络的LSR称为(3),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时&#xf…

计算云服务2

第二章 裸金属服务器 什么是裸金属服务器(BMS) 裸金属服务器(Bare Metal Server&#xff0c;BMS)是一款兼具虚拟机弹性和物理机性能的计算类服务为用户以及相关企业提供专属的云上物理服务器&#xff0c;为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算…

【Python】基于动态规划和K聚类的彩色图片压缩算法

引言 当想要压缩一张彩色图像时&#xff0c;彩色图像通常由数百万个颜色值组成&#xff0c;每个颜色值都由红、绿、蓝三个分量组成。因此&#xff0c;如果我们直接对图像的每个像素进行编码&#xff0c;会导致非常大的数据量。为了减少数据量&#xff0c;我们可以尝试减少颜色…

ComfyUI预处理器ControlNet简单介绍与使用(附件工作流)

简介 ControlNet 是一个很强的插件&#xff0c;提供了很多种图片的控制方式&#xff0c;有的可以控制画面的结构&#xff0c;有的可以控制人物的姿势&#xff0c;还有的可以控制图片的画风&#xff0c;这对于提高AI绘画的质量特别有用。接下来就演示几种热门常用的控制方式 1…

基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务16:数据采集/消费/存储

任务描述 “数据生产”的程序启动后&#xff0c;会持续向callLog.csv文件中写入模拟的通话记录。接下来&#xff0c;我们需要将这些实时的数据通过Flume采集到Kafka集群中&#xff0c;然后提供给HBase消费。Flume&#xff1a;是Cloudera提供的一个高可用的&#xff0c;高可靠的…

期末考试结束,老师该如何私发成绩?

随着期末考试的落幕&#xff0c;校园里又恢复了往日的宁静。然而&#xff0c;对于老师们来说&#xff0c;这并不意味着工作的结束&#xff0c;相反&#xff0c;一系列繁琐的任务才刚刚开始。 成绩单的发放&#xff0c;就是其中一项让人头疼的工作。家长们焦急地等待着孩子的考试…

利用pg_rman进行备份与恢复操作

文章目录 pg_rman简介一、安装配置pg_rman二、创建表与用户三、备份与恢复 pg_rman简介 pg_rman 是 PostgreSQL 的在线备份和恢复工具。类似oracle 的 rman pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外&#xff0c;它还为每个数据库集群维护…

kubernetes集群部署:node节点部署和cri-docker运行时安装(四)

安装前准备 同《kubernetes集群部署&#xff1a;环境准备及master节点部署&#xff08;二&#xff09;》 安装cri-docker 在 Kubernetes 1.20 版本之前&#xff0c;Docker 是 Kubernetes 默认的容器运行时。然而&#xff0c;Kubernetes 社区决定在 Kubernetes 1.20 及以后的…

cs231n作业1——SVM

参考文章&#xff1a;cs231n assignment1——SVM SVM 训练阶段&#xff0c;我们的目的是为了得到合适的 &#x1d44a; 和 &#x1d44f; &#xff0c;为实现这一目的&#xff0c;我们需要引进损失函数&#xff0c;然后再通过梯度下降来训练模型。 def svm_loss_naive(W, …

vCenter登录失败报500错误:no healthy upstream

过了个周末登录vCenter的时候提示&#xff1a;HTTP状态500 - 内部服务器错误&#xff1b;重启服务后提示&#xff1a;no healthy upstream。如下图&#xff1a; 看到这个情况&#xff0c;肯定就是部分不服务异常了或者压根就没有启动。至于说因为啥异常还不得而知。想着登录管理…

无人机人员搜救

人员搜救-水域救援 水域搜救&#xff1a;快速水面搜查 物资抛投&#xff1a;救生物资抛投 绳索牵引&#xff1a;牵引救援绳索 领航船艇&#xff1a;水面侦察领航 人员搜救 昼夜搜救&#xff0c;精准定位 水域搜救 经纬 M300 RTK 搭载禅思 H20T 能够满足全天候作业需求&a…

开关电源——调制模式和工作模式

一、开关电源的调制模式 开关电源作为一种广泛应用于电子设备中&#xff0c;用于将一定电压和电流转换为另一种电压和电流的技术&#xff0c;以下是开关电源三种常见的调制模式&#xff1a; 脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09; 脉冲频率调制&#xff…

Transformer神经网络回归预测的MATLAB实现

Transformer神经网络最初是为自然语言处理&#xff08;NLP&#xff09;任务设计的&#xff0c;但它们也可以成功应用于其他序列数据的处理&#xff0c;如时间序列预测和回归任务。 在回归预测中使用Transformer网络通常涉及以下关键步骤和概念&#xff1a; 1. Transformer架…

pycharm无法添加python解释器的解决方法

出现该错误的原因是先前创建过重名的解释器&#xff08;虚拟环境&#xff09;&#xff0c;在pycharm配置中没有完全删除干净。解决方法如下&#xff1a; 首先在文件->设置界面&#xff0c;找到解释器设置。 然后先按图所示点击全部显示虚拟环境&#xff1a; 接着将无法添…

OpenCV教程02:图像处理系统1.0(翻转+形态学+滤波+缩放+旋转)

-------------OpenCV教程集合------------- Python教程99&#xff1a;一起来初识OpenCV&#xff08;一个跨平台的计算机视觉库&#xff09; OpenCV教程01&#xff1a;图像的操作&#xff08;读取显示保存属性获取和修改像素值&#xff09; OpenCV教程02&#xff1a;图像处理…

数字化精益生产系统--QMS质量管理系统

QMS质量管理系统&#xff08;Quality Management System&#xff09;是现代企业管理的关键组成部分&#xff0c;旨在确保产品和服务的质量达到或超过客户需求和期望。 以下是对QMS质量管理系统的功能设计&#xff1a;

运维系列.Nginx配置文件结构功能总结

运维系列 Nginx配置文件结构功能总结 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_285…

塑造卓越企业家IP:多维度视角下的策略解析

在构建和塑造企业家IP的过程中&#xff0c;我们需要从多个维度进行考量&#xff0c;以确保个人品牌能够全面、立体地展现企业家的独特魅力和价值。以下是从不同角度探讨如何做好一个企业家IP的策略。 一、从个人特质出发 深入了解自我&#xff1a;企业家需要清晰地认识到自己的…

Linux 系统管理 03——安装及管理程序

一、rpm 包安装 1、RPM Package Manger 由 Red Hat 公司提供&#xff0c;被众多 Linux 发行版本所采用。 建立统一的数据库文件&#xff0c;详细记录软件包安装、卸载等变化信息&#xff0c;能够自动分析软件包 依赖关系。 2、RPM 软件包 一般命名格式 3、查询已安装的 RP…