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



    • 有人能帮忙看下么

      THRESHOLD = ((24, 97, -25, 100, -128, 127)) # Grayscale threshold for dark things...
      import sensor, image, time
      from pyb import LED
      from pid import PID
      from pyb import UART
      rho_pid = PID(p=0.4, i=0)
      theta_pid = PID(p=0.08, i=0)
      uart = UART(3, 9600)
      
      LED(1).on()
      LED(2).on()
      LED(3).on()
      
      sensor.reset()
      sensor.set_vflip(True)
      sensor.set_hmirror(True)
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQQVGA) # 80x60 (4,800 pixels) - O(N^2) max = 2,3040,000.
      #sensor.set_windowing([0,20,80,40])
      sensor.skip_frames(time = 2000)     # WARNING: If you use QQVGA it may take seconds
      clock = time.clock()                # to process a frame sometimes.
      
      while(True):
          clock.tick()
          img = sensor.snapshot().binary([THRESHOLD])
          line = img.get_regression([(100,100,0,0,0,0)], robust = True)#返回一条直线对象
          if (line):
              rho_err = abs(line.rho())-img.width()/2     #直线左右偏移距离,需要调整到视野中央
              if line.theta()>90:
                  theta_err = line.theta()-180            #与y轴平行的方向,即0°
              else:
                  theta_err = line.theta()
              print(theta_err)
              #FH = bytearray([0xb3,0xb3])
              #uart.write(FH)
              uart.write((str(theta_err)))
            
         
      
      

      下面是51单片机的接受代码

      #include "reg52.h"
      typedef unsigned int u16;
      typedef unsigned char u8;
      static u8 Temp;  					//定义临时变量
      static u16 a; 
      sbit led1=P2^0;
      sbit led2=P2^1;
      sbit led3=P2^2;
      
      void UsartInit()
      {
      	TMOD=0X20;
      	SCON=0X50;
      	TH1=0XFD;
      	TL1=TH1;
      	PCON=0X00;
      	TR1=1;	
      	ES=1;
      	EA=1;
      }						   
      void main()
      {
      	UsartInit();
      	while(1)
      	{
      			 	
      	}
      }
      /*------------------------------------------------
                          发送一个字节
      ------------------------------------------------*/
      void SendByte(unsigned char dat)
      {
       SBUF = dat;
       while(!TI);
            TI = 0;
      }
      /*------------------------------------------------
                          发送一个字符串
      ------------------------------------------------*/
      void SendStr(unsigned char *s)
      {
       while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
        {
        SendByte(*s);
        s++;
        }
      }
      
      void Usart() interrupt 4
      {   
      	if(RI)                        //判断是接收中断产生
      	{	
      		RI=0;                      //标志位清零
      		Temp=SBUF;
      		a=SBUF;                 
      
      		if(-6<a<3)
      			{
      				led2=0;
      			}
      		if(a<=-6)
      			{
      				led1=0;
      				
      			}			  
      		else
      			{
      				led3=0;						
      			}
      	
      			     	
      	}
      	else
      	{
      		TI=0;
      	}
      }
      
      
      


    • 我没办法测试不同的单片机的程序。

      建议检查的步骤。

      1,检查OpenMV代码:通过串口调试扩展板或者示波器查看数据,证明OpenMV有数据传出。
      https://singtown.com/learn/50240/

      2,检查51的代码:通过串口模块手动发送数据给51单片机,测试单片机的程序对不对。这部分找相应的资料,我们没有。

      3,检查连线,tx,rx是否连反了,gnd是否没共地。