星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 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;
      

      0_1629810328174_1Y12.png
      0_1629810332409_串口显示.png



    • 原因: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天,问题还很大。同步其他任务,代码会注意的,感谢指点!