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



    • 在openmv中,当外界通过串口向openmv发送‘1’时,openmv会一直开启工作模式,但是在我写的程序中,在串口接收到数据中为什么只有执行一次,为什么不能无限执行

      import sensor, image, time
      from pyb import UART
      
      
      
      uart = UART(3, 115200)
      
      
      
      
      green_threshold   = (14, 80, 19, -25, -67, -24)
      #(35, 75, -7, -22, -47, -20)
      #(36, 76, -88, 65, -110, -21)
      #(27, 80, 15, -22, -47, -20)
      #(18, 74, 53, -91, -78, -24)
      
      
      sensor.reset() # Initialize the camera sensor.
      
      sensor.set_pixformat(sensor.RGB565) # use RGB565.
      
      sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
      
      sensor.skip_frames(10) # Let new settings take affect.
      
      sensor.set_auto_whitebal(False) # turn this off.
      
      #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
      def delay1():#对画面进行延迟,不影响ide中的画面流畅度,并对串口发送数据进行延迟
          for i in range(45):
              sensor.snapshot()
              if i == 42:
                  uart.write('1')
      
      def delay2():#对画面进行延迟,不影响ide中的画面流畅度,并对串口发送数据进行延迟
          for i in range(45):
              sensor.snapshot()
              if i == 42:
                  uart.write('2')
      
      def delay3():#对画面进行延迟,不影响ide中的画面流畅度,并对串口发送数据进行延迟
          for i in range(45):
              sensor.snapshot()
              if i == 42:
                  uart.write('3')
      
      def delay4():#对画面进行延迟,不影响ide中的画面流畅度,并对串口发送数据进行延迟
          for i in range(45):
              sensor.snapshot()
              if i == 42:
                  uart.write('4')
      
      def delay5():#对画面进行延迟,不影响ide中的画面流畅度,并对串口发送数据进行延迟
          for i in range(45):
              sensor.snapshot()
              if i == 42:
                  uart.write('5')
      
      clock = time.clock() # Tracks FPS.
      
      def find_c(threshold,roi):
      
           number=0
           max_size=0
      
           blobs = img.find_blobs(threshold,roi=roi,x_stride=10, y_stride=50)
      
           for b in blobs:
      
               if b[2]*b[3] > max_size:
      
                   max_size = b[2]*b[3]
      
                   if max_size>200 and b[2]>20:
      
                       if b[3]>20 and b[2]>20:
      
                           max_size=max_size
      
                           img.draw_rectangle(b[0:4], color = (0, 0, 0))
      
                           img.draw_cross(b[5], b[6], color = (0, 0, 0))
                           number=b[5]
      
           return number
      def read():
          a=0
          if uart.any():
              a=int(uart.read())
              print(a)
          return a
      
      def find_max(blobs):
          max_size=0
          max_blob=[]
          for blob in blobs:
              if blob[2]*blob[3] > max_size:
                  max_blob=blob
                  max_size = blob[2]*blob[3]
          return max_blob
      
      def max_area(blobs):
          max_size=0
          max_blob=[]
          for blob in blobs:
              if blob[2]*blob[3] > max_size:
                  max_blob=blob
                  max_size = blob[2]*blob[3]
          return max_size
      t=0
      b=0
      a=1
      while(True):
      
          clock.tick() # Track elapsed milliseconds between snapshots().
          img = sensor.snapshot() # Take a picture and return the image.
          blobs = img.find_blobs([green_threshold])
          roi1=[0,0,40,120]
          roi2=[120,0,40,120]
          blobs3 = img.find_blobs([green_threshold],roi=roi2)
          blobs2 = img.find_blobs([green_threshold],roi=roi1)
          #if uart.any():
             # a=int(uart.read())
             # print(a)
          #return a
          if b==0:
              a=read()
              if a==1:
                  b=1
              elif a==2:
                  b=2
              elif a==3:
                  b=3
      
      
          #if  blobs:
          if b==1 and t==0:
              #print(111)
              if  blobs:
                  print(111)
                  for b in blobs:
                      max_blob = find_max(blobs)
                      if max_blob[2]*max_blob[3]>1500  :
                          area=max_blob[2]*max_blob[3]
                          img.draw_rectangle(max_blob[0:4])
                          #print(max_blob[5])
                          if 70<max_blob[5]<90 :
                              print(max_blob[2])
                              if  max_blob[2]>70:
                                  delay1()
                                  print(1)
                                  t=t+1
      
                              else:
                                  print(4)
                                  delay4()
                          elif max_blob[5]<71 :
                              print(2)
                              delay2()
                          elif max_blob[5]>91:
                              print(3)
                              delay3()
      
          if b==2 :
              print(666)
              blobs = img.find_blobs([green_threshold])
      
              if blobs:
                  for b in blobs:
                      max_blob = find_max(blobs)
                      if max_blob[2]*max_blob[3]>1500  :
                          print(5)
                          delay5()
                          t=t+1
      
      
      
      
                   #print(5)
      
                   #xdelay5()
          if b==3 :
              print(1)
      
      
      
      
      
      
      
      


    • 你的代码里,
      a是什么用处,b是什么用处,t是什么用处?