导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. 542v
    5
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    542v

    @542v

    0
    声望
    1
    楼层
    190
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    542v 关注

    542v 发布的帖子

    • openmv调试可以但是却没法把信息传到arduino上是为什么忍者tx也都连上了
      arduino代码
      #include <SoftwareSerial.h>
      SoftwareSerial softSerial(10,11); //定义软串口,rx为10号端口,tx为11号端口
      int x;
      int input1 = 6;  //定义输出引脚
      int input2 = 7; //定义输出引脚
      int input3 = 8; //定义输出引脚
      int input4 = 9; //定义输出引脚
      int ENA=5;//定义使能端引脚(下同)
      int ENB=11;
      
      
      
      
      void setup()
      {
        pinMode(input1,OUTPUT);//下列配置各引脚为输出模式
      pinMode(input2,OUTPUT);
      pinMode(input3,OUTPUT);
      pinMode(input4,OUTPUT);
      pinMode(ENA,OUTPUT);
      pinMode(ENB,OUTPUT);
        softSerial.begin(9600); //初始化虚拟串口
        Serial.begin(9600); //初始化硬串口
        
      }
      String A_String = "";//定义用来存数据的字符串
      
      void loop()
      {
        
        
        
        if (softSerial.available() > 0) //判断软串口是否接收到openmv数据,然后读取,然后在串口监视器打印
        {
          if(softSerial.peek() != '\n')
          {
            A_String += (char)softSerial.read();//把串口读的单个字符逐加到字符串
          }
          else
          {
            softSerial.read();
           
            
             x=A_String.toInt();//把字符串转成int类型存放
         
             if(x>80)//坐标和阈值进行判断
             {
              Serial.println("1");//串口打印数字1
                Serial.println(x);//串口打印坐标
               left();//左转
             }
             else if(x<80)
             {
               Serial.println("2");//串口打印数字2
                Serial.println(x);//串口打印坐标
                right();//右转
             }
             else
             {
              stop1();//停转
             }
             A_String = "";//重置字符串
          }
        }
      }
      
      void right()   //右转
      {
        analogWrite(ENA,240);
       
        digitalWrite(input1,HIGH); 
        digitalWrite(input2,LOW);  
        digitalWrite(input3,LOW); 
        digitalWrite(input4,LOW);   
      }
      
      
      void stop1()//停转
      {
       
        digitalWrite(input1,LOW); 
        digitalWrite(input2,LOW);  
        digitalWrite(input3,LOW); 
        digitalWrite(input4,LOW);   
      }
      
      void left()//左转
      {
       
        analogWrite(ENB,240);
        digitalWrite(input1,LOW); 
        digitalWrite(input2,LOW);  
        digitalWrite(input3,HIGH); 
        digitalWrite(input4,LOW);   
      }
      
      
      openmv代码
      import sensor, image, time
      from pyb import UART
      import json
      bule_threshold   = (48,12,-19,33,-49,-14)//蓝色的阈值
      sensor.reset() # Initialize the camera sensor.
      sensor.set_hmirror(True)
      sensor.set_vflip(True)
      sensor.set_pixformat(sensor.RGB565) 
      sensor.set_framesize(sensor.QQVGA) 
      sensor.skip_frames(10)
      sensor.set_auto_whitebal(False) 
      clock = time.clock()
      
      uart = UART(3, 9600)//串口波特率需要和arduino一致 这里设为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()//采集图像
      
          blobs = img.find_blobs([blue_threshold])
          if blobs:
              max_blob=find_max(blobs)
              img.draw_rectangle(max_blob.rect())//框选最大色块
              img.draw_cross(max_blob.cx(), max_blob.cy())//在最大色块中心画十字
              pcx = max_blob.cx()//定义pcx为最大色块中心的横坐标
      
      
            
              output_str=json.dumps(max_blob.cx()) //把pcx用json字符串的形式发送给arduino
              uart.write(output_str + '\r\n')
              print(pcx)//打印输出pcx
          else:
              print('not found!')
      
      发布在 OpenMV Cam
      5
      542v