2023全国电赛E题-目标控制与自动追踪系统-电控与图像处理代码(国一)

本方案在2023年获得全国一等奖,红绿激光主控均采用openmv,能准确识别红绿激光,稳定性强,在初测与复测时均能稳定运行。

以下是控制红色激光的openmv内置代码:


import sensor, image, time, pyb,lcd
from pyb import UART,Pin,Timer,Servo
from pid import PID
pin1 = Pin('P1', Pin.IN, Pin.PULL_DOWN)   ##将P1口作为阈值控制口 OUT_PP PULL_NONE
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QQVGA) # 120*160
sensor.set_vflip(True)
sensor.set_hmirror(True)
sensor.set_auto_exposure(False, \
    exposure_us = int(8200))# 调整曝光
sensor.skip_frames(time=2000)
clock = time.clock()
lcd.init()
uart = UART(3, 115200)# p4为TX,p5为RX

def data_recv(recv_data):
    head = b'\x53\x5A\x48\x59'
    head_ptr = 0
    head_find_flag = 0
    if recv_data:  # 判断是否有数据,根据接收数据类型修改
        for x in range(0, len(recv_data) - 8):  # 寻找帧头
            if recv_data[x:x+4] == head:
                head_ptr=x  # 记录帧头位置
                head_find_flag=1
                break
        if head_find_flag:  # 找到帧头
            recv_length = recv_data[head_ptr + 4]  # 计算数据包的长度
            if recv_data[head_ptr+recv_length-1] == (sum(recv_data[head_ptr:head_ptr+recv_length-1]) % 256):  # 计算校验和
                cmd = recv_data[head_ptr + 5]  # 获取命令字
                if cmd == 0x02:
                    print(recv_data[head_ptr + 6])

def data_send(cmd , data):#传

你可能感兴趣的:(c语言,单片机)