亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? contmotor.c

?? 全國電子設(shè)計大賽獲獎作品 懸掛運動控制系統(tǒng)
?? C
字號:
#include "spce061v004.h"
#include "main.h"
#include "math.h"

extern int PositionX,PositionY;


int NFStat = 0;                         // 當前傳感器狀態(tài)       
int NFDir = 0;                          // 上次移動的方向 

float  GetL(float, float);                     // 根據(jù)(x,y)坐標, 計算出左線長度 L
float  GetR(float, float);                     // 根據(jù)(x,y)坐標, 計算出右線長度 R

extern void ControlL(int);                     // 控制A電機
extern void ControlR(int);                     // 控制B電機
extern void MoveTo(float, float);              // 移動到指定 坐標 x,y 單位 厘米
extern void Delay(unsigned int);               // 延時

extern void TBCircle(int, int, int);           // 移動到指定 圓心 x,y,R 單位 厘米

extern void TBFollow(void);                    // 跟蹤粗1.5厘米到1.8厘米的黑色曲線

extern void Follow(void);                      // 尋跡算法 
extern void GetPoint(void);                    // 得到最新的檢測值

unsigned int ctrlL[4] = {0x03,0x06,0x0c,0x09}; //左電機正轉(zhuǎn)控制時序
unsigned int ctrlR[4] = {0x90,0xc0,0x60,0x30}; //右電機正轉(zhuǎn)控制時序

float PI = 3.1416;                             //  
float Motor_R = 0.54;                          // 電機的繞線軸半徑, 單位厘米

unsigned int DelayTime=0;                      // 延時程序的計數(shù)器
unsigned int MotorStepDelay = 5800;            // 延時時間常數(shù)   

unsigned StepL=0, StepR=0;                     // 電機步進排計數(shù)器 0/1/2/3

float AL = 116;                                // 畫筆位于原點的左線長度, 單位厘米
float AR = 150;                                // 畫筆位于原點的右線長度

float NewL = 115;                              // 畫筆當前位置的左線長度, 厘米   
float NewR = 151;                              // 畫筆當前位置的右線長度, 厘米   

extern int SysStatus;                          // 系統(tǒng)運行狀態(tài)字
                                               // = 1 運行到指定位置 X,Y
                                               // = 2 畫圓
                                               // = 3 跟蹤  
                                                                       
extern int OFStat;                             // 前次傳感器狀態(tài)
extern int NFStat;                             // 當前傳感器狀態(tài)       
extern int OFDir;                              // 上次移動的方向 
extern int NFDir;                              // 新的移動方向

float NewX = 0;                                // 畫筆當前的相對坐標, 單位 厘米 
float NewY = 0; 

float OldX = 0;                                // 畫筆前次的相對坐標, 單位 厘米 
float OldY = 0;  

//=========================================================================================
//
//=========================================================================================
extern void TBFollow(void)                     // 跟蹤粗1.5厘米到1.8厘米的黑色曲線
{ 
  NFStat = 0x01;                               // 低四位是檢測信號, 先確定上壓線
  NFDir  = 0x0ff;                              // 方向全 1
  while (NFDir)                                // 方向沒有全測試, 就要繼續(xù)  
   { GetPoint();                               // 取最新的坐標點信息
     //NFStat = 0;
     if (NFStat)                               // 回歸前次坐標點
      { MoveTo(OldX,OldY);                 
        //NewX = OldX;
        //NewY = OldY;
        continue;  
      }
     else 
      { OldX = NewX;
        OldY = NewY;
        NFDir = 0xFF;    // 向其他8個方向測試
      }
      
     if (NFDir = 0xFF)   // 向右上移動
      {  NFDir = NFDir & 0xFE;  MoveTo(NewX+1, NewY+1);
      }
     if (NFDir = 0xFE)   // 向上移動
      {  NFDir = NFDir & 0xFC;  MoveTo(NewX+0, NewY+1);
      }
     if (NFDir = 0xFC)   // 向左上移動
      {  NFDir = NFDir & 0xFB;  MoveTo(NewX-1, NewY+1);
      }
     if (NFDir = 0xF8)   // 向左移動
      {  NFDir = NFDir & 0xF0;  MoveTo(NewX-1, NewY+0);
      }
     if (NFDir = 0xF0)   // 向左下移動
      {  NFDir = NFDir & 0xE0;  MoveTo(NewX-1, NewY-1);
      }
     if (NFDir = 0xE0)   // 向下移動
      {  NFDir = NFDir & 0xC0;  MoveTo(NewX+0, NewY-1);
      }
     if (NFDir = 0xC0)   // 向右下移動
      {  NFDir = NFDir & 0x80;  MoveTo(NewX+1,NewY+1);
      }
     if (NFDir = 0x80)   // 向右移動
      {  NFDir = NFDir & 0x80;  MoveTo(NewX+0,NewY+1);
      }
   }
  //OFStat = NFStat;                             // 存儲前次檢測及運行結(jié)果
  //OFDir = NFDir;
}

//=========================================================================================
//
//=========================================================================================
extern void GetPoint(void)
{
}

//=========================================================================================
// 根據(jù)(x,y)坐標, 計算出左線長度 L
//=========================================================================================
float GetL(float a, float b)          
{  float x;
   x = sqrtf( (a+15) * (a+15) + (115-b) * (115-b));
   *P_Watchdog_Clear=1;
   return x;
}

//=========================================================================================
// 根據(jù)(x,y)坐標, 計算出右線長度 R
//=========================================================================================
float GetR(float a,float b)           
{   float y;
    y = sqrtf((95-a) * (95-a) + (115-b) * (115-b));
    *P_Watchdog_Clear=1;
    return y;
}   

//=========================================================================================
// TB Write 控制左邊電機轉(zhuǎn)動 1 步
// Step > 0 正轉(zhuǎn), Step < 0 反轉(zhuǎn)
//=========================================================================================
extern void ControlL(int Step)      
{ if(Step >= 0)                     //電機正傳
   { StepL = StepL % 4;
     *P_IOA_Data = *P_IOA_Buffer & 0xfff0 | ctrlL[StepL];//*P_IOA_Data & 0xfff0 | ctrlL[StepL];
     StepL ++;
     *P_Watchdog_Clear=1;
   }
  else 
   { if (StepL < 0) StepL = 3;
     else StepL = StepL % 4;
     *P_IOA_Data = *P_IOA_Buffer & 0xfff0 | ctrlL[StepL];//*P_IOA_Data & 0xfff0 | ctrlL[StepL];
     StepL --;
     *P_Watchdog_Clear=1;
   }
}          

//=========================================================================================
// TB Write 控制右邊電機轉(zhuǎn)動 1 步
// Step > 0 正轉(zhuǎn), Step < 0 反轉(zhuǎn)
//=========================================================================================
extern void ControlR(int Step) 
{ if(Step >= 0)                     //電機正傳
   { if (StepR < 0) StepR = 3;
     else StepR = StepR % 4;
     *P_IOA_Data = *P_IOA_Buffer & 0xff0f | ctrlR[StepR];
//     *P_IOA_Data = *P_IOA_Data & 0xff0f | ctrlR[StepR];
     *P_Watchdog_Clear=1;
     StepR --;
   }
  else
   { StepR = StepR % 4; 
     *P_IOA_Data = *P_IOA_Buffer & 0xff0f | ctrlR[StepR];
//     *P_IOA_Data = *P_IOA_Data & 0xff0f | ctrlR[StepR];
     *P_Watchdog_Clear=1;
     StepR ++;
   }           
}          

//=========================================================================================
// 控制畫筆從當前位置, 移動的指定坐標點
// 坐標以浮點形式給出, 可以提高精度, 單位厘米
//=========================================================================================
extern void MoveTo(float x1,float y1)    // h = x1, c = y1
{  float  LLength,RLength;               // 左右線的長度
   float  MoveL,MoveR;                   // A/B電機移動量
   float  SL,SR;                         // A/B電機步進 
   float  sRunL,sRunR;                   // A/B電機的實際運行步數(shù) 
   //int    RunL,RunR;                     // A/B電機的步數(shù)  
   float  StopL=0.0, StopR=0.0;          // A/B電機的暫停步計數(shù)
   int    DirL=0, DirR =0;               // A/B電機的方向 >=0 正向
   
   *P_Watchdog_Clear=1;
  
   LLength = GetL(x1,y1);                // 計算出左右線的長度
   RLength = GetR(x1,y1);
  
   MoveL = NewL - LLength;               // 計算出左右電機應(yīng)當轉(zhuǎn)動長度       
   MoveR = NewR - RLength;
     
   SL = MoveL / (2 * PI * Motor_R / 200);// 計算出左右電機應(yīng)當轉(zhuǎn)動的步數(shù)      
   SR = MoveR / (2 * PI * Motor_R / 200);// 電機轉(zhuǎn)動1周, 200步
   
   if (SL >=0) DirL = 1;                 // 判斷左右電機移動的方向 
   else DirL = -1;
   if (SR >=0) DirR = 1; 
   else DirR = -1;
   
   SL = fabsf((SL));                     // 左右電機移動的總步數(shù)
   SR = fabsf((SR));
           
   sRunL = 0;                            // 左右電機的運行步計數(shù)器  
   sRunR = 0;
     
   if(SL >= SR)                          // 左電機的步進長
    { while ( sRunL <= SL)               // 以左電機為準移動 
      { ControlL(DirL);                  // 先動左電機
        StopR = StopR + fabsf(SR/SL);    // 計算并驅(qū)動右電機
        if (StopR > 1.0)                 // 為了平滑運動, 累加運行步少的電機
         { ControlR(DirR); 
           StopR = StopR - 1;
         }
        sRunL ++; 
        Delay(MotorStepDelay);           
      }
     if (StopR > 0.0)  ControlR(DirR);   // 若右電機還有運行步, 則再走一步
    }  
   else
    { while ( sRunR <= SR)               // 以右電機為準移動 
       { ControlR(DirR);                 // 先驅(qū)動右電機
         StopL = StopL + fabsf(SL/SR);   // 計算并驅(qū)動左電機  
         if (StopL > 1.0) 
           { ControlL(DirL); 
             StopL = StopL - 1;
           }
         sRunR ++; 
         Delay(MotorStepDelay);  
       }
      if (StopL > 0.0)  ControlL(DirL);  // 若左電機還有運行步, 則再走一步       
     }  
    
   // 在此加上糾正偏差的算法 
   if (SysStatus = 2)                       // 畫圓時糾正偏差 
   //while ( sRunR <= SR)              
   //   ControlR(DirR);                    // 右電機多走一步
     
   NewL = LLength;                       // 修改左右線的最新長度
   NewR = RLength;  
   
   NewX = x1;                            // 修改畫筆的相對坐標值
   NewY = y1;      
} 

//=========================================================================================
// 以x,y為圓心, R為半徑畫圓
//=========================================================================================
extern void TBCircle(int x,int y, int R)
{  int Angle=0;                          // 360度可以細分為MaxNum段
   int MaxNum = 360;                     // 細分段數(shù)
   float Mx,My;                          // 目標坐標
     
   *P_Watchdog_Clear=1;
 
   MoveTo(x * 1.0,y * 1.0);              // 移動到圓心
   
   SysStatus = 2;
//   while ( Angle <= MaxNum)              // 360度   
//    { 
//      Mx = x + (cosf(2 * Angle * PI  / MaxNum) * R);
//      My = y + (sinf(2 * Angle * PI  / MaxNum) * R);
      
//      MoveTo(Mx,My);
//      Angle ++;
//    }
   while ( Angle <= MaxNum)              // 360度   
    { 
      //if (Angle <= (int)(MaxNum/8))      // 0 - 45 度 
       { Mx = x + (cosf(2 * Angle * PI  / MaxNum) * R) ;
         My = y + (sinf(2 * Angle * PI  / MaxNum) * R);
       }      

      MoveTo(Mx,My);
      Angle ++;
//***************      
      PositionX=Mx;PositionY=My;
      PositionDisp();
//****************      
    }
}      

//extern void Delay(unsigned int Times) 
//{  while (Times > 0) Times--;
//}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人h版在线观看| 国产精品一二三区| 亚洲老司机在线| 欧美国产精品专区| 国产亚洲精品aa| 国产三级精品三级| 中文字幕亚洲欧美在线不卡| 亚洲女爱视频在线| 亚洲精品va在线观看| 图片区小说区国产精品视频| 强制捆绑调教一区二区| 美女性感视频久久| 国产一区二区三区久久久| 国产一区 二区 三区一级| 国产一区 二区| eeuss影院一区二区三区| 91国在线观看| 欧美年轻男男videosbes| 日韩欧美高清dvd碟片| 久久精品综合网| 一级特黄大欧美久久久| 日本中文字幕一区| 大陆成人av片| 欧美日本在线观看| 亚洲精品一区在线观看| 亚洲婷婷综合色高清在线| 视频一区二区三区在线| 国产91精品精华液一区二区三区| 成人午夜激情影院| 在线播放亚洲一区| 国产精品丝袜久久久久久app| 亚洲综合成人网| 久久成人av少妇免费| 99re热视频这里只精品| 日韩午夜三级在线| 日韩毛片在线免费观看| 人人超碰91尤物精品国产| 国产福利一区二区三区在线视频| 欧美综合在线视频| 欧美韩国日本不卡| 男男视频亚洲欧美| 一本到三区不卡视频| 26uuu亚洲| 亚洲成a人在线观看| 国产成人超碰人人澡人人澡| 欧美美女黄视频| 国产精品国产三级国产a| 美腿丝袜一区二区三区| 色就色 综合激情| 国产欧美精品一区| 国内成人免费视频| 欧美日韩国产在线观看| 亚洲欧美日韩人成在线播放| 国产福利精品一区| 精品久久久久久无| 日韩成人av影视| 欧美日韩综合在线免费观看| 国产精品乱码人人做人人爱 | 一区二区三区产品免费精品久久75| 日韩av中文在线观看| 欧美日韩一区精品| 一级精品视频在线观看宜春院| 国产河南妇女毛片精品久久久| 欧美一级日韩一级| 青青青爽久久午夜综合久久午夜| 欧美三区在线观看| 亚洲国产美女搞黄色| 日本精品视频一区二区三区| 国产精品免费久久| 不卡在线视频中文字幕| 国产日韩欧美一区二区三区综合| 激情另类小说区图片区视频区| 日韩手机在线导航| 久久精品国产99国产精品| 欧美一级二级三级蜜桃| 日韩国产高清在线| 欧美一级国产精品| 国产一区在线观看麻豆| 久久久久久亚洲综合影院红桃| 精品一区中文字幕| 国产午夜精品福利| 99久久精品费精品国产一区二区| 国产精品久久久久毛片软件| 91在线观看污| 亚洲一区在线观看网站| 欧美日韩中文国产| 久久国产尿小便嘘嘘| 欧美成人三级在线| 岛国精品在线观看| 一区二区三区欧美日| 欧美日韩极品在线观看一区| 日韩成人一级片| 国产蜜臀av在线一区二区三区| hitomi一区二区三区精品| 亚洲国产乱码最新视频| 精品卡一卡二卡三卡四在线| 国产成人自拍网| 亚洲一区二区三区小说| 日韩欧美在线网站| 不卡一区在线观看| 日本中文字幕一区| 国产精品污网站| 3d成人h动漫网站入口| 国产麻豆精品在线| 亚洲一级不卡视频| 久久综合九色综合欧美98| 一本大道久久a久久综合婷婷| 同产精品九九九| 中文字幕免费在线观看视频一区| 色婷婷激情一区二区三区| 毛片不卡一区二区| 一区二区三区 在线观看视频 | 国产凹凸在线观看一区二区| 国产精品成人网| 欧美一区二区女人| 91片在线免费观看| 国产黄人亚洲片| 另类小说图片综合网| 亚洲欧洲制服丝袜| 国产亚洲婷婷免费| 在线不卡的av| 在线精品亚洲一区二区不卡| 国产凹凸在线观看一区二区| 美国精品在线观看| 午夜欧美在线一二页| 亚洲日本va午夜在线影院| 精品日本一线二线三线不卡| 精品视频在线看| 91久久一区二区| 91亚洲国产成人精品一区二区三| 国产综合一区二区| 麻豆成人91精品二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美成人在线直播| 在线91免费看| 欧美午夜寂寞影院| 91国内精品野花午夜精品| 不卡欧美aaaaa| 国产suv精品一区二区三区| 青青草97国产精品免费观看无弹窗版| 亚洲已满18点击进入久久| 国产精品国产精品国产专区不片| 久久久蜜桃精品| 久久亚洲捆绑美女| 欧洲在线/亚洲| 色综合视频一区二区三区高清| 国产日产亚洲精品系列| 欧美久久久影院| 日欧美一区二区| 国产精品短视频| 国产精品乱码久久久久久| 欧美激情在线一区二区三区| 久久久亚洲综合| 国产亚洲精品福利| 国产精品久久久久桃色tv| 亚洲欧洲无码一区二区三区| 日韩美女精品在线| 亚洲综合免费观看高清完整版在线| 亚洲靠逼com| 亚洲123区在线观看| 青青草原综合久久大伊人精品优势| 美女视频黄a大片欧美| 裸体一区二区三区| 国产一区二区三区香蕉| 成人sese在线| 欧美日韩亚洲综合在线| 日韩一区二区三区视频在线观看| 欧美mv和日韩mv国产网站| 国产日韩欧美精品电影三级在线| 国产日韩精品一区二区三区| 国产精品久久久久婷婷 | hitomi一区二区三区精品| 一本大道久久a久久精二百| 欧美影院午夜播放| 日韩一级成人av| 欧美极品xxx| 伊人性伊人情综合网| 天天做天天摸天天爽国产一区| 久久国产精品露脸对白| 成人av影视在线观看| 在线观看精品一区| 精品蜜桃在线看| 一区二区三区在线观看网站| 日本伊人色综合网| av在线这里只有精品| 欧美三级视频在线| 欧美激情一二三区| 日韩精品一级中文字幕精品视频免费观看 | 国产精品网友自拍| 午夜精品久久久| 成人动漫av在线| 欧美精品vⅰdeose4hd| 日本一区免费视频| 日韩精品电影在线| 一本在线高清不卡dvd| 精品粉嫩超白一线天av| 亚洲小少妇裸体bbw| 成人免费看的视频| 精品免费国产一区二区三区四区| 亚洲天堂精品在线观看|