169行之后有点小bug,关于一点串口发协议进行多次识别,求助一下大佬(标题写不了呢么长,具体一点在内容里面)
-
我想着是 识别二维码 当识别到的时候将一个数组的第三位改变,判断 改变了之后跳出循环,当没识别到的时候numbb一直自减,但是现在没有识别到的时候他numbb会一直减到0才停止,并且在numbb自减的时候摄像头会一直卡住在某一帧的图像(或者有没有什么办法能 又避免卡住摄像头的同时 又能在没有识别到东西的时候进行再次识别,{功能:识别到了之后跳出,没识别到的时候可以转动摄像头调整角度同时识别,规定时间内还是没有识别到时候跳出防止程序卡死})
import sensor, image,time,lcd from pyb import UART,Timer,LED sensor.reset()#初始化摄像头 print("初始化摄像头成功") sensor.set_pixformat(sensor.RGB565)#设置格式,RGB565为彩图 print("初始化格式成功") sensor.set_framesize(sensor.QVGA)#设置图像像素大小 print("初始化图像类型成功") #sensor.skip_frames(time = 1000)#里面如果是数字就是跳过几帧,如果是time=1000就是跳过1s的帧数 print("初始化跳帧成功") sensor.set_auto_whitebal(False)#关闭白平衡 print("关闭白平衡") sensor.set_auto_gain(False)#关闭自动增益 print("关闭自动增益") clock = time.clock()#记录帧数 print("记录帧数") lcd.init()#初始化附带的lcd屏幕 print("初始化lcd屏幕成功") uart = UART(3,115200,8,None,1)#初始化串口 print("初始化串口成功") #初始化 #=================================================================================================== #交通灯的阈值(经过曝光处理) red_threshold_01 = (29, 100, 38, 96, 20, 63) green_threshold_01 = (29, 91, -128, -18, 19, 46) yellow_threshold_01 = (34, 100, -31, 42, 48, 84) green_yuzhi=(28, 94, -128, -16, 2, 46) #阈值 #=================================================================================================== data = []#一个列表 runData = [0x55,0x02,0x92,0x03,0x02,0x00,0x00,0xBB] if_Check = [0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xBB] #返回的协议 #=================================================================================================== #串口发送函数 def Send(src,length): for i in range(length): uart.writechar(src[i]) #串口发送函数 #=================================================================================================== def find_max(blobs): #定义寻找色块面积最大的函数 max_size=0 for blob in blobs: if blob.pixels() > max_size: max_blob=blob max_size = blob.pixels() return max_blob #寻找面积最大的色块(暂时没用) #=================================================================================================== def ceshi(): print("ceshi key") uart.writechar(0x55) #测试用 #=================================================================================================== #交通灯的核对 def traffic_Check(): #numbb=2000 sensor.set_auto_exposure(False, 800)#这里设置曝光时间 #while(numbb!=0): #print (numbb) #if(if_Check[3]!=0x00): #if_Check.insert(3,0x00) #numbb=0 #break blobs = img.find_blobs([red_threshold_01], merge=True, margin=2); #红色物块 blobs1 = img.find_blobs([green_yuzhi], merge=True, margin=2); #绿色物块 blobs2 = img.find_blobs([yellow_threshold_01], merge=True, margin=2); #蓝色物块 if blobs1: #如果找到了目标lv色 print("绿色") if_Check.insert(3,0x02) uart.writechar(0x55) uart.writechar(0x02) uart.writechar(0x02) uart.writechar(0x03) uart.writechar(0x00) uart.writechar(0x00) uart.writechar(0x04) uart.writechar(0xBB) elif blobs2: print("huang色") if_Check.insert(3,0x03) uart.writechar(0x55) uart.writechar(0x02) uart.writechar(0x02) uart.writechar(0x02) uart.writechar(0x00) uart.writechar(0x00) uart.writechar(0x05) uart.writechar(0xBB) elif blobs: #如果找到了目标红色 print("hong色") if_Check.insert(3,0x01) uart.writechar(0x55) uart.writechar(0x02) uart.writechar(0x02) uart.writechar(0x01) uart.writechar(0x00) uart.writechar(0x00) uart.writechar(0x03) uart.writechar(0xBB) else : Send(if_Check,8) #numbb=numbb-1 #交通灯识别函数 #=================================================================================================== def Color_Check(): for code in img.find_qrcodes(): qr_message = code.payload() print(qr_message) if_Check.insert(3,0x04) uart.writechar(0x55) uart.writechar(0x02) uart.writechar(0x92) uart.writechar(0x01) uart.writechar(len(qr_message)) for qrdata in qr_message: uart.writechar(ord(qrdata)) uart.writechar(0xBB) #=================================================================================================== #55 02 91 01 00 00 00 BB 交通灯识别串口协议 #55 02 92 01 00 00 00 BB 二维码识别串口协议 print("准备初始化系统") while(True): img = sensor.snapshot().lens_corr(1.8) if(uart.any()): print("串口连接成功,准备打印串口传输内容") data = uart.read(8) print(data)#调试串口输入 if( len(data) >= 8): if((data[0] == 0x55)and(data[1] == 0x02)and(data[7] == 0xBB)): print("协议初始化成功") if(data[2] == 0x91): print("识别交通灯") if(data[3] == 0x01): print("开始识别交通灯") while(numbb!=0): print (numbb) #当第三位有数据的时候跳出循环 if(if_Check[3]!=0x00): if_Check.insert(3,0x00) numbb=0 break #识别交通灯函数 traffic_Check() if(data[2] == 0x92): print("识别二维码") if(data[3] == 0x01 ): print("开始识别二维码") sensor.set_auto_exposure(True)#这里设置曝光时间 print(sensor.get_exposure_us()) numbb=2000 while(numbb!=0): print (numbb) #当第三位有数据的时候跳出循环 if(if_Check[3]!=0x00): if_Check.insert(3,0x00) numbb=0 break else: numbb=numbb-1 #识别二维码函数 Color_Check()
请在这里粘贴代码
-
逻辑应该是这样的:
收到指令 如果指令是查找二维码: 死循环找二维码
死循环找二维码肯定是要循环采集的。