⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~cpp

📁 浙江省中控杯高校机器人巡回赛参考程序
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
 #include <vfw.h>
#include <math.h>
#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
HWND    hWndC;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  MyCom->RThreshold=18;
  MyCom->CommPort=5;
  MyCom->InputMode=   comInputModeBinary;
  if(MyCom->PortOpen==false)
         { MyCom->PortOpen=true;}

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
   if(MyCom->PortOpen)
      MyCom->PortOpen =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyComComm(TObject *Sender)
{
  OleVariant   RxBuff;
   unsigned char buff[128];
  if(MyCom->CommEvent!=comEvReceive)
      return;
  int BuffPtr=MyCom->InBufferCount;

  if(BuffPtr>0)
     { RxBuff= MyCom->Input;
       int j=RxBuff.ArrayHighBound(1);
       for(int i=0;i<=j;i++)
        buff[i]=RxBuff.GetElement(i);
     }

    MyCom->InputLen=0;

    if(BuffPtr>0)
      { if(buff[0]==0xfa)
         {
         }
      }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  //---------------------------------
   if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x01,0x60,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
         if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x03,0x20,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
     if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x04,0x30,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x02,0x00,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
    if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x05,0x00,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)
{
  hWndC = capCreateCaptureWindowA("Capture Window",WS_CHILD | WS_VISIBLE ,
   Image1->Left,Image1->Top,Image1->Width,Image1->Height,Form1->Handle,0);

 hWndC = capCreateCaptureWindowA("Capture Window",WS_CHILD | WS_VISIBLE ,
   Image1->Left,Image1->Top,Image1->Width,Image1->Height,Form1->Handle,0);

 if (hWndC != 0)
 {

  SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
  SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
  SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
  SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
  SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
  SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
  SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
  SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);

}
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

   Image2->Canvas->CopyRect(Image2->ClientRect, Canvas, Image1->BoundsRect);
     int iw;
    int ih;
    int red;
    int green;
    int blue;
    int w1,h1,w2,h2,w3,h3;//设定三个坐标参数
    int a,b,d,h;

    for(iw=0;iw<=320;iw++)
    {
        for(ih=0;ih<=240;ih++)
        {
                 //将像素的RGB 分别取出
               red=Image2->Canvas->Pixels[iw][ih]&0x0000ff;
               green=(Image2->Canvas->Pixels[iw][ih]>>8)&0x0000ff;
               blue=(Image2->Canvas->Pixels[iw][ih]>>16)&0x0000ff;
  int rgb=red+blue+green+1;
               int red0=100*red/rgb;
               int green0=100*green/rgb;
               int blue0=100*blue/rgb;
                float cy=0.229*(float)red+0.587*(float)green+0.114*(float)blue;
                float cu=(-1*0.147)*(float)red-0.289*(float)green+0.436*(float)blue;
                float cv=0.615*(float)red-0.515*(float)green-0.100*(float)blue;
               //三值化

               if(blue0>39&&(blue>230&&red<220&&green<220)&&cu>30&&cv<0)     //蓝
               {                 Image3->Canvas->Pixels[iw][ih]=0xff0000;w2=iw;h2=ih;}//将蓝点坐标取出作为车头                }
               else if(green>254&&cu<0&&cv<0)  //绿
               {                       Image3->Canvas->Pixels[iw][ih]=0x00ff00; w1=iw;h1=ih;}//将绿点坐标取出作为车身                  }
               else  if(red0>40&&(red>230&&blue<220&&green<220))
                  {                                     //红
                                   Image3->Canvas->Pixels[iw][ih]=0x0000ff; w3=iw;h3=ih;//将红点坐标取出作为终点                  }

        }
    }
                 a=(h3-h1)/(w3-w1); //车身与终点连线斜率;
                 b=w2-w1;     //假定纵轴刚好经过车身坐标的坐标系,则b为在该坐标系内车头横坐标;
                 h=a*b+h1;   //在假定坐标系内车头对应在车身与终点直线上的纵坐标;
                 d=sqrt((w3-w2)*(w3-w2)+(h3-h2)*(h3-h2));    //车头与终点的距离
              if(d>30)       //车头的距离大于30
              {
               if(((h2-h)<(-20))||((h2-h)>20))    //终点与车身是否在一条直线上;
                  {
                     if((h2-h)>20)   //车头在连线右方
                         {                //左转

                          if(MyCom->PortOpen)
                              { unsigned char redata[8]={0xf5,0x5f,0x03,0x10,0x00,0x00,0x00,0x00};

                            if(MyCom->PortOpen)
                               { OleVariant   TxBuff;

                                   TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
                                         for(int i=0;i<8;i++)
                                       TxBuff.PutElement(redata[i],i);
                                  MyCom->Output=   TxBuff;
                              }
                           }
                      }
              else                     //车头在连线左方则右转
              {

              if(MyCom->PortOpen)
                { unsigned char redata[8]={0xf5,0x5f,0x04,0x10,0x00,0x00,0x00,0x00};

                  if(MyCom->PortOpen)
                     { OleVariant   TxBuff;

                        TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
                       for(int i=0;i<8;i++)
                     TxBuff.PutElement(redata[i],i);
                       MyCom->Output=   TxBuff;
                     }
                   }
               }
             }
                 else
                  {
                   if(MyCom->PortOpen)                 //前进
                        { unsigned char redata[8]={0xf5,0x5f,0x01,0x20,0x00,0x00,0x00,0x00};

                                if(MyCom->PortOpen)
                                { OleVariant   TxBuff;

                                        TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
                                         for(int i=0;i<8;i++)
                                        TxBuff.PutElement(redata[i],i);
                                        MyCom->Output=   TxBuff;
                                 }
                        }
                }

              }
          else                   //距离<30停止
          {

    if(MyCom->PortOpen)
      { unsigned char redata[8]={0xf5,0x5f,0x05,0x00,0x00,0x00,0x00,0x00};

        if(MyCom->PortOpen)
          { OleVariant   TxBuff;

          TxBuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
          for(int i=0;i<8;i++)
            TxBuff.PutElement(redata[i],i);
          MyCom->Output=   TxBuff;
          }
       }

          }


     }


}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button9Click(TObject *Sender)
{
   Timer1->Enabled=true;
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -