Openmv二维码识别内容为1Y,转为12,串行终端显示正常,串口发送窗口显示有误?求解决方法?
-
#整合 import sensor,image,time,pyb,math,ujson,ustruct #串口通信,用串口3,P4 TX/P5 RX sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) # can be QVGA on M7... sensor.skip_frames(time = 2000) #跳过2000毫秒的帧 sensor.set_auto_gain(False) #颜色跟踪必须关闭自动增益 sensor.set_auto_whitebal(False) #颜色跟踪必须关闭白平衡 clock = time.clock() #追踪帧率 led = pyb.LED(3) #红 =1,绿=2,蓝=3,颜色识别建议不开LED,对视觉有影响 from pyb import UART uart = UART(3, 115200,timeout_char = 1000) uart.init(115200, bits=8, parity=None, stop=1) led.off() #初始化 qr = 1 qr_int = 0 cor = 0 #相关定义 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 #定义串口发送数据包的格式,用到ustruct.pack def sending_data(output_str,cx,cy): global uart; #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B]; #data = bytearray(frame) data = ustruct.pack("<bbsb", #格式为俩个字符俩个短整型(2字节),b和h对应数据格式 0x2C, #帧头1 0x12, #帧头2 str(output_str), # up sample by 4 #数据1 0x5B) uart.write(data); #必须要传入一个字节数组 def recive_data(): global uart if uart.any(): tmp_data = uart.readline(); print(tmp_data) def str_int(qr_str,qr_int): #if-else或字典 if(qr_str=='1R'): qr_int = 11; elif(qr_str=='2R'): qr_int = 21; elif(qr_str=='3R'): qr_int = 31; elif(qr_str=='4R'): qr_int = 41; elif(qr_str=='5R'): qr_int = 51; elif(qr_str=='1Y'): qr_int = 12; elif(qr_str=='2Y'): qr_int = 22; elif(qr_str=='3Y'): qr_int = 32; elif(qr_str=='4Y'): qr_int = 42; elif(qr_str=='5Y'): qr_int = 52; else:qr_int = 3; print('qr_int=',qr_int) return qr_int; while(qr): clock.tick() img = sensor.snapshot() img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens. #识别二维码 for code in img.find_qrcodes(): # 二维码识别距离很重要,是否后期要加跟踪二维码辅助识别? img.draw_rectangle(code.rect(),color = (255,255,255))#白色矩形圈出 # message = code.payload() # print(message) print('code.payload()=',code.payload()) qr_str=("%s" %code.payload()) #output_str为二维码内容,例如4R(数字+颜色代号) uart.write(qr_str) str_int(qr_str,qr_int) qr_int=("%s" %qr_int) #qr_b = bytearray([0x2C,qr_int,0x5B]) #uart.write(qr_b) uart.write(qr_int) """if qr_str == '1R': qr_str = '11'; qr_int = int(qr_str) print('qr_int=',qr_int) #uart.write(qr_int) #sending_data(qr_int);""" recive_data(); qr = 0; pyb.delay(5000); #延时函数 qr = 1;
-
原因:86行的函数根本不会改变qr_int的值,
解决办法:改为qr_int = str_int(qr_str,qr_int)代码写的太垃圾了,看了好久。用不到的函数你就自己先删掉。
改进建议:
1,删除qr, qr_int, cor
,这几个全局变量,除了让人迷惑没有任何用处。
2,删除48行的qr_int参数,根本没用,形参不会影响实参,这又不是指针。
3,48行这个一坨if else实在是太烦人了,能改就改了。
-
谢谢!已解决,都是刚学2天,问题还很大。同步其他任务,代码会注意的,感谢指点!