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.mzph.cn/diannao/42340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scikit-learn高级教程:深入理解机器学习算法

目录 引言Scikit-learn概述 什么是Scikit-learnScikit-learn的主要功能安装和导入 数据预处理 数据加载数据清洗特征工程数据归一化与标准化 监督学习算法 线性回归逻辑回归支持向量机决策树与随机森林k-近邻算法朴素贝叶斯 无监督学习算法 K-means聚类层次聚类主成分分析&…

使用Redis进行分布式锁时需要注意哪些问题?Redis分布式锁的常见实现方式有哪些?

使用 Redis 进行分布式锁时需要注意以下几个问题&#xff1a; 锁的过期时间设置&#xff1a;要合理设置锁的过期时间&#xff0c;避免锁因持有进程崩溃或网络延迟等原因无法释放&#xff0c;导致死锁。原子性操作&#xff1a;获取锁和设置过期时间的操作需要保证原子性&#x…

C语言 猜测乒乓球队比赛名单

两个乒乓球队进行比赛&#xff0c;各出三人&#xff0c;甲队为A&#xff0c;B&#xff0c;C三人&#xff0c;乙队为X &#xff0c;Y &#xff0c;Z三人&#xff0c;已抽签决定比赛名单&#xff0c;有人向队员打听比赛的名单&#xff0c;A说他不和X比&#xff0c; C说他不和X&am…

计算机网络性能指标概述:速率、带宽、时延等

在计算机网络中&#xff0c;性能指标是衡量网络效率和质量的重要参数。本文将综合三篇关于计算机网络性能指标的文章&#xff0c;详细介绍速率、带宽、吞吐量、时延、时延带宽积、往返时延&#xff08;RTT&#xff09; 和利用率的概念及其在网络中的应用。 1. 速率&#xff08;…

开源六轴协作机械臂myCobot280实现交互式乘法!让学习充满乐趣

本文经作者Fumitaka Kimizuka 授权我们翻译和转载。 原文链接&#xff1a;myCobotに「頷き」「首振り」「首傾げ」をしてもらう &#x1f916; - みかづきブログ・カスタム 引言 Fumitaka Kimizuka 创造了一个乘法表系统&#xff0c;帮助他的女儿享受学习乘法表的乐趣。她可以…

大语言模型基础

大语言基础 GPT : Improving Language Understanding by Generative Pre-Training 提出背景 从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据&#xff0c;限制了它们在很多领域的应用&#xff0c;收集更…

cs231n作业2 双层神经网络

双层神经网络 我们选用ReLU函数和softmax函数&#xff1a; 步骤&#xff1a; 1、LOSS损失函数&#xff08;前向传播&#xff09;与梯度&#xff08;后向传播&#xff09;计算 Forward: 计算score&#xff0c;再根据score计算loss Backward&#xff1a;分别对W2、b2、W1、b1求…

学懂C#编程:WPF应用开发系列——WPF之ComboBox控件的详细用法

WPF&#xff08;Windows Presentation Foundation&#xff09;中的ComboBox控件是一个下拉列表控件&#xff0c;允许用户从一组预定义的选项中选择一个选项。以下是ComboBox控件的详细用法&#xff0c;并附带示例说明。 ComboBox的基本用法 1. XAML定义&#xff1a; 在XAML中…

multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

直播预告 | VMware大规模迁移实战,HyperMotion助力业务高效迁移

2006年核高基专项启动&#xff0c;2022年国家79号文件要求2027年央国企100%完成信创改造……国家一系列信创改造政策的推动&#xff0c;让服务器虚拟化软件巨头VMware在中国的市场份额迅速缩水。 加之VMware永久授权的取消和部分软件组件销售策略的变更&#xff0c;导致VMware…

开发一个HTTP模块

开发一个HTTP模块 HTTP模块的数据结构ngx_module_t模块的数据结构ngx_http_module_t数据结构ngx_command_s 数据结构 定义一个HTTP模块处理用户请求返回值获取URI和参数方法名URIURL协议版本 获取HTTP头获取HTTP包体 发送响应发送HTTP头发送内存中的字符串作为包体返回一个Hell…

什么时候考虑将mysql数据迁移到ES?

文章目录 对ES的一些疑问问题1:ES相比mysql本身有哪些优势&#xff1f;问题2:哪些场景适合用ES而不是mysql&#xff1f;问题3:mysql逐行扫描&#xff0c;根据过滤条件检查记录中对应字段是否满足要求属于正排索引&#xff0c;根据二叉树索引检索记录的方式属于正排索引还是倒排…

SpringBoot整合DataX数据同步(自动生成job文件)

SpringBoot整合Datax数据同步 文章目录 SpringBoot整合Datax数据同步1.简介设计理念 DataX3.0框架设计DataX3.0核心架构核心模块介绍DataX调度流程 2.DataX3.0插件体系3.数据同步1.编写job的json文件2.进入bin目录下&#xff0c;执行文件 4.SpringBoot整合DataX生成Job文件并执…

生产力工具|VS Code安装及使用指南

一、VS Code介绍 &#xff08;一&#xff09;软件介绍 Visual Studio Code&#xff08;简称VS Code&#xff09;是由Microsoft开发的免费开源代码编辑器&#xff0c;适用于Windows、macOS和Linux操作系统。它支持多种编程语言&#xff0c;如JavaScript、Python、C等&#xff0…

知识社区在线提问小程序模板源码

蓝色的知识问答&#xff0c;问答交流&#xff0c;知识社区&#xff0c;在线提问手机app小程序网页模板。包含&#xff1a;社区主页、提问、我的、绑定手机&#xff0c;实名认证等。 知识社区在线提问小程序模板源码

ubuntu 检查硬盘的通电时长、健康度

ubuntu 检查硬盘的通电时长、健康度 在Ubuntu系统中&#xff0c;检查硬盘的通电时长和健康度通常需要使用SMART&#xff08;Self-Monitoring, Analysis, and Reporting Technology&#xff09;工具。SMART是硬盘制造商内置的一套硬盘保护技术&#xff0c;用于监控硬盘的健康状况…

品质至上!中国星坤连接器的发展之道!

在电子连接技术领域&#xff0c;中国星坤以其卓越的创新能力和对品质的不懈追求&#xff0c;赢得了业界的广泛认可。凭借在高精度连接器设计和制造上的领先地位&#xff0c;星坤不仅获得了多项实用新型专利&#xff0c;更通过一系列国际质量管理体系认证&#xff0c;彰显了其产…

【Qt5.12.9】程序无法显示照片问题(已解决)

问题记录&#xff1a;Qt5.12.9下无法显示照片 我的工程名为03_qpainter&#xff0c;照片cd.png存放在工程目录下的image文件夹中。 /03_qpainter/image/cd.png 因为这是正点原子Linux下Qt书籍中的例程&#xff0c;在通过学习其配套的例程中的项目&#xff0c;发现我的项目少…

【Python】搭建属于自己 AI 机器人

目录 前言 1 准备工作 1.1 环境搭建 1.2 获取 API KEY 2 写代码 2.1 引用库 2.2 创建用户 2.3 创建对话 2.4 输出内容 2.5 调试 2.6 全部代码 2.7 简短的总结 3 优化代码 3.1 规范代码 3.1.1 引用库 3.1.2 创建提示词 3.1.3 创建模型 3.1.4 规范输出&#xf…

在线调试网络接口的免费网站

免费接口网站 GET接口 https://httpbin.org/get https://httpbin.org/ip https://publicobject.com/helloworld.txt POST接口 https://httpbin.org/post 调试网站 Postman需要下载安装&#xff0c;还要登录账号。对于简单测试&#xff0c;麻烦&#xff01; http://coolaf.…