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



    • 我用这个代码发给stm32为什么会发过去两次?

      import sensor, image, time
      from pyb import UART
      from pyb import LED
      
      red_led   = LED(1)  
      green_led = LED(2)
      blue_led  = LED(3)
      
      red_threshold    = (42, 66, 44, 83, 11, 62)    #  红色阈值 调整 (minL, maxL, minA, maxA, minB, maxB)
      green_threshold  = (23, 74, -53, -17, 5, 31)
      blue_threshold = (31, 48, -2, 39, -65, -29)
      flag = '0'
      put3= ['0','0','0']
      check = ['1','2','3']
      
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)  #设置色彩模式
      sensor.set_framesize(sensor.QVGA)   #分辨率
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False) # must turn this off to prevent image washout... 取消增益
      clock = time.clock()
      
      uart = UART(3, 115200,)  #串口初始化设置 串口名 波特率
      uart.init(115200, bits=8, parity=None, stop=1)
      
      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 judge_position(x_value):
          if x_value > 100 and x_value < 220:
              return '2'
          if x_value > 0 and x_value <120:
              return '1'
          if x_value > 200 and x_value <320:
              return '3'
      
      
      while(True):
          clock.tick()
          img = sensor.snapshot() #拍取图像
      #    img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.图像消畸变,可以用非鱼眼摄像头硬件消畸变
      
          if uart.any():
              flag = uart.readline().decode().strip()
          if flag == '1':
              img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.图像消畸变,可以用非鱼眼摄像头硬件消畸变
              green_led.on()
              blue_led.off()
              for code in img.find_qrcodes():
                  img.draw_rectangle(code.rect())  #rect()返回的是x,y,w,h数据格式,而draw可以单独接收描边
                  messages = code.payload()   #接收二维码数据
                  if messages in check :
      #                print(messages)
                      uart.write(messages+'\0') #串口发送二维码数据
                      flag = '0'
      
      
          if flag == '2':
              red_blobs   = img.find_blobs([red_threshold],pixels_threshold=200) #50
              green_blobs = img.find_blobs([green_threshold], pixels_threshold=200)
              blue_blobs  = img.find_blobs([blue_threshold],pixels_threshold=200)
              blue_led.on()
              green_led.off()
              img.draw_line(100, 0, 100, 240)
              img.draw_line(220, 0, 220, 240)
              if red_blobs:
                  red_blob = find_max(red_blobs)
                  img.draw_rectangle(red_blob.rect())
                  img.draw_cross(red_blob.cx(), red_blob.cy())
                  put3[0] = judge_position(red_blob.cx())
              if green_blobs:
                  green_blob = find_max(green_blobs)
                  img.draw_rectangle(green_blob.rect())
                  img.draw_cross(green_blob.cx(), green_blob.cy())
                  put3[1] = judge_position(green_blob.cx())
              if blue_blobs:
                  blue_blob = find_max(blue_blobs)
                  img.draw_rectangle(blue_blob.rect())
                  img.draw_cross(blue_blob.cx(), blue_blob.cy())
                  put3[2] = judge_position(blue_blob.cx())
      #        print(put3[0]+put3[1]+put3[2])
              if (put3[0] in check) or (put3[1] in check) or (put3[2] in check):
                  print(put3[0]+put3[1]+put3[2])
                  uart.write(put3[0]+put3[1]+put3[2])
                  flag = '0'
      
      


    • 逻辑看不懂,好几个flag不知道什么意思。



    • flag就是stm32发送过来的数据,发送2就是开启颜色识别,识别然后串口发送过去flag就置零,就不会再进 if flag == ‘2’ 继续发送,但是还是会发送两次。