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



    • 这是openmv的代码(是教程里的代码,加了稍微的匹配修改)

      # Blob Detection and uart transport
      import sensor, image, time
      from pyb import UART
      import json
      # For color tracking to work really well you should ideally be in a very, very,
      # very, controlled enviroment where the lighting is constant...
      yellow_threshold   = (0, 53, -118, 126, -115, -15)
      # You may need to tweak the above settings for tracking green things...
      # Select an area in the Framebuffer to copy the color settings.
      
      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.
      clock = time.clock() # Tracks FPS.
      
      uart = UART(3, 9600)
      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
      
      while(True):
          img = sensor.snapshot() # Take a picture and return the image.
      
          blobs = img.find_blobs([yellow_threshold])
          if blobs:
              max_blob=find_max(blobs)
              print('sum :', len(blobs))
              img.draw_rectangle(max_blob.rect())
              img.draw_cross(max_blob.cx(), max_blob.cy())
              
              if max_blob.cx()<=75: //当色块在左边时,是传送的数据为‘a’,下面以此类推
      ,          b='a'
              if max_blob.cx()>=85:
                b='b'
           #  if (max_blob.cx()>75 and max_blob.cx()<85)  
           #    b='c'
              output_str="%d" % (max_blob.cx()) #方式1
              #output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
              
              print(max_blob.cx())
              print('you send:',  b)
              uart.write(b)
          else:
              print('not found!')
      
      

      这是51的代码(P2_0等是led灯,P2_0=0亮,P2_0=1灭,但是接收到串口的数据时,结果都不亮,没有根据语句实现,很大可能是接收到的数据不是想的那个,该怎么解决呢)
      #include<reg52.h>
      #define uchar unsigned char
      #define uint unsigned int
      char i;
      char flag,c,x;
      sbit P2_0=P2^0;
      sbit P2_1=P2^1;
      sbit P2_2=P2^2;
      sbit P2_3=P2^3;
      sbit P2_4=P2^4;

      void delay(unsigned char i)
      {
      while(i--);
      }//延时函数
      void delay1(unsigned int k)
      {
      unsigned int x,y;
      for(x=0;x<k;x++)
      for(y=0;y<2000;y++);
      }
      void init()//赋初值,定义串行口的标志位以及数码管标志位
      {
      TMOD=0x20;
      TH1=0xfd; //使得波特率为9600,和openmv一致
      TL1=0xfd;
      TR1=1;
      REN=1;
      SM0=0;
      SM1=1;
      EA=1;
      ES=1;
      }
      void main()
      {
      flag=0;
      init();
      P2_0=1;
      P2_1=1;
      P2_2=1;
      P2_3=1;
      P2_4=1;
      while(1)
      {

      P2_0=1;//灯灭
      P2_1=1;
      P2_2=1;

      }
      }
      void ser() interrupt 4//串口中断
      {
      RI=0;
      x=SBUF;//x是接收的数据
      if(x=='a')//如果接收到‘a’则亮,下面同理
      { P2_0=0;}
      if(x=='b')
      { P2_1=0;}
      if(x=='c')
      { P2_2=0;}
      else
      {P2_4=~P2_4;}

      }



    • https://singtown.com/learn/50235/

      先拿串口调试扩展板或者示波器看一下OpenMV的数据

      然后用串口调试器测试51单片机的程序对不对。

      最后看连线对不对,RX TX有没有反,GND有没有连,有没有供电。