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

news2024/10/6 1:31:59

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, display

uart = 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 = 0
   blob1 = None
   blob2 = None
   blob3 = None
   blob4 = None
   blob5 = None
   flag = [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] = 1
   if blob2:
      flag[1] = 1
   if blob3:
      flag[2] = 1
   if blob4:
      flag[3] = 1
   if blob5:
      flag[4] = 1
   time.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.coloradmin.cn/o/1903745.html

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

相关文章

Pogo-DroneCANPWM模块:可实现DroneCAN转PWM,DroneCAN转dshot,DroneCAN转bdshot

关键词&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;PWM&#xff0c;dshot&#xff0c;bdshot&#xff0c;DroneCANPWM&#xff0c;电调ESC&#xff0c;DroneCAN&#xff0c;UAVCAN&#xff0c;飞控&#xff0c;无人机&#xff0c;UAV Keywords&#xff1a;Ardupilot…

Xilinx FPGA:vivado串口输入输出控制fifo中的数据

一、实验要求 实现同步FIFO回环测试&#xff0c;通过串口产生数据&#xff0c;写入到FIFO内部&#xff0c;当检测到按键信号到来&#xff0c;将FIFO里面的数据依次读出。 二、信号流向图 三、状态转换图 四、程序设计 &#xff08;1&#xff09;按键消抖模块 timescale 1ns…

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前&#xff0c;所接触的第一个程序&#xff0c;绝大多数都是&#xff1a; print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码&#xff0c;并对第二行代码进行修改&#xff0c;如下&#xff1a; message "…

Github 2024-07-07php开源项目日报 Top9

根据Github Trendings的统计,今日(2024-07-07统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目9Blade项目2JavaScript项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数…

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

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

LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 C写法 三段逆置 思路: 三段逆置方法:先逆置前n-k个 再逆置后k个 最后整体逆置 由示例1得&#xff0c;需要先逆置1,2,3,4 再逆置5,6,7&#xff0c;最后前n-k个与后k个逆置 代码 void reverse(int*num, int left, int right) //逆置函数 { while(left …

XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览

文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法&#xff0c; 我们可以把一个文件直接转成LuckySheet需要的json字符串&#xff0c; 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…

mac|idea导入通义灵码插件

官方教程&#xff1a;通义灵码下载安装指南_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 下载插件&#xff1a; ⇩ TONGYI Lingma - JetBrains 结果如下&#xff1a; 选择apply、ok&#xff0c;会出现弹窗&#xff0c;点击登录 可以实现&#xff1a;生成单元测…

SQL Server特性

一、创建表 在sql server中使用create table来创建新表。 create table Customers( id int primary key identity(1,1), name varchar(5) ) 该表名为Customers其中包含了2个字段&#xff0c;分别为id&#xff08;主键&#xff09;以及name。 1、数据类型 整数类型&#xff…

【TB作品】51单片机 Proteus仿真 00002仿真-智能台灯色调倒计时光强

实验报告&#xff1a;基于51单片机的智能台灯控制系统 背景 本实验旨在设计一个基于51单片机的智能台灯控制系统&#xff0c;该系统可以通过按键进行手动控制&#xff0c;并能根据环境光强度自动调节台灯亮度。此外&#xff0c;系统还具备倒计时关灯功能。 器件连接 51单片…

latex英文转中文word,及一些latex相关工具分享

前言&#xff1a;想要转换latex生成的英文pdf文件为中文word文件 一、主要步骤 1、文字翻译&#xff1a;直接使用谷歌翻译等辅助将英文翻译成中文即可&#xff1b; 2、图片&#xff1a; 使用latex时一般保存的.png&#xff0c;.bmp格式图片可以直接插入word, 但是.eps或者 .p…

期末成绩发布方式

期末考试结束后&#xff0c;成绩单的发放总是让老师们头疼不已。想象一下&#xff0c;每个学生的成绩都需要老师一个个私信给家长&#xff0c;不仅耗时耗力&#xff0c;而且极易出错。 在传统的成绩单发放方式中&#xff0c;老师往往需要通过电子邮件、短信或者微信等方式&…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

高考志愿填报千万要注意这四点

在高考志愿填报过程中&#xff0c;确实有很多需要留心的点。我为你总结了四个关键点&#xff0c;希望能帮助你顺利完成志愿填报&#xff1a; 1、学校提供的支持 学校作为学生志愿填报咨询服务的主阵地&#xff0c;应提供体系化和制度化的支持。包括及时关注并传达政策动向和相…

ubuntu下运行程序时提示缺库问题的有效解决方法

目录 一、问题现象二、解决方式三、总结 一、问题现象 当我们平时在ubuntu上运行一个程序时时长会遇到如下情况&#xff0c;含义为本机缺少执行程序需要的库 这时候我们可能会根据缺少的库使用apt install 库名的模糊名字 进行安装&#xff0c;然后再去运行&#xff0c;此时可…

vue3+antd 实现文件夹目录右键菜单功能

原本的目录结构&#xff1a; 右键菜单&#xff1a; 点击菜单以后会触发回调&#xff1a; 完整的前端代码&#xff1a; <template><a-directory-treev-model:expandedKeys"expandedKeys"v-model:selectedKeys"selectedKeys"multipleshow-li…

C语言下结构体、共用体、枚举类型的讲解

主要内容 结构体结构体数组结构体指针包含结构体的结构链表链表相关操作共用体枚举类型 结构体 结构体的类型的概念 结构体实现步骤 结构体变量的声明 struct struct 结构体名{ 数据类型 成员名1; 数据类型 成员名2; ..…

【Unity】unity学习扫盲知识点

1、建议检查下SystemInfo的引用。这个是什么 Unity的SystemInfo类提供了一种获取关于当前硬件和操作系统的信息的方法。这包括设备类型&#xff0c;操作系统&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;支持的Unity特性等。使用SystemInfo类非常简单。它的…

1999-2022年企业持续绿色创新水平数据

企业持续绿色创新水平数据为研究者提供了评估企业在绿色技术领域创新持续性和能力的重要视角。以下是对企业持续绿色创新水平数据的介绍&#xff1a; 数据简介 定义&#xff1a;企业持续绿色创新水平反映了企业在一定时期内绿色专利申请的持续性和创新能力。计算方法&#xf…

【Linux】进程的概念 + 查看进程

前言&#xff1a; 在前面我们学习了Liunx的基本指令和权限相关知识&#xff0c;还有基本工具的使用&#xff0c;有了以上的基础知识我们本章将正式接触Linux操作系统。 目录 1.冯诺依曼体系结构1.1 内存存在的意义1.2 程序加载到内存的含义1.3 程序的预加载&#xff1a; 2 .认识…