赞
踩
用到了7个按钮,第一个用来选择是否进入调阈值模式。
后6个用来调整OPENMV阈值编辑器的6个滑动条
OPENMV代码
- import sensor, image, time, pyb,math, display
- from pyb import UART
-
- sensor.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]-128
- red[3]=data[6]-128
- red[4]=data[7]-128
- red[5]=data[8]-128
-
- for 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):#循环blobs
- img.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 cc
-
-
- int 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 );//初始化OLED
- OLED_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个数据都发过去
-
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。