• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • openmv串口数据输出问题



    • 输出值有的时候比打印出来的数据少6
      下面是打印出来的数据0_1690615454436_输出.png
      下面是串口助手收到的数据
      0_1690615486748_串口数据.png
      下面是openmv源码
      0_1690615583293_1.png
      0_1690615536471_2.png
      0_1690615554339_3.png
      请问是哪里出了问题?



    • 如果涉及代码,需要报错提示与全部代码文本,请注意不要贴代码图片



    • 此回复已被删除!


    • @kidswong999
      没有报错,是输出数据与打印数据有差异



    • @kidswong999
      import sensor, image, time, math
      from pyb import UART,LED
      import json
      import ustruct

      #white_threshold_01 = ((95, 100, -18, 3, -8, 4)); #白色阈值
      red_threshold_01 = ((17, 67, 23, 71, -1, 45));
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False) # must be turned off for color tracking
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      clock = time.clock()

      red_led =LED(1)
      green_led =LED(2)
      blue_led=LED(3)

      uart = UART(3,500000) #定义串口3变量
      uart.init(500000, bits=8, parity=None, stop=1) # init with given parameters

      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 USART_SendData(fx,dx,fy,dy):
      global uart;
      #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
      #data = bytearray(frame)
      data = ustruct.pack("<bbhhhhb", #格式为俩个字符俩个短整型(2字节)
      0xFF, #帧头
      0xFE,
      int(fx), # up sample by 4 #数据1
      int(dx),
      int(fy), # up sample by 4 #数据2
      int(dy),
      0xFD)
      uart.write(data); #必须要传入一个字节数组

      def recive_data():
      global uart
      if uart.any():
      tmp_data = uart.readline();
      print(tmp_data)

      #mainloop
      while(True):
      clock.tick() # Track elapsed milliseconds between snapshots().
      img = sensor.snapshot() # Take a picture and return the image.
      # pixels_threshold=100, area_threshold=100
      blobs = img.find_blobs([red_threshold_01], area_threshold=150);
      cx=0;cy=0;

      if blobs:
          #如果找到了目标颜色
          max_b = find_max(blobs);
          # Draw a rect around the blob.
          img.draw_rectangle(max_b[0:4]) # rect
          #用矩形标记出目标颜色区域
          img.draw_cross(max_b[5], max_b[6]) # cx, cy
          img.draw_cross(160, 120) # 在中心点画标记
          #在目标颜色区域的中心画十字形标记
          cx=max_b[5];
          cy=max_b[6];
          img.draw_line((160,120,cx,cy), color=(127));
          #img.draw_string(160,120, "(%d, %d)"%(160,120), color=(127));
          img.draw_string(cx, cy, "(%d, %d)"%(cx,cy), color=(127));
          fx=cx//10
          fy=cy//10
          dx=fx/10
          dy=fy/10
          USART_SendData(fx,dx,fy,dy) #发送点位坐
          print('整数:%d '%fx,'余数:%d '%dx,'整数:%d '%fy,'余数:%d '%dy);
          time.sleep(5);
          recive_data();
          blue_led.off()
          red_led.off()
          green_led.on()
      else:
          blue_led.off()
          green_led.off()
          red_led.on()
      
          if uart.any():
              tmp_data = uart.readline();
              blue_led.on()
              green_led.off()
              red_led.off()