OPENMV脱机调阈值

用到了7个按钮,第一个用来选择是否进入调阈值模式。

后6个用来调整OPENMV阈值编辑器的6个滑动条

OPENMV代码

import sensor, image, time, pyb,math, display
from pyb import UARTsensor.reset()
sensor.set_framesize(sensor.QQVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.skip_frames(time = 10)
clock = time.clock()
threshold_index = 0 
red=[24, 69, 16, 127, -128, 127]
#
uart = UART(3, 9600)lcd = display.SPIDisplay()while True:# 检查是否有数据可读if uart.any():# 读取数据data = uart.read()# 检查数据是否符合要求if len(data) >= 3 and data[0] == 0xa1 and data[1] == 0xb2 and data[-1] == 0xc3:# 打印接收到的数据包print("接收到的数据包:", list(data))if data[2]==0: thr = 0;if data[2]==1: thr = 1;if thr == 1:red[0]=data[3]red[1]=data[4]red[2]=data[5]-128red[3]=data[6]-128red[4]=data[7]-128red[5]=data[8]-128for i in range(100):clock.tick()img = sensor.snapshot()  img.binary([red])lcd.write(img)  print("阈值",list(red))print("data",data[8])if thr == 0:   clock.tick()img = sensor.snapshot()# 拍照并显示图像。for blob in img.find_blobs([red],pixels_threshold=200,area_threshold=200):#循环blobsimg.draw_rectangle(blob.rect())#返回这个色块的外框lcd.write(img)  

 

 MSPM0G3507代码


#include "ti_msp_dl_config.h"#include "oled.h"
#include "stdio.h"
uint8_t Serial_TxPacket[7];				//定义发送数据包数组,数据包格式:aa bb 01 02 03 04 ccint openmv_data[5]; //openmv发来的数据包//给OPENMV脱机调阈值发的数据
int a1=0;
int a2=0;
int a3=0;
int a4=0;
int a5=0;
int a6=0;
int a7=0;/*** 函    数:串口发送一个字节* 参    数:Byte 要发送的一个字节* 返 回 值:无*/
void Serial_SendByte(uint8_t Byte)
{DL_UART_Main_transmitDataBlocking(UART_1_INST  ,Byte);	//将字节数据写入数据寄存器,写入后USART自动生成时序波形
}/*** 函    数:串口发送一个数组* 参    数:Array 要发送数组的首地址* 参    数:Length 要发送数组的长度* 返 回 值:无*/
void Serial_SendArray(uint8_t *Array, uint16_t Length)
{uint16_t i;for (i = 0; i < Length; i ++)		//遍历数组{Serial_SendByte(Array[i]);		//依次调用Serial_SendByte发送每个字节数据}
}/*** 函    数:串口发送数据包* 参    数:无* 返 回 值:无* 说    明:调用此函数后,Serial_TxPacket数组的内容将加上包头(FF)包尾(FE)后,作为数据包发送出去*/
void Serial_SendPacket(void)
{Serial_SendByte(0xa1);    
Serial_SendByte(0xb2);        
Serial_SendArray(Serial_TxPacket, 7);
Serial_SendByte(0xc3);}int data_test(int data[])           //判断数据是否合理的函数
{if(data[4]!=0xc3) return 0;  //帧尾//if(data[2]>150)   return 0;  //x坐标上限//if(data[3]>110)   return 0;  //y坐标上限return 1;
}void delay_ms(uint32_t ms)
{while(ms--){delay_cycles(CPUCLK_FREQ/2500);}
}int main(void)
{SYSCFG_DL_init();OLED_Init(I2C_OLED_INST     );//初始化OLEDOLED_Clear(I2C_OLED_INST     );//OLED清屏// NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);                 //先清除一下中断,防止直接接入中断// NVIC_EnableIRQ(UART_0_INST_INT_IRQN);                       //开启串口的中断//NVIC_EnableIRQ(UART_1_INST_INT_IRQN);                           //允许串口1的中断,OPENMV中断while (1){OLED_ShowFloat(I2C_OLED_INST     , 0,0, a1, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,1, a2, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,2, a3, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,3, a4, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,4, a5, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,5, a6, 3, 1, 8);OLED_ShowFloat(I2C_OLED_INST     , 0,6, a7, 3, 1, 8);//第一个按键用来判断是否进入调阈值模式if (DL_GPIO_readPins(KEY1_PORT_PORT     ,KEY1_PORT_KET1_PIN_PIN )==KEY1_PORT_KET1_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY1_PORT_PORT     , KEY1_PORT_KET1_PIN_PIN )==KEY1_PORT_KET1_PIN_PIN)       //一直按下{}//松手之后a1++;           //a1为1则进入调阈值模式,a1为0则退出调阈值模式if(a1>1){a1=0;}}     //第二个按键调第一个阈值if (DL_GPIO_readPins(KEY2_PORT_PORT     ,KEY2_PORT_KEY2_PIN_PIN )==KEY2_PORT_KEY2_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY2_PORT_PORT     , KEY2_PORT_KEY2_PIN_PIN )==KEY2_PORT_KEY2_PIN_PIN)       //一直按下{}a2=a2+4;if(a2>100){a2=0;}}     //第三个按键调第二个阈值if (DL_GPIO_readPins(KEY3_PORT_PORT     ,KEY3_PORT_KEY3_PIN_PIN )==KEY3_PORT_KEY3_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY3_PORT_PORT     , KEY3_PORT_KEY3_PIN_PIN )==KEY3_PORT_KEY3_PIN_PIN)       //一直按下{}a3=a3+4;if(a3>100){a3=0;}}     //第四个按键调第三个阈值if (DL_GPIO_readPins(KEY4_PORT_PORT     ,KEY4_PORT_KEY4_PIN_PIN )==KEY4_PORT_KEY4_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY4_PORT_PORT     , KEY4_PORT_KEY4_PIN_PIN )==KEY4_PORT_KEY4_PIN_PIN)       //一直按下{}a4=a4+4;if(a4>=252){a4=0;}}//第五个按键调第四个阈值if (DL_GPIO_readPins(KEY5_PORT_PORT     ,KEY5_PORT_KEY5_PIN_PIN )==KEY5_PORT_KEY5_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY5_PORT_PORT     , KEY5_PORT_KEY5_PIN_PIN )==KEY5_PORT_KEY5_PIN_PIN)       //一直按下{}a5=a5+4;if(a5>=252){a5=0;}}//第六个按键调第五 个阈值if (DL_GPIO_readPins(KEY6_PORT_PORT     ,KEY6_PORT_KEY6_PIN_PIN )==KEY6_PORT_KEY6_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY6_PORT_PORT     , KEY6_PORT_KEY6_PIN_PIN )==KEY6_PORT_KEY6_PIN_PIN)       //一直按下{}a6=a6+4;if(a6>=252){a6=0;}}  //第七个按键调第六个阈值if (DL_GPIO_readPins(KEY7_PORT_PORT     ,KEY7_PORT_KEY7_PIN_PIN )==KEY7_PORT_KEY7_PIN_PIN)       //按下为高电平{while(DL_GPIO_readPins(KEY7_PORT_PORT     , KEY7_PORT_KEY7_PIN_PIN )==KEY7_PORT_KEY7_PIN_PIN)       //一直按下{}a7=a7+4;if(a7>=252){a7=0;}}  Serial_TxPacket[0] =a1;Serial_TxPacket[1] =a2;Serial_TxPacket[2] =a3;Serial_TxPacket[3] =a4;Serial_TxPacket[4] =a5;Serial_TxPacket[5] =a6;Serial_TxPacket[6] =a7;Serial_SendPacket();        //将帧头帧尾和中间的7个数据都发过去}
}

 

 

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

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

相关文章

【数学建模】——【python】实现【最短路径】【最小生成树】【复杂网络分析】

目录 1. 最短路径问题 - 绘制城市间旅行最短路径图 题目描述&#xff1a; 要求&#xff1a; 示例数据&#xff1a; python 代码实现 实现思想&#xff1a; 要点&#xff1a; 2. 最小生成树问题 - Kruskal算法绘制MST 题目描述&#xff1a; 要求&#xff1a; 示例数据…

【Linux】模拟实现简易shell命令行:基于进程创建、进程等待、进程替换等知识的练习

程序功能&#xff1a;模拟实现一个自己的shell执行命令行。 涉及知识&#xff1a;字符串输入及操作函数、子进程创建、进程等待、进程替换、环境变量及获取、添加环境变量的函数 额外需要了解的功能函数&#xff1a;chdir&#xff08;char* path&#xff09;函数——改变当前…

PostgreSQL入门与进阶学习,体系化的SQL知识,完成终极目标高可用与容灾,性能优化与架构设计,以及安全策略

​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 概述基础篇初级篇进阶篇…

安装 GCC 编译器和开发工具

安装 GCC 编译器和开发工具 更新软件包管理器 在 CentOS 终端中&#xff0c;首先更新软件包管理器&#xff1a; sudo yum update -y安装 GCC 编译器和其他开发工具 运行以下命令安装 GCC 编译器和其他必要的开发工具&#xff1a; sudo yum groupinstall -y "Development T…

通过不同方式在 Vue 3 中传递路由参数

如何通过不同方式在 Vue 3 中传递路由参数&#xff0c;并在组件中使用 defineProps 或其他组合式 API 获取这些参数&#xff1f; 1. 通过 path 参数传递 最常见的方式&#xff0c;通过在路由路径中定义动态参数&#xff0c;并在路由配置中设置 props: true&#xff0c;将参数…

S5730举例

校园网络拓扑和设备 大学校园网络通常使用多层级结构&#xff0c;核心是承载所有交换机的中心点&#xff0c;而分支则连接到核心以支持更广泛的网络覆盖。华为的S5730交换机通常用于大型企业和校园网络中&#xff0c;提供高性能和可靠性。 STP (Spanning Tree Protocol) 作用&…

事务、函数和索引

目录 什么是事务&#xff1f; 事务的ACID原则&#xff1a; 事务的操作 事务的原子性、一致性、持久性 事务的隔离性 什么是事务的隔离性? 用什么方法实现事务的隔离性&#xff1f; MySQL中的锁 锁分类&#xff1a; 事务的隔离级别 事务并发问题 InnoDB的MVCC MVCC…

【C++】红黑树的应用(封装map和set)

✨ 青山一道同云雨&#xff0c;明月何曾是两乡 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &…

Unity UGUI 实战学习笔记(3)

仅作学习&#xff0c;不做任何商业用途 不是源码&#xff0c;不是源码! 是我通过"照虎画猫"写的&#xff0c;可能有些小修改 不提供素材&#xff0c;所以应该不算是盗版资源&#xff0c;侵权删 拼UI 提示面板的逻辑 using System.Collections; using System.Col…

大数据——Hive原理

摘要 Apache Hive 是一个基于 Hadoop 分布式文件系统 (HDFS) 的数据仓库软件项目&#xff0c;专为存储和处理大规模数据集而设计。它提供类似 SQL 的查询语言 HiveQL&#xff0c;使用户能够轻松编写复杂的查询和分析任务&#xff0c;而无需深入了解 Hadoop 的底层实现。 Hive…

Firefox扩展程序和Java程序通信

实现Firefox扩展程序&#xff0c;和Java RMI Client端进行通信。 在Firefox工具栏注册按钮&#xff0c;点击按钮后弹出Popup.html页面&#xff0c;引用Popup.js脚本&#xff0c;通过脚本向Java RMI client发送消息&#xff0c;Java RMI Client接收消息后转发到Java RMI Server…

python写的登陆邮箱 接收邮件

import time from datetime import datetime, timedelta from mail import get_mails, server_login from notion import sync_bills from data_handler import alipay_data, wechat_data server server_login() if server ! -1: print(“尝试获取邮件”) waiting_time da…

大模型-鲁棒性总结-2024-7-28

文章目录 1.大语言模型的鲁棒性概述2.自然噪声的鲁棒性2.1.真实标签任务的性能2.2.开放式任务的表现 3.评估分布外&#xff08;OOD&#xff09;任务的弹性3.1.OOD检测3.2.OOD泛化 4.对抗鲁棒性5.提示的分布假设6.幻觉检测7.遗忘鲁棒性技术评估8.数学推理任务中的鲁棒性评估9.代…

MyBatis的入门操作--打印日志和增删改查(单表静态)

下面介绍注解和xml实现crud的操作 目录 一、日志打印和参数传递 1.1.使用mybatis打印日志 1.2.参数传递细节 二、crud&#xff08;注解实现&#xff09; 2.1.增(insert) 2.2.删(delete) 和 (update) 2.3.查(select) 三、crud&#xff08;xml实现&#xff09; 3.1.准备…

【算法】浅析遗传算法【附完整示例】

遗传算法&#xff1a;模拟自然选择&#xff0c;优化问题求解 1. 引言 在计算机科学和优化问题求解中&#xff0c;遗传算法是一种借鉴生物进化理论的启发式搜索算法。它模拟自然选择和遗传机制&#xff0c;通过迭代搜索最优解。本文将介绍遗传算法的原理、步骤及其在实际应用中…

中国居民膳食指南书籍知识点汇总

人如果吃不好&#xff0c;就不能好好思考&#xff0c;好好爱&#xff0c;好好休息。——维吉尼亚伍儿夫 文章目录 书籍简介饮食准则推荐膳食图示 准则一&#xff1a;食物多样&#xff0c;合理搭配合理搭配的方法平衡膳食的科学原理均衡饮食的作用食物功效&#xff08;有科学实验…

LeeCode Practice Journal | Day25_Backtracking04

491. 非递减子序列 题目&#xff1a;491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;代码随想录 (programmercarl.com) solution public class Solution {public List<IList<int>> results new List<IList<int>>();pu…

力扣224【基本计算器】

给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xff0c;比如 eval() 。 1 < s.length < 3 * 105 s 由数字、‘’、‘-’、‘(’、‘)’、和 ’ ’ 组成 s 表示一个有效的…

02、爬虫数据解析-Re解析

数据解析的目的是不拿到页面的全部内容&#xff0c;只拿到部分我们想要的内容内容。 Re解析就是正则解析&#xff0c;效率高准确性高。学习本节内容前需要学会基础的正则表达式。 一、正则匹配规则 1、常用元字符 . 匹配除换行符以外的字符 \w 匹配字母或数字或下划…

基于Python的房产数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录&#xff1a; 目录 详细视频演示 设计文档详细参考 技术开发的参考技术栈&#xff01; 2.1 Python语言 2.2 Django框架 2.3 MySQL 2.4 Hadoop介绍 2.5 Scrapy介绍 4.2 系统结构设计 4.3 数据库设计 界面设计与功能实现 5.1系统登录注册实现 5.2管理员模块…