久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4248|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

電賽STM32F1紅色小球識(shí)別的板球控制-ov7670程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:472829 發(fā)表于 2019-1-25 14:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
電賽板球系統(tǒng)STM32單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "string.h"
  8. #include "ov7670.h"
  9. #include "tpad.h"
  10. #include "timer.h"
  11. #include "exti.h"
  12. #include "usmart.h"
  13. #include "EasyTracered.h"
  14. #include "io_in_out.h"
  15. #include "oled.h"
  16. #include "gui.h"
  17. #include "pid.h"
  18. /************************************************
  19. 作者:TZT
  20. ************************************************/
  21. void camera_refresh(void);
  22. /*---------------------結(jié)構(gòu)體全局定義-----------------*/
  23. RESULT Resured;//判定為的目標(biāo)條件
  24. /*---------------------LCD顯示-----------------*/
  25. const u8*LMODE_TBL[5]={"Auto","Sunny","Cloudy","Office","Home"};                                                        //5種光照模式            
  26. const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"};        //7種特效
  27. extern u8 ov_sta;        //在exit.c里 面定義
  28. extern u8 ov_frame;        //在timer.c里面定義               
  29. /*---------------------------結(jié)構(gòu)體變量-------------------*/
  30. extern PIDTypdDef M1PID;     //PID1
  31. extern PIDTypdDef M2PID;     //PID2
  32. /*---------------------------x和y的誤差-------------------*/
  33.           float  x1_error;
  34.           float  x2_error;
  35.           float  x3_error;
  36.           float  x4_error;
  37.                 float  y1_error;
  38.           float  y2_error;
  39.           float  y3_error;
  40.           float  y4_error;

  41.           float  x1_1error;
  42.           float  x2_2error;
  43.           float  x3_3error;
  44.           float  x4_4error;
  45.                 float  y1_1error;
  46.           float  y2_2error;
  47.           float  y3_3error;
  48.           float  y4_4error;
  49.                
  50.                 float  sx_1error;
  51.           float  sx_2error;
  52.           float  sx_3error;
  53.           float  sx_4error;
  54.                 float  sx_5error;
  55.           float  sx_6error;

  56.     float  sy_1error;
  57.           float  sy_2error;
  58.           float  sy_3error;
  59.           float  sy_4error;
  60.                 float  sy_5error;
  61.           float  sy_6error;
  62.                
  63.                 float  sx_1need = 209.0;
  64.           float  sx_2need = 254.0;
  65.     float  sx_3need = 209.0;
  66.           float  sx_4need = 163.0;               
  67.                 float  sx_5need = 117.0;
  68.           float  sx_6need = 70.0;
  69.                 float  sx_7need = 118.0;
  70.                
  71.                 float  sy_1need = 71.0 ;
  72.           float  sy_2need = 116.0;
  73.     float  sy_3need = 161.0;
  74.           float  sy_4need = 117.0;               
  75.                 float  sy_5need = 71.0;
  76.           float  sy_6need = 118.0;
  77.                 float  sy_7need = 162.0;
  78. /*---------------------------菜單選擇---------------------*/
  79. extern unsigned char    RWXZ;     //#任務(wù)選擇
  80. int32_t   PWM1;           //#PWM1
  81. int32_t   PWM2;           //#PWM2

  82. extern float   need_x1 = 209.0;  
  83. extern float   need_x2 = 209.0;
  84. extern float   need_x3 = 118.0;
  85. extern float   need_x4 = 118.0;

  86. extern float   need_y1 = 182.0;  
  87. extern float   need_y2 = 71.0;
  88. extern float   need_y3 = 71.0;
  89. extern float   need_y4 = 182.0;

  90. float   new_x1 ;  
  91. float   new_x2 ;
  92. float   new_x3 ;
  93. float   new_x4 ;

  94. float   new_y1 ;  
  95. float   new_y2 ;
  96. float   new_y3 ;
  97. float   new_y4 ;

  98. extern int32_t  SET_1;           
  99. extern int32_t  SET_2;           
  100. extern int32_t  SET_3;           
  101. extern int32_t  SET_4;           
  102. /*---------------------位置和PWM變量-----------------*/
  103. u16 r,y;
  104. u16 s,z;

  105. int32_t wz_x,wz_y;      //顯示坐標(biāo)

  106. #define M1_PWMMAX  180  //舵機(jī)一最大值

  107. #define M2_PWMMAX  140  //舵機(jī)二最大值


  108. void wkqwz(void)
  109. {
  110.                         if(PFin(7)==0)
  111.                         {
  112.                                 delay_ms(10);
  113.                                 if(PFin(7)==0)
  114.                                 {
  115.                                         while(1)
  116.                                         {
  117.                                    camera_refresh();//更新顯示
  118.                        wz_x = Resured.x;
  119.                        wz_y = Resured.y;
  120.                        OLED_ShowNum(0,0,wz_x,4,16);                     //這句話把存進(jìn)緩存的數(shù)顯示出來(lái)
  121.                        OLED_ShowNum(64,0,wz_y,4,16);
  122.                  OLED_Refresh_Gram();
  123.         if(PFin(7)==1)
  124.                                 {
  125.                                 delay_ms(10);
  126.                                            if(PFin(7)==1)
  127.                                 {
  128.                                         break;       
  129.                                 }
  130.                                 }                                
  131.                           }
  132.                                 }
  133.                         }
  134. }
  135. /*----------------控制舵機(jī)的轉(zhuǎn)動(dòng)角度----------*/
  136. void kz_hs(int32_t  pwm1,int32_t pwm2)
  137. {

  138.                  pwm1 = pwm1 + 1235;   //目標(biāo)121,158 實(shí)際219,260
  139.            pwm2        = 1275 - pwm2;   //   

  140.            TIM_SetCompare1(TIM4,pwm1);//前后       
  141.            TIM_SetCompare4(TIM4,pwm2);//
  142. }
  143. /*----------------------任務(wù)------------------*/
  144. void MODE1(void) //任務(wù)一
  145. {
  146.           TIM_SetCompare1(TIM4,1235);//前后       
  147.     TIM_SetCompare4(TIM4,1275);//左右
  148. }
  149. void MODE2(void) //任務(wù)二
  150. {
  151.        
  152.   // x = 163;
  153.         // y = 117;
  154.           const  float priod = 2000.0;  //周期(毫秒)
  155.           const  uint32_t x_1 = 219;
  156.           const  uint32_t y_1 = 260;
  157.           const  uint32_t need_x = 121;
  158.           const  uint32_t need_x_erro = 98;
  159.           const  uint32_t need_y = 158;
  160.           const  uint32_t need_y_erro = 102;
  161.           static uint32_t MoveTimeCnt = 0;
  162.           float  Normalization = 0.0;
  163.           float  set_x,set_y;
  164.        

  165.     MoveTimeCnt += 5;       
  166.           Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  167.           if(Normalization>=1.0)
  168.                 {
  169.                  Normalization = 1.0;
  170.                 }
  171.     set_x = 254.0 - (91.0 * Normalization) ;
  172.                 set_y = 205.0 - (88.0 * Normalization) ;       
  173.                        
  174.           PID_M1_SetPoint(set_x);        //x的期望值
  175.           PID_M1_SetKp(8.5);
  176.           PID_M1_SetKi(0.04);
  177.           PID_M1_SetKd(100);
  178.     PID_M2_SetPoint(set_y);        //y的期望值
  179.           PID_M2_SetKp(8.4);
  180.           PID_M2_SetKi(0.04);
  181.           PID_M2_SetKd(100);
  182.     PWM1=PID_M1_PosLocCalc((float)Resured.x);
  183.           PWM2=PID_M2_PosLocCalc((float)Resured.y);
  184.        
  185.           if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;     
  186.        
  187.           if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  188.        
  189.           if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  190.        
  191.           if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  192.     kz_hs(PWM1,PWM2);//控制函數(shù)

  193. }
  194. void MODE3(void) //任務(wù)三
  195. {
  196.           // x1 = 163 , y1 = 207
  197.           // x2 = 163 , y2 = 117
  198.           const  float priod = 1900.0;  //周期(毫秒)
  199.           const  uint32_t x_1 = 219;
  200.           const  uint32_t y_1 = 260;
  201.           const  uint32_t need_x = 121;
  202.           const  uint32_t need_x_erro = 98;
  203.           const  uint32_t need_y = 158;
  204.           const  uint32_t need_y_erro = 102;
  205.           static uint32_t MoveTimeCnt = 0;
  206.           float  Normalization = 0.0;
  207.     float  set_x,set_y;
  208.           float  hc_time = 600;
  209.        
  210.     MoveTimeCnt += 5;                                                                         //每5ms運(yùn)算1次
  211.        
  212.         if(MoveTimeCnt<=priod)
  213.         {
  214.                
  215.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  216.            if(Normalization>=1.0)
  217.                  {
  218.                   Normalization = 1.0;
  219.                  }
  220.     set_x = 254.0 - (91.0 * Normalization);//  x = 72 ,y = 28;
  221.                 set_y = 205.0 - (-2.0 * Normalization) ;       
  222.                  
  223.                 PID_M1_SetPoint(set_x);        //x的期望值
  224.           PID_M1_SetKp(8.7);
  225.           PID_M1_SetKi(0.07);
  226.           PID_M1_SetKd(100);
  227.     PID_M2_SetPoint(set_y);        //y的期望值
  228.           PID_M2_SetKp(8.6);
  229.           PID_M2_SetKi(0.07);
  230.           PID_M2_SetKd(100);                 
  231.         }
  232.   else if(MoveTimeCnt>(priod+hc_time))
  233.                 {
  234.                         Normalization = (float)(MoveTimeCnt-(priod+hc_time)) / priod;         //對(duì)板球周期歸一化
  235.            if(Normalization>=1.0)
  236.                  {
  237.                   Normalization = 1.0;
  238.                  }
  239.     set_x = 163.0 - (0.0 * Normalization);//  x = 72 ,y = 28;
  240.                 set_y = 207.0 - (90.0 * Normalization) ;       
  241.                  
  242.                 PID_M1_SetPoint(set_x);        //x的期望值
  243.           PID_M1_SetKp(8.2);
  244.           PID_M1_SetKi(0.04);
  245.           PID_M1_SetKd(100);
  246.     PID_M2_SetPoint(set_y);        //y的期望值
  247.           PID_M2_SetKp(8.1);
  248.           PID_M2_SetKi(0.04);
  249.           PID_M2_SetKd(100);
  250.                 }
  251.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  252.                
  253.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  254.        
  255.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;     
  256.        
  257.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  258.        
  259.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  260.        
  261.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  262.   kz_hs(PWM1,PWM2);//控制函數(shù)
  263.                
  264. }  
  265. void MODE4(void) //任務(wù)四
  266. {
  267.          // x = 72; y = 28;
  268.                 const  float priod = 2000.0;  //周期(毫秒)
  269.           const  uint32_t x_1 = 219;
  270.           const  uint32_t y_1 = 260;
  271.           const  uint32_t need_x = 121;
  272.           const  uint32_t need_x_erro = 98;
  273.           const  uint32_t need_y = 158;
  274.           const  uint32_t need_y_erro = 102;
  275.           static uint32_t MoveTimeCnt = 0;
  276.           float  Normalization = 0.0;
  277.           float  set_x,set_y;
  278.     float  hc_time = 1000;
  279.        
  280.     MoveTimeCnt += 5;       
  281.           Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化

  282.         if(MoveTimeCnt<=priod)
  283.         {
  284.                
  285.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  286.            if(Normalization>=1.0)
  287.                  {
  288.                   Normalization = 1.0;
  289.                  }
  290.     set_x = 254.0 - (66.0 * Normalization);//  x = 72 ,y = 28;
  291.                 set_y = 205.0 - (120.0 * Normalization) ;       
  292.                  
  293.                 PID_M1_SetPoint(set_x);        //x的期望值
  294.           PID_M1_SetKp(8.2);
  295.           PID_M1_SetKi(0.07);
  296.           PID_M1_SetKd(100);
  297.     PID_M2_SetPoint(set_y);        //y的期望值
  298.           PID_M2_SetKp(8.1);
  299.           PID_M2_SetKi(0.07);
  300.           PID_M2_SetKd(100);         
  301.         }
  302.         /*---------------------------------------------*/
  303.   else if(MoveTimeCnt>priod)
  304.                 {
  305.                         Normalization = (float)(MoveTimeCnt-priod) / priod;         //對(duì)板球周期歸一化
  306.            if(Normalization>=1.0)
  307.                  {
  308.                   Normalization = 1.0;
  309.                  }
  310.     set_x = 188.0 - (116.0 * Normalization);//  x = 72 ,y = 28;
  311.                 set_y = 85.0 - (57.0 * Normalization) ;       
  312.                  
  313.                 PID_M1_SetPoint(set_x);        //x的期望值
  314.           PID_M1_SetKp(8.2);
  315.           PID_M1_SetKi(0.02);
  316.           PID_M1_SetKd(100);
  317.     PID_M2_SetPoint(set_y);        //y的期望值
  318.           PID_M2_SetKp(8.1);
  319.           PID_M2_SetKi(0.02);
  320.           PID_M2_SetKd(100);       
  321.                 }
  322.                
  323.     PWM1=PID_M1_PosLocCalc((float)Resured.x);
  324.           PWM2=PID_M2_PosLocCalc((float)Resured.y);
  325.        
  326.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;      
  327.        
  328.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  329.        
  330.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  331.        
  332.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  333.   kz_hs(PWM1,PWM2);//控制函數(shù)
  334. }
  335. void MODE5(void) //任務(wù)五
  336. {
  337.            // x1 = 254; y1 = 205;
  338.            // x2 = 254; y2 = 116;
  339.            // x3 = 163; y3 = 25;
  340.            // x3 = 72 ; y4 = 28;
  341.        
  342.                 const  float priod = 2000.0;  //周期(毫秒)
  343.           const  uint32_t x_1 = 219;
  344.           const  uint32_t y_1 = 260;
  345.           const  uint32_t need_x = 121;
  346.           const  uint32_t need_x_erro = 98;
  347.           const  uint32_t need_y = 158;
  348.           const  uint32_t need_y_erro = 102;
  349.           static uint32_t MoveTimeCnt = 0;
  350.           float  Normalization = 0.0;
  351.           float  set_x,set_y;
  352.           float  hc_time = 500;
  353.           
  354.        
  355.     MoveTimeCnt += 5;                                                                       //每5ms運(yùn)算1次
  356.         /*-----------------1 到 2 ----------------------------*/
  357.         if(MoveTimeCnt<=priod)
  358.         {       
  359.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  360.            if(Normalization>=1.0)
  361.                  {
  362.                   Normalization = 1.0;
  363.                  }
  364.     set_x = 254.0 - (0.0 * Normalization);//  x = 254 ,y = 116;
  365.                 set_y = 205.0 - (89.0 * Normalization) ;       
  366.                  
  367.                 PID_M1_SetPoint(set_x);        //x的期望值
  368.           PID_M1_SetKp(8.2);
  369.           PID_M1_SetKi(0.04);
  370.           PID_M1_SetKd(100);
  371.     PID_M2_SetPoint(set_y);        //y的期望值
  372.           PID_M2_SetKp(8.1);
  373.           PID_M2_SetKi(0.04);
  374.           PID_M2_SetKd(100);                 
  375.         }
  376.         /*-----------------2 到 6 ----------------------------*/
  377.                 else if((MoveTimeCnt > (priod+hc_time))&&(MoveTimeCnt < (2.0 * priod + hc_time)))
  378.                 {
  379.                         Normalization = (float)(MoveTimeCnt-(priod+hc_time)) / priod;         //對(duì)板球周期歸一化
  380.            if(Normalization>=1.0)
  381.                  {
  382.                   Normalization = 1.0;
  383.                  }
  384.     set_x = 254.0 - (91.0 * Normalization);//  x = 72 ,y = 28;
  385.                 set_y = 116.0 - (91.0 * Normalization) ;       
  386.                  
  387.                 PID_M1_SetPoint(set_x);        //x的期望值
  388.           PID_M1_SetKp(6.2);
  389.           PID_M1_SetKi(0.01);
  390.           PID_M1_SetKd(100);
  391.     PID_M2_SetPoint(set_y);        //y的期望值
  392.           PID_M2_SetKp(6.1);
  393.           PID_M2_SetKi(0.01);
  394.           PID_M2_SetKd(100);
  395.                 }
  396.         /*-----------------6 到 9 ----------------------------*/
  397.                 else if(MoveTimeCnt>( 2.0 * priod + hc_time ))
  398.                 {
  399.                         Normalization = (float)(MoveTimeCnt-(2.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  400.            if(Normalization>=1.0)
  401.                  {
  402.                   Normalization = 1.0;
  403.                  }
  404.     set_x = 163.0 - (91.0 * Normalization);//  x = 163 ,y = 25;
  405.                 set_y = 25.0 - (0.0 * Normalization) ;       
  406.                  
  407.                 PID_M1_SetPoint(set_x);        //x的期望值
  408.           PID_M1_SetKp(8.2);
  409.           PID_M1_SetKi(0.02);
  410.           PID_M1_SetKd(100);
  411.     PID_M2_SetPoint(set_y);        //y的期望值
  412.           PID_M2_SetKp(8.1);
  413.           PID_M2_SetKi(0.02);
  414.           PID_M2_SetKd(100);       
  415.                 }
  416.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  417.                
  418.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  419.        
  420.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;     
  421.        
  422.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  423.        
  424.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  425.        
  426.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  427.   kz_hs(PWM1,PWM2);//控制函數(shù)

  428. }
  429. void MODE6(void) //任務(wù)六 走 四個(gè)點(diǎn) 走不了對(duì)角線
  430. {

  431.           const  float priod = 1500.0;  //周期(毫秒)
  432.           const  uint32_t x_1 = 219;
  433.           const  uint32_t y_1 = 260;
  434.           const  uint32_t need_x = 121;
  435.           const  uint32_t need_x_erro = 98;
  436.           const  uint32_t need_y = 158;
  437.           const  uint32_t need_y_erro = 102;
  438.           static uint32_t MoveTimeCnt = 0;
  439.           float  Normalization = 0.0;
  440.           float  set_x,set_y;
  441.           float  hc_time = 100;
  442.        
  443.     MoveTimeCnt += 5;                                                                       //每5ms運(yùn)算1次

  444. /*----------------------180------------a到b-----------------------*/
  445. if(((need_x1-need_x2)==180)||((need_x1-need_x2)==-180)||((need_y1-need_y2)==180)||((need_y1-need_y2)==-180))
  446. {
  447.         if(MoveTimeCnt<=priod)
  448.         {       
  449.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  450.            if(Normalization>=1.0)
  451.                  {
  452.                   Normalization = 1.0;
  453.                  }
  454.                 new_x1 = (need_x1 + need_x2)/2.0 ;  //209-209
  455.                 new_y1 = (need_y1 + need_y2)/2.0 ;  //209-209
  456.                
  457.     new_x1=  (new_x1 + 163) /2.0;  //209
  458.                 new_y1 = (new_y1 + 117)/2.0 ; //117
  459.                
  460.     x1_1error = new_x1 - need_x1;    //163-250 = -87
  461.                 y1_1error = new_y1 - need_y1;    //72-28  = 44
  462.                  
  463.     set_x = need_x1 + (x1_1error * Normalization); //250 + -87 = 163
  464.                 set_y = need_y1 + (y1_1error * Normalization) ;//26 + 44        = 70
  465.                  
  466.                 PID_M1_SetPoint(set_x);        //x的期望值
  467.           PID_M1_SetKp(8.2);
  468.           PID_M1_SetKi(0.02);
  469.           PID_M1_SetKd(100);
  470.     PID_M2_SetPoint(set_y);        //y的期望值
  471.           PID_M2_SetKp(8.1);
  472.           PID_M2_SetKi(0.02);
  473.           PID_M2_SetKd(100);                                  
  474.         }
  475.         else if((MoveTimeCnt > (priod + hc_time) )&&( MoveTimeCnt < (2.0 * priod + hc_time)))
  476.                 {
  477.                         Normalization = (float)(MoveTimeCnt- priod ) / priod;         //對(duì)單擺周期歸一化
  478.            if(Normalization>=1.0)
  479.                  {
  480.                   Normalization = 1.0;
  481.                  }
  482.     x1_error = need_x2  - new_x1 ;
  483.                 y1_error = need_y2  - new_y1;
  484.                  
  485.     set_x = new_x1  + (x1_error* Normalization);//  x = 254 ,y = 116;
  486.                 set_y = new_y1  + (y1_error * Normalization) ;       
  487.                  
  488.                 PID_M1_SetPoint(set_x);        //x的期望值
  489.           PID_M1_SetKp(8.2);
  490.           PID_M1_SetKi(0.02);
  491.           PID_M1_SetKd(100);
  492.     PID_M2_SetPoint(set_y);        //y的期望值
  493.           PID_M2_SetKp(8.1);
  494.           PID_M2_SetKi(0.02);
  495.           PID_M2_SetKd(100);                                        
  496.    }       
  497. }
  498. else if(MoveTimeCnt<= 2.0 * priod )
  499.         {       
  500.                  Normalization = (float)MoveTimeCnt /  2.0 * priod;         //對(duì)板球周期歸一化
  501.            if(Normalization>=1.0)
  502.                  {
  503.                   Normalization = 1.0;
  504.                  }
  505.                 x1_error = need_x1 - need_x2;  //209-209
  506.     y1_error = need_y1 - need_y2;         // 182-71
  507.     set_x = need_x1 - (x1_error * Normalization);//  x = 254 ,y = 116;
  508.                 set_y = need_y1 - (y1_error * Normalization) ;       
  509.                  
  510.                 PID_M1_SetPoint(set_x);        //x的期望值
  511.           PID_M1_SetKp(20.2);
  512.           PID_M1_SetKi(0.01);
  513.           PID_M1_SetKd(100);
  514.     PID_M2_SetPoint(set_y);        //y的期望值
  515.           PID_M2_SetKp(20.1);
  516.           PID_M2_SetKi(0.01);
  517.           PID_M2_SetKd(100);  
  518.         }

  519. /*----------------------180------------b到c-----------------------*/       
  520. if(((need_x1-need_x2)==180)||((need_x1-need_x2)==-180)||((need_y1-need_y2)==180)||((need_y1-need_y2)==-180))
  521. {
  522.          if((MoveTimeCnt > (2.0 * priod+ hc_time) )&&( MoveTimeCnt < (3.0 * priod+ hc_time)))
  523.                 {
  524.                         Normalization = (float)(MoveTimeCnt- (2.0 * priod- hc_time)) / priod;         //對(duì)板球周期歸一化
  525.            if(Normalization>=1.0)
  526.                  {
  527.                   Normalization = 1.0;
  528.                  }
  529.                 new_x2 = (need_x2 + need_x3)/2.0 ;  //209-209
  530.                 new_y2 = (need_y2 + need_y3)/2.0 ;  //209-209
  531.                
  532.     new_x2=  (new_x2 + 163) /2.0;  //209
  533.                 new_y2 = (new_y2 + 117)/2.0 ; //117
  534.                
  535.     x2_2error = new_x2 - need_x2;    //163-250 = -87
  536.                 y2_2error = new_y2 - need_y2;    //72-28  = 44
  537.                  
  538.     set_x = need_x2 + (x2_2error * Normalization); //250 + -87 = 163
  539.                 set_y = need_y2 + (y2_2error * Normalization) ;//26 + 44        = 70
  540.                  
  541.                 PID_M1_SetPoint(set_x);        //x的期望值
  542.           PID_M1_SetKp(8.2);
  543.           PID_M1_SetKi(0.02);
  544.           PID_M1_SetKd(100);
  545.     PID_M2_SetPoint(set_y);        //y的期望值
  546.           PID_M2_SetKp(8.1);
  547.           PID_M2_SetKi(0.02);
  548.           PID_M2_SetKd(100);                                           
  549.         }
  550.         else if((MoveTimeCnt > (3.0 * priod + hc_time))&&( MoveTimeCnt < (4.0 * priod+ hc_time)))
  551.                 {
  552.                         Normalization = (float)(MoveTimeCnt- (3.0*priod- hc_time) ) / priod;         //對(duì)單擺周期歸一化
  553.            if(Normalization>=1.0)
  554.                  {
  555.                   Normalization = 1.0;
  556.                  }
  557.     x2_error = need_x3  - new_x2 ;
  558.                 y2_error = need_y3  - new_y2;
  559.                  
  560.     set_x = new_x2  + (x2_error* Normalization);//  x = 254 ,y = 116;
  561.                 set_y = new_y2  + (y2_error * Normalization) ;       
  562.                  
  563.                 PID_M1_SetPoint(set_x);        //x的期望值
  564.           PID_M1_SetKp(8.2);
  565.           PID_M1_SetKi(0.02);
  566.           PID_M1_SetKd(100);
  567.     PID_M2_SetPoint(set_y);        //y的期望值
  568.           PID_M2_SetKp(8.1);
  569.           PID_M2_SetKi(0.02);
  570.           PID_M2_SetKd(100);                                       
  571.    }       
  572. }
  573. else if((MoveTimeCnt > (2.0 * priod + hc_time))&&(MoveTimeCnt < (4.0 * priod + hc_time)))
  574.                 {
  575.                         Normalization = (float)(MoveTimeCnt-(2.0 * priod+ hc_time)) / 2.0 * priod;         //對(duì)板球周期歸一化
  576.            if(Normalization>=1.0)
  577.                  {
  578.                   Normalization = 1.0;
  579.                  }
  580.                 x2_error = need_x2 - need_x3; // 209- 118
  581.     y2_error = need_y2 - need_y3;        // 71 -71
  582.     set_x = need_x2 - (x2_error * Normalization);//  x = 72 ,y = 28;
  583.                 set_y = need_y2  -  (y2_error * Normalization) ;       
  584.                  
  585.                 PID_M1_SetPoint(set_x);        //x的期望值
  586.           PID_M1_SetKp(20.2);
  587.           PID_M1_SetKi(0.01);
  588.           PID_M1_SetKd(100);
  589.     PID_M2_SetPoint(set_y);        //y的期望值
  590.           PID_M2_SetKp(20.1);
  591.           PID_M2_SetKi(0.01);
  592.           PID_M2_SetKd(100);                               
  593.                 }
  594. /*----------------------180------------c到d-----------------------*/       
  595. if(((need_x1-need_x2)==180)||((need_x1-need_x2)==-180)||((need_y1-need_y2)==180)||((need_y1-need_y2)==-180))
  596. {
  597.                  if((MoveTimeCnt > (4.0 * priod+ hc_time) )&&( MoveTimeCnt < (5.0 * priod+ hc_time)))
  598.                 {
  599.                         Normalization = (float)(MoveTimeCnt- (4.0 * priod- hc_time)) / priod;         //對(duì)板球周期歸一化
  600.            if(Normalization>=1.0)
  601.                  {
  602.                   Normalization = 1.0;
  603.                  }
  604.                 new_x3 = (need_x3 + need_x4)/2.0 ;  //209-209
  605.                 new_y3 = (need_y3 + need_y4)/2.0 ;  //209-209
  606.                
  607.     new_x3=  (new_x3 + 163) /2.0;  //209
  608.                 new_y3 = (new_y3 + 117)/2.0 ; //117
  609.                
  610.     x3_3error = new_x3 - need_x3;    //163-250 = -87
  611.                 y3_3error = new_y3 - need_y3;    //72-28  = 44
  612.                  
  613.     set_x = need_x3 + (x3_3error * Normalization); //250 + -87 = 163
  614.                 set_y = need_y3 + (y3_3error * Normalization) ;//26 + 44        = 70
  615.                  
  616.                 PID_M1_SetPoint(set_x);        //x的期望值
  617.           PID_M1_SetKp(8.2);
  618.           PID_M1_SetKi(0.02);
  619.           PID_M1_SetKd(100);
  620.     PID_M2_SetPoint(set_y);        //y的期望值
  621.           PID_M2_SetKp(8.1);
  622.           PID_M2_SetKi(0.02);
  623.           PID_M2_SetKd(100);                                                  
  624.         }
  625.         else if((MoveTimeCnt > (5.0 * priod + hc_time))&&( MoveTimeCnt < (6.0 * priod+ hc_time)))
  626.                 {
  627.                         Normalization = (float)(MoveTimeCnt- (5.0 * priod - hc_time)) / priod;         //對(duì)單擺周期歸一化
  628.            if(Normalization>=1.0)
  629.                  {
  630.                   Normalization = 1.0;
  631.                  }
  632.     x3_error = need_x4  - new_x3 ;
  633.                 y3_error = need_y4  - new_y3;
  634.                  
  635.     set_x = new_x3  + (x3_error* Normalization);//  x = 254 ,y = 116;
  636.                 set_y = new_y3  + (y3_error * Normalization) ;       
  637.                  
  638.                 PID_M1_SetPoint(set_x);        //x的期望值
  639.           PID_M1_SetKp(8.2);
  640.           PID_M1_SetKi(0.02);
  641.           PID_M1_SetKd(100);
  642.     PID_M2_SetPoint(set_y);        //y的期望值
  643.           PID_M2_SetKp(8.1);
  644.           PID_M2_SetKi(0.02);
  645.           PID_M2_SetKd(100);                       
  646.    }       
  647. }                
  648.           else if(MoveTimeCnt> (6.0 * priod + hc_time ))
  649.                 {
  650.                         Normalization = (float)(MoveTimeCnt-(4.0 * priod+ hc_time) ) / priod;         //對(duì)板球周期歸一化
  651.            if(Normalization>=1.0)
  652.                  {
  653.                   Normalization = 1.0;
  654.                  }
  655.                 x3_error = need_x3 - need_x4;  //118-118
  656.     y3_error = need_y3 - need_y4;         //73 - 182
  657.     set_x = need_x3 - (x3_error * Normalization);//  x = 163 ,y = 25;
  658.                 set_y = need_y3 - (y3_error * Normalization) ;       
  659.                  
  660.                 PID_M1_SetPoint(set_x);        //x的期望值
  661.           PID_M1_SetKp(20.2);
  662.           PID_M1_SetKi(0.01);
  663.           PID_M1_SetKd(100);
  664.     PID_M2_SetPoint(set_y);        //y的期望值
  665.           PID_M2_SetKp(20.1);
  666.           PID_M2_SetKi(0.01);
  667.           PID_M2_SetKd(100);                                                          
  668.                 }               

  669.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  670.                
  671.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  672.        
  673.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;      
  674.        
  675.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  676.        
  677.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  678.        
  679.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  680.   kz_hs(PWM1,PWM2);//控制函數(shù)

  681. }
  682. void MODE7(void) //任務(wù)七 轉(zhuǎn) 3 圈 回 9
  683. {
  684.           const  float priod = 1000.0;  //周期(毫秒)
  685.           const  uint32_t x_1 = 219;
  686.           const  uint32_t y_1 = 260;
  687.           const  uint32_t need_x = 121;
  688.           const  uint32_t need_x_erro = 98;
  689.           const  uint32_t need_y = 158;
  690.           const  uint32_t need_y_erro = 102;
  691.           static uint32_t MoveTimeCnt = 0;
  692.           float  Normalization = 0.0;
  693.     float  set_x,set_y;
  694.           float  hc_time = 1500;
  695.        
  696.     MoveTimeCnt += 5;                                                                       //每5ms運(yùn)算1次
  697.        
  698.         /*--------------------4-------------------------*/
  699.         if(MoveTimeCnt<=priod)
  700.         {
  701.                
  702.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  703.            if(Normalization>=1.0)
  704.                  {
  705.                   Normalization = 1.0;
  706.                  }
  707.     set_x = 163.0 - (0.0 * Normalization);//  x = 72 ,y = 28;
  708.                 set_y = 207.0 - (45.0 * Normalization) ;       
  709.                  
  710.                 PID_M1_SetPoint(set_x);        //x的期望值
  711.           PID_M1_SetKp(6.3);
  712.           PID_M1_SetKi(0.01);
  713.           PID_M1_SetKd(100);
  714.     PID_M2_SetPoint(set_y);        //y的期望值
  715.           PID_M2_SetKp(6.2);
  716.           PID_M2_SetKi(0.01);
  717.           PID_M2_SetKd(100);                 
  718.         }
  719.         /*---------------------R1_1-----------------------*/
  720.   else if((MoveTimeCnt>priod)&&(MoveTimeCnt<2.0*priod))   
  721.                 {
  722.                         Normalization = (float)(MoveTimeCnt-priod) / priod;         //對(duì)板球周期歸一化
  723.            if(Normalization>=1.0)
  724.                  {
  725.                   Normalization = 1.0;
  726.                  }
  727.     set_x = 163.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  728.                 set_y = 162.0 - (45.0 * Normalization) ;       
  729.                  
  730.                 PID_M1_SetPoint(set_x);        //x的期望值
  731.           PID_M1_SetKp(6.2);
  732.           PID_M1_SetKi(0.01);
  733.           PID_M1_SetKd(100);
  734.     PID_M2_SetPoint(set_y);        //y的期望值
  735.           PID_M2_SetKp(6.1);
  736.           PID_M2_SetKi(0.01);
  737.           PID_M2_SetKd(100);
  738.                 }
  739.                 /*---------------------R1_2-----------------------*/
  740.                   else if((MoveTimeCnt>2.0*priod)&&(MoveTimeCnt<3.0*priod))  
  741.                 {
  742.                         Normalization = (float)(MoveTimeCnt-2.0*priod) / priod;         //對(duì)板球周期歸一化
  743.            if(Normalization>=1.0)
  744.                  {
  745.                   Normalization = 1.0;
  746.                  }
  747.     set_x = 209.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  748.                 set_y = 117.0 - (46.0 * Normalization) ;       
  749.                  
  750.                 PID_M1_SetPoint(set_x);        //x的期望值
  751.           PID_M1_SetKp(6.2);
  752.           PID_M1_SetKi(0.01);
  753.           PID_M1_SetKd(100);
  754.     PID_M2_SetPoint(set_y);        //y的期望值
  755.           PID_M2_SetKp(6.1);
  756.           PID_M2_SetKi(0.01);
  757.           PID_M2_SetKd(100);
  758.                 }
  759.                 /*---------------------R1_3-----------------------*/
  760.                 else if((MoveTimeCnt>(4.0*priod))&&(MoveTimeCnt<(5.0*priod)))  //4
  761.                 {
  762.                         Normalization = (float)(MoveTimeCnt-4.0*priod) / priod;         //對(duì)板球周期歸一化
  763.            if(Normalization>=1.0)
  764.                  {
  765.                   Normalization = 1.0;
  766.                  }
  767.     set_x = 163.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  768.                 set_y = 71.0 - (-47.0 * Normalization) ;       
  769.                  
  770.                 PID_M1_SetPoint(set_x);        //x的期望值
  771.           PID_M1_SetKp(6.2);
  772.           PID_M1_SetKi(0.01);
  773.           PID_M1_SetKd(100);
  774.     PID_M2_SetPoint(set_y);        //y的期望值
  775.           PID_M2_SetKp(6.1);
  776.           PID_M2_SetKi(0.01);
  777.           PID_M2_SetKd(100);
  778.                 }
  779.                 /*---------------------R1_4-----------------------*/
  780.                  else if((MoveTimeCnt>5.0*priod)&&(MoveTimeCnt<6.0*priod))                        
  781.                 {
  782.                         Normalization = (float)(MoveTimeCnt-5.0*priod) / priod;         //對(duì)板球周期歸一化
  783.            if(Normalization>=1.0)
  784.                  {
  785.                   Normalization = 1.0;
  786.                  }
  787.     set_x = 117.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  788.                 set_y = 118.0 - (-47.0 * Normalization) ;       
  789.                  
  790.                 PID_M1_SetPoint(set_x);        //x的期望值
  791.           PID_M1_SetKp(6.2);
  792.           PID_M1_SetKi(0.01);
  793.           PID_M1_SetKd(100);
  794.     PID_M2_SetPoint(set_y);        //y的期望值
  795.           PID_M2_SetKp(6.1);
  796.           PID_M2_SetKi(0.01);
  797.           PID_M2_SetKd(100);
  798.                 }
  799.                 /*---------------------R2_1-----------------------*/
  800.    else if((MoveTimeCnt>6.0*priod)&&(MoveTimeCnt<7.0*priod))   
  801.                 {
  802.                         Normalization = (float)(MoveTimeCnt-6.0*priod) / priod;         //對(duì)板球周期歸一化
  803.            if(Normalization>=1.0)
  804.                  {
  805.                   Normalization = 1.0;
  806.                  }
  807.     set_x = 163.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  808.                 set_y = 162.0 - (45.0 * Normalization) ;       
  809.                  
  810.                 PID_M1_SetPoint(set_x);        //x的期望值
  811.           PID_M1_SetKp(6.2);
  812.           PID_M1_SetKi(0.01);
  813.           PID_M1_SetKd(100);
  814.     PID_M2_SetPoint(set_y);        //y的期望值
  815.           PID_M2_SetKp(6.1);
  816.           PID_M2_SetKi(0.01);
  817.           PID_M2_SetKd(100);
  818.                 }
  819.                 /*---------------------R2_2-----------------------*/
  820.                   else if((MoveTimeCnt>7.0*priod)&&(MoveTimeCnt<8.0*priod))  
  821.                 {
  822.                         Normalization = (float)(MoveTimeCnt-7.0*priod) / priod;         //對(duì)板球周期歸一化
  823.            if(Normalization>=1.0)
  824.                  {
  825.                   Normalization = 1.0;
  826.                  }
  827.     set_x = 209.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  828.                 set_y = 117.0 - (46.0 * Normalization) ;       
  829.                  
  830.                 PID_M1_SetPoint(set_x);        //x的期望值
  831.           PID_M1_SetKp(6.2);
  832.           PID_M1_SetKi(0.01);
  833.           PID_M1_SetKd(100);
  834.     PID_M2_SetPoint(set_y);        //y的期望值
  835.           PID_M2_SetKp(6.1);
  836.           PID_M2_SetKi(0.01);
  837.           PID_M2_SetKd(100);
  838.                 }
  839.                 /*---------------------R2_3-----------------------*/
  840.                 else if((MoveTimeCnt>(8.0*priod))&&(MoveTimeCnt<(9.0*priod)))  //4
  841.                 {
  842.                         Normalization = (float)(MoveTimeCnt-8.0*priod) / priod;         //對(duì)板球周期歸一化
  843.            if(Normalization>=1.0)
  844.                  {
  845.                   Normalization = 1.0;
  846.                  }
  847.     set_x = 163.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  848.                 set_y = 71.0 - (-47.0 * Normalization) ;       
  849.                  
  850.                 PID_M1_SetPoint(set_x);        //x的期望值
  851.           PID_M1_SetKp(6.2);
  852.           PID_M1_SetKi(0.01);
  853.           PID_M1_SetKd(100);
  854.     PID_M2_SetPoint(set_y);        //y的期望值
  855.           PID_M2_SetKp(6.1);
  856.           PID_M2_SetKi(0.01);
  857.           PID_M2_SetKd(100);
  858.                 }
  859.                 /*---------------------R2_4-----------------------*/
  860.                  else if((MoveTimeCnt>9.0*priod)&&(MoveTimeCnt<10.0*priod))                        
  861.                 {
  862.                         Normalization = (float)(MoveTimeCnt-9.0*priod) / priod;         //對(duì)板球周期歸一化
  863.            if(Normalization>=1.0)
  864.                  {
  865.                   Normalization = 1.0;
  866.                  }
  867.     set_x = 117.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  868.                 set_y = 118.0 - (-47.0 * Normalization) ;       
  869.                  
  870.                 PID_M1_SetPoint(set_x);        //x的期望值
  871.           PID_M1_SetKp(6.2);
  872.           PID_M1_SetKi(0.01);
  873.           PID_M1_SetKd(100);
  874.     PID_M2_SetPoint(set_y);        //y的期望值
  875.           PID_M2_SetKp(6.1);
  876.           PID_M2_SetKi(0.01);
  877.           PID_M2_SetKd(100);
  878.                 }
  879.                                 /*---------------------R3_1-----------------------*/
  880.    else if((MoveTimeCnt>10.0*priod)&&(MoveTimeCnt<11.0*priod))   
  881.                 {
  882.                         Normalization = (float)(MoveTimeCnt-10.0*priod) / priod;         //對(duì)板球周期歸一化
  883.            if(Normalization>=1.0)
  884.                  {
  885.                   Normalization = 1.0;
  886.                  }
  887.     set_x = 163.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  888.                 set_y = 162.0 - (45.0 * Normalization) ;       
  889.                  
  890.                 PID_M1_SetPoint(set_x);        //x的期望值
  891.           PID_M1_SetKp(6.2);
  892.           PID_M1_SetKi(0.01);
  893.           PID_M1_SetKd(100);
  894.     PID_M2_SetPoint(set_y);        //y的期望值
  895.           PID_M2_SetKp(6.1);
  896.           PID_M2_SetKi(0.01);
  897.           PID_M2_SetKd(100);
  898.                 }
  899.                 /*---------------------R3_2-----------------------*/
  900.                   else if((MoveTimeCnt>11.0*priod)&&(MoveTimeCnt<12.0*priod))  
  901.                 {
  902.                         Normalization = (float)(MoveTimeCnt-11.0*priod) / priod;         //對(duì)板球周期歸一化
  903.            if(Normalization>=1.0)
  904.                  {
  905.                   Normalization = 1.0;
  906.                  }
  907.     set_x = 209.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  908.                 set_y = 117.0 - (46.0 * Normalization) ;       
  909.                  
  910.                 PID_M1_SetPoint(set_x);        //x的期望值
  911.           PID_M1_SetKp(6.2);
  912.           PID_M1_SetKi(0.01);
  913.           PID_M1_SetKd(100);
  914.     PID_M2_SetPoint(set_y);        //y的期望值
  915.           PID_M2_SetKp(6.1);
  916.           PID_M2_SetKi(0.01);
  917.           PID_M2_SetKd(100);
  918.                 }
  919.                 /*---------------------R3_3-----------------------*/
  920.                 else if((MoveTimeCnt>(12.0*priod))&&(MoveTimeCnt<(13.0*priod)))  //4
  921.                 {
  922.                         Normalization = (float)(MoveTimeCnt-12.0*priod) / priod;         //對(duì)板球周期歸一化
  923.            if(Normalization>=1.0)
  924.                  {
  925.                   Normalization = 1.0;
  926.                  }
  927.     set_x = 163.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  928.                 set_y = 71.0 - (-47.0 * Normalization) ;       
  929.                  
  930.                 PID_M1_SetPoint(set_x);        //x的期望值
  931.           PID_M1_SetKp(6.2);
  932.           PID_M1_SetKi(0.01);
  933.           PID_M1_SetKd(100);
  934.     PID_M2_SetPoint(set_y);        //y的期望值
  935.           PID_M2_SetKp(6.1);
  936.           PID_M2_SetKi(0.01);
  937.           PID_M2_SetKd(100);
  938.                 }
  939.                 /*---------------------R3_4-----------------------*/
  940.                  else if((MoveTimeCnt>13.0*priod)&&(MoveTimeCnt<14.0*priod))                        
  941.                 {
  942.                         Normalization = (float)(MoveTimeCnt-13.0*priod) / priod;         //對(duì)板球周期歸一化
  943.            if(Normalization>=1.0)
  944.                  {
  945.                   Normalization = 1.0;
  946.                  }
  947.     set_x = 117.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  948.                 set_y = 118.0 - (-47.0 * Normalization) ;       
  949.                  
  950.                 PID_M1_SetPoint(set_x);        //x的期望值
  951.           PID_M1_SetKp(6.2);
  952.           PID_M1_SetKi(0.01);
  953.           PID_M1_SetKd(100);
  954.     PID_M2_SetPoint(set_y);        //y的期望值
  955.           PID_M2_SetKp(6.1);
  956.           PID_M2_SetKi(0.01);
  957.           PID_M2_SetKd(100);
  958.                 }
  959.                         /*---------------------R4_1-----------------------*/
  960.    else if((MoveTimeCnt>14.0*priod)&&(MoveTimeCnt<15.0*priod))   
  961.                 {
  962.                         Normalization = (float)(MoveTimeCnt-14.0*priod) / priod;         //對(duì)板球周期歸一化
  963.            if(Normalization>=1.0)
  964.                  {
  965.                   Normalization = 1.0;
  966.                  }
  967.     set_x = 163.0 - (-46.0 * Normalization);//  x = 72 ,y = 28;
  968.                 set_y = 162.0 - (45.0 * Normalization) ;       
  969.                  
  970.                 PID_M1_SetPoint(set_x);        //x的期望值
  971.           PID_M1_SetKp(6.2);
  972.           PID_M1_SetKi(0.01);
  973.           PID_M1_SetKd(100);
  974.     PID_M2_SetPoint(set_y);        //y的期望值
  975.           PID_M2_SetKp(6.1);
  976.           PID_M2_SetKi(0.01);
  977.           PID_M2_SetKd(100);
  978.                 }
  979.                 /*---------------------R4_2-----------------------*/
  980.                   else if((MoveTimeCnt>15.0*priod)&&(MoveTimeCnt<16.0*priod))  
  981.                 {
  982.                         Normalization = (float)(MoveTimeCnt-15.0*priod) / priod;         //對(duì)板球周期歸一化
  983.            if(Normalization>=1.0)
  984.                  {
  985.                   Normalization = 1.0;
  986.                  }
  987.     set_x = 209.0 - (46.0 * Normalization);//  x = 72 ,y = 28;
  988.                 set_y = 117.0 - (46.0 * Normalization) ;       
  989.                  
  990.                 PID_M1_SetPoint(set_x);        //x的期望值
  991.           PID_M1_SetKp(6.2);
  992.           PID_M1_SetKi(0.01);
  993.           PID_M1_SetKd(100);
  994.     PID_M2_SetPoint(set_y);        //y的期望值
  995.           PID_M2_SetKp(6.1);
  996.           PID_M2_SetKi(0.01);
  997.           PID_M2_SetKd(100);
  998.                 }
  999.                                 /*---------------------回九-----------------------*/
  1000.                   else if((MoveTimeCnt>16.0*priod)&&(MoveTimeCnt<17.0*priod))  
  1001.                 {
  1002.                         Normalization = (float)(MoveTimeCnt-16.0*priod) / priod;         //對(duì)板球周期歸一化
  1003.            if(Normalization>=1.0)
  1004.                  {
  1005.                   Normalization = 1.0;
  1006.                  }
  1007.     set_x = 163.0 - (91.0 * Normalization);//  x = 72 ,y = 28;
  1008.                 set_y = 71.0 - (43.0 * Normalization) ;       
  1009.                  
  1010.                 PID_M1_SetPoint(set_x);        //x的期望值
  1011.           PID_M1_SetKp(6.2);
  1012.           PID_M1_SetKi(0.01);
  1013.           PID_M1_SetKd(100);
  1014.     PID_M2_SetPoint(set_y);        //y的期望值
  1015.           PID_M2_SetKp(6.1);
  1016.           PID_M2_SetKi(0.01);
  1017.           PID_M2_SetKd(100);
  1018.                 }
  1019.                
  1020.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  1021.                
  1022.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  1023.        
  1024.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;     
  1025.        
  1026.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  1027.        
  1028.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  1029.        
  1030.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  1031.   kz_hs(PWM1,PWM2);

  1032. }
  1033. void MODE8(void) //發(fā)揮
  1034. {
  1035.        
  1036. //                float  sx_1need = 209.0;
  1037. //          float  sx_2need = 254.0;
  1038. //    float  sx_3need = 209.0;
  1039. //          float  sx_4need = 163.0;               
  1040. //                float  sx_5need = 117.0;
  1041. //          float  sx_6need = 70.0;
  1042. //                float  sx_7need = 118.0;
  1043. //               
  1044. //                float  sy_1need = 71.0 ;
  1045. //          float  sy_2need = 116.0;
  1046. //    float  sy_3need = 161.0;
  1047. //          float  sy_4need = 117.0;               
  1048. //                float  sy_5need = 71.0;
  1049. //          float  sy_6need = 118.0;
  1050. //                float  sy_7need = 162.0;
  1051.           const  float priod = 2000.0;  //周期(毫秒)
  1052.           const  uint32_t x_1 = 219;
  1053.           const  uint32_t y_1 = 260;
  1054.           const  uint32_t need_x = 121;
  1055.           const  uint32_t need_x_erro = 98;
  1056.           const  uint32_t need_y = 158;
  1057.           const  uint32_t need_y_erro = 102;
  1058.           static uint32_t MoveTimeCnt = 0;
  1059.           float  Normalization = 0.0;
  1060.           float  set_x,set_y;
  1061.           float  hc_time = 500;
  1062.        
  1063.     MoveTimeCnt += 5;                                                                       //每5ms運(yùn)算1次
  1064.         /*-----------------A 到 B ----------------------------*/
  1065.        
  1066.        
  1067.         if(MoveTimeCnt<=priod)
  1068.         {       
  1069.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  1070.            if(Normalization>=1.0)
  1071.                  {
  1072.                   Normalization = 1.0;
  1073.                  }
  1074.                 sx_1error = sx_1need - sx_2need;  //209-209
  1075.     sy_1error = sy_1need - sy_2need;         // 182-71
  1076.     set_x = sx_1need - (sx_1error * Normalization);//  x = 254 ,y = 116;
  1077.                 set_y = sy_1need - (sy_1error * Normalization) ;       
  1078.                  
  1079.                 PID_M1_SetPoint(set_x);        //x的期望值
  1080.           PID_M1_SetKp(8.2);
  1081.           PID_M1_SetKi(0.04);
  1082.           PID_M1_SetKd(100);
  1083.     PID_M2_SetPoint(set_y);        //y的期望值
  1084.           PID_M2_SetKp(8.1);
  1085.           PID_M2_SetKi(0.04);
  1086.           PID_M2_SetKd(100);                 
  1087.         }
  1088.         /*-----------------B 到 C ----------------------------*/
  1089.                 else if((MoveTimeCnt > (priod+hc_time))&&(MoveTimeCnt < (2.0 * priod + hc_time)))
  1090.                 {
  1091.                         Normalization = (float)(MoveTimeCnt-(priod+hc_time)) / priod;         //對(duì)板球周期歸一化
  1092.            if(Normalization>=1.0)
  1093.                  {
  1094.                   Normalization = 1.0;
  1095.                  }
  1096.                  
  1097.                 sx_2error = sx_2need - sx_3need;  //209-209
  1098.     sy_2error = sy_2need - sy_3need;        // 182-71
  1099.     set_x = sx_2need - (sx_2error * Normalization);//  x = 254 ,y = 116;
  1100.                 set_y = sy_2need - (sy_2error * Normalization) ;       
  1101.                  
  1102.                 PID_M1_SetPoint(set_x);        //x的期望值
  1103.           PID_M1_SetKp(8.2);
  1104.           PID_M1_SetKi(0.04);
  1105.           PID_M1_SetKd(100);
  1106.     PID_M2_SetPoint(set_y);        //y的期望值
  1107.           PID_M2_SetKp(8.1);
  1108.           PID_M2_SetKi(0.04);
  1109.           PID_M2_SetKd(100);       
  1110.                 }
  1111.         /*-----------------C 到 D ----------------------------*/
  1112.                         else if((MoveTimeCnt > (2.0* priod+hc_time))&&(MoveTimeCnt < (3.0 * priod + hc_time)))
  1113.                 {
  1114.                         Normalization = (float)(MoveTimeCnt-(2.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  1115.            if(Normalization>=1.0)
  1116.                  {
  1117.                   Normalization = 1.0;
  1118.                  }
  1119.                  
  1120.                 sx_3error = sx_3need - sx_4need;  //209-209
  1121.     sy_3error = sy_3need - sy_4need;        // 182-71
  1122.     set_x = sx_3need - (sx_3error * Normalization);//  x = 254 ,y = 116;
  1123.                 set_y = sy_3need - (sy_3error * Normalization) ;       
  1124.                  
  1125.                 PID_M1_SetPoint(set_x);        //x的期望值
  1126.           PID_M1_SetKp(8.2);
  1127.           PID_M1_SetKi(0.04);
  1128.           PID_M1_SetKd(100);
  1129.     PID_M2_SetPoint(set_y);        //y的期望值
  1130.           PID_M2_SetKp(8.1);
  1131.           PID_M2_SetKi(0.04);
  1132.           PID_M2_SetKd(100);       
  1133.                 }
  1134.                         else if((MoveTimeCnt > (3.0* priod+hc_time))&&(MoveTimeCnt < (4.0 * priod + hc_time)))
  1135.                 {
  1136.                         Normalization = (float)(MoveTimeCnt-(3.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  1137.            if(Normalization>=1.0)
  1138.                  {
  1139.                   Normalization = 1.0;
  1140.                  }
  1141.                  
  1142.                 sx_4error = sx_4need - sx_5need;  //209-209
  1143.     sy_4error = sy_4need - sy_5need;        // 182-71
  1144.     set_x = sx_4need - (sx_4error * Normalization);//  x = 254 ,y = 116;
  1145.                 set_y = sy_4need - (sy_4error * Normalization) ;       
  1146.                  
  1147.                 PID_M1_SetPoint(set_x);        //x的期望值
  1148.           PID_M1_SetKp(8.2);
  1149.           PID_M1_SetKi(0.04);
  1150.           PID_M1_SetKd(100);
  1151.     PID_M2_SetPoint(set_y);        //y的期望值
  1152.           PID_M2_SetKp(8.1);
  1153.           PID_M2_SetKi(0.04);
  1154.           PID_M2_SetKd(100);       
  1155.                 }
  1156.                                 else if((MoveTimeCnt > (4.0* priod+hc_time))&&(MoveTimeCnt < (5.0 * priod + hc_time)))
  1157.                 {
  1158.                         Normalization = (float)(MoveTimeCnt-(4.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  1159.            if(Normalization>=1.0)
  1160.                  {
  1161.                   Normalization = 1.0;
  1162.                  }
  1163.                  
  1164.                 sx_5error = sx_5need - sx_6need;  //209-209
  1165.     sy_5error = sy_5need - sy_6need;        // 182-71
  1166.     set_x = sx_5need - (sx_5error * Normalization);//  x = 254 ,y = 116;
  1167.                 set_y = sy_5need - (sy_5error * Normalization) ;       
  1168.                  
  1169.                 PID_M1_SetPoint(set_x);        //x的期望值
  1170.           PID_M1_SetKp(8.2);
  1171.           PID_M1_SetKi(0.04);
  1172.           PID_M1_SetKd(100);
  1173.     PID_M2_SetPoint(set_y);        //y的期望值
  1174.           PID_M2_SetKp(8.1);
  1175.           PID_M2_SetKi(0.04);
  1176.           PID_M2_SetKd(100);       
  1177.                 }
  1178.                         else if((MoveTimeCnt > (5.0* priod+hc_time))&&(MoveTimeCnt < (6.0 * priod + hc_time)))
  1179.                 {
  1180.                         Normalization = (float)(MoveTimeCnt-(5.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  1181.            if(Normalization>=1.0)
  1182.                  {
  1183.                   Normalization = 1.0;
  1184.                  }
  1185.                  
  1186.                 sx_6error = sx_6need - sx_7need;  //209-209
  1187.     sy_6error = sy_6need - sy_7need;         // 182-71
  1188.     set_x = sx_6need - (sx_6error * Normalization);//  x = 254 ,y = 116;
  1189.                 set_y = sy_6need - (sy_6error * Normalization) ;       
  1190.                  
  1191.                 PID_M1_SetPoint(set_x);        //x的期望值
  1192.           PID_M1_SetKp(8.2);
  1193.           PID_M1_SetKi(0.04);
  1194.           PID_M1_SetKd(100);
  1195.     PID_M2_SetPoint(set_y);        //y的期望值
  1196.           PID_M2_SetKp(8.1);
  1197.           PID_M2_SetKi(0.04);
  1198.           PID_M2_SetKd(100);       
  1199.                 }
  1200.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  1201.                
  1202.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  1203.        
  1204.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;     
  1205.        
  1206.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  1207.        
  1208.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  1209.        
  1210.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  1211.   kz_hs(PWM1,PWM2);
  1212. }


  1213. void MODE9(void) //附加 簡(jiǎn)單任務(wù)六
  1214. {
  1215.                 const  float priod = 2000.0;  //周期(毫秒)
  1216.           const  uint32_t x_1 = 219;
  1217.           const  uint32_t y_1 = 260;
  1218.           const  uint32_t need_x = 121;
  1219.           const  uint32_t need_x_erro = 98;
  1220.           const  uint32_t need_y = 158;
  1221.           const  uint32_t need_y_erro = 102;
  1222.           static uint32_t MoveTimeCnt = 0;
  1223.           float  Normalization = 0.0;
  1224.           float  set_x,set_y;
  1225.           float  hc_time = 100;
  1226.        
  1227.     MoveTimeCnt += 5;       
  1228.        
  1229. if(MoveTimeCnt<=priod)
  1230.         {       
  1231.                  Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  1232.            if(Normalization>=1.0)
  1233.                  {
  1234.                   Normalization = 1.0;
  1235.                  }
  1236.                 x1_error = need_x1 - need_x2;  //209-209
  1237.     y1_error = need_y1 - need_y2;         // 182-71
  1238.     set_x = need_x1 - (x1_error * Normalization);//  x = 254 ,y = 116;
  1239.                 set_y = need_y1 - (y1_error * Normalization) ;       
  1240.                  
  1241.                 PID_M1_SetPoint(set_x);        //x的期望值
  1242.           PID_M1_SetKp(8.2);
  1243.           PID_M1_SetKi(0.04);
  1244.           PID_M1_SetKd(100);
  1245.     PID_M2_SetPoint(set_y);        //y的期望值
  1246.           PID_M2_SetKp(8.1);
  1247.           PID_M2_SetKi(0.04);
  1248.           PID_M2_SetKd(100);                 
  1249.         }
  1250.         /*-----------------B 到 C ----------------------------*/
  1251.                 else if((MoveTimeCnt > (priod+hc_time))&&(MoveTimeCnt < (2.0 * priod + hc_time)))
  1252.                 {
  1253.                         Normalization = (float)(MoveTimeCnt-(priod+hc_time)) / priod;         //對(duì)板球周期歸一化
  1254.            if(Normalization>=1.0)
  1255.                  {
  1256.                   Normalization = 1.0;
  1257.                  }
  1258.                 x2_error = need_x2 - need_x3; // 209- 118
  1259.     y2_error = need_y2 - need_y3;        // 71 -71
  1260.     set_x = need_x2 - (x2_error * Normalization);//  x = 72 ,y = 28;
  1261.                 set_y = need_y2  -  (y2_error * Normalization) ;       
  1262.                  
  1263.                 PID_M1_SetPoint(set_x);        //x的期望值
  1264.           PID_M1_SetKp(8.2);
  1265.           PID_M1_SetKi(0.04);
  1266.           PID_M1_SetKd(100);
  1267.     PID_M2_SetPoint(set_y);        //y的期望值
  1268.           PID_M2_SetKp(8.1);
  1269.           PID_M2_SetKi(0.04);
  1270.           PID_M2_SetKd(100);       
  1271.                 }
  1272.         /*-----------------C 到 D ----------------------------*/
  1273.                 else if(MoveTimeCnt>( 2.0 * priod + hc_time ))
  1274.                 {
  1275.                         Normalization = (float)(MoveTimeCnt-(2.0 * priod + hc_time)) / priod;         //對(duì)板球周期歸一化
  1276.            if(Normalization>=1.0)
  1277.                  {
  1278.                   Normalization = 1.0;
  1279.                  }
  1280.                 x3_error = need_x3 - need_x4;  //118-118
  1281.     y3_error = need_y3 - need_y4;         //73 - 182
  1282.     set_x = need_x3 - (x3_error * Normalization);//  x = 163 ,y = 25;
  1283.                 set_y = need_y3 - (y3_error * Normalization) ;       
  1284.                  
  1285.                 PID_M1_SetPoint(set_x);        //x的期望值
  1286.           PID_M1_SetKp(8.2);
  1287.           PID_M1_SetKi(0.04);
  1288.           PID_M1_SetKd(100);
  1289.     PID_M2_SetPoint(set_y);        //y的期望值
  1290.           PID_M2_SetKp(8.1);
  1291.           PID_M2_SetKi(0.04);
  1292.           PID_M2_SetKd(100);       
  1293.                 }






  1294.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  1295.                
  1296.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  1297.        
  1298.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;      //100
  1299.        
  1300.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  1301.        
  1302.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  1303.        
  1304.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  1305.   kz_hs(PWM1,PWM2);//控制函數(shù)
  1306. }
  1307. void MODE10(void)//無(wú)效
  1308. {
  1309.                 const  float priod = 50000.0;  //周期(毫秒)
  1310.           const  uint32_t x_1 = 219;
  1311.           const  uint32_t y_1 = 260;
  1312.           const  uint32_t need_x = 121;
  1313.           const  uint32_t need_x_erro = 98;
  1314.           const  uint32_t need_y = 158;
  1315.           const  uint32_t need_y_erro = 102;
  1316.           static uint32_t MoveTimeCnt = 0;
  1317.           float  Normalization = 0.0;
  1318.           float A = 26.0;
  1319.           float phase = 0.0;
  1320.           float Omega = 0.0;
  1321.                 float set_x = 0.0;
  1322.           float set_y = 0.0;
  1323.                        
  1324.     MoveTimeCnt += 5;       
  1325.           Normalization = (float)MoveTimeCnt / priod;         //對(duì)板球周期歸一化
  1326.     Omega = 2.0*3.14159*Normalization;                         //對(duì)2π進(jìn)行歸一化處理                               
  1327.          
  1328.                 phase = 3.141592/2.0;                 //逆時(shí)針旋轉(zhuǎn)相位差90°

  1329.           set_x = A*sin(Omega) + 163.0;                         //計(jì)算出X方向當(dāng)前擺角
  1330.           set_y = A*sin(Omega+phase) + 117.0;          //計(jì)算出Y方向當(dāng)前擺角
  1331.                
  1332.                 PID_M1_SetPoint(set_x);        //x的期望值
  1333.           PID_M1_SetKp(8.2);
  1334.           PID_M1_SetKi(0.02);
  1335.           PID_M1_SetKd(100);
  1336.     PID_M2_SetPoint(set_y);        //y的期望值
  1337.           PID_M2_SetKp(8.1);
  1338.           PID_M2_SetKi(0.02);
  1339.           PID_M2_SetKd(100);       
  1340.                
  1341.         PWM1=PID_M1_PosLocCalc((float)Resured.x);
  1342.                
  1343.         PWM2=PID_M2_PosLocCalc((float)Resured.y);
  1344.        
  1345.         if(PWM1 > M1_PWMMAX)       PWM1=M1_PWMMAX;      //100
  1346.        
  1347.         if(PWM1 < -M1_PWMMAX)      PWM1=-M1_PWMMAX;
  1348.        
  1349.         if(PWM2 > M2_PWMMAX)       PWM2=M2_PWMMAX;
  1350.        
  1351.         if(PWM2< -M2_PWMMAX)       PWM2=-M2_PWMMAX;

  1352.   kz_hs(PWM1,PWM2);//控制函數(shù)
  1353. }
  1354. /*--------------全國(guó)電子設(shè)計(jì)競(jìng)賽顯示---------------*/
  1355. void QGDZJS(void)
  1356. {
  1357.         OLED_Init();                                    //初始化OLED  
  1358.         OLED_Showone16x16(0,0,1,0);   //全
  1359.         OLED_Showone16x16(16,0,1,1);  //國(guó)
  1360.   OLED_Showone16x16(32,0,1,2);  //電
  1361.         OLED_Showone16x16(48,0,1,3);  //子
  1362.   OLED_Showone16x16(64,0,1,4);  //設(shè)
  1363.         OLED_Showone16x16(80,0,1,5);  //計(jì)
  1364.   OLED_Showone16x16(96,0,1,6);  //競(jìng)
  1365.         OLED_Showone16x16(112,0,1,7); //賽
  1366.         OLED_ShowChar(0,16,'X',16,1); //顯示一個(gè)字符
  1367.         OLED_ShowChar(0,32,'Y',16,1); //顯示一個(gè)字符
  1368.         OLED_Refresh_Gram();                        //oled顯示函數(shù)
  1369. }
  1370. /*---------------------攝像頭初始化----------------*/
  1371. void show_7670(void)
  1372. {
  1373.         u8 lightmode=0,saturation=2,contrast=2;
  1374.         u8 effect=0;         
  1375.   POINT_COLOR=RED;                        //設(shè)置字體為紅色
  1376.          
  1377.         LCD_ShowString(30,50,200,16,16,"ELITE STM32F103 ^_^");       
  1378.   LCD_ShowString(30,210,200,16,16,"OV7670 Init...");          
  1379.         while(OV7670_Init())//初始化OV7670
  1380.         {
  1381.                 LCD_ShowString(30,210,200,16,16,"OV7670 Error!!");
  1382.                 delay_ms(200);
  1383.           LCD_Fill(30,210,239,246,WHITE);
  1384.                 delay_ms(200);
  1385.         }
  1386.         LCD_ShowString(30,210,200,16,16,"OV7670 Init OK");
  1387.         delay_ms(1500);                   
  1388.         OV7670_Light_Mode(lightmode);
  1389.         OV7670_Color_Saturation(saturation);
  1390.         OV7670_Contrast(contrast);
  1391.         OV7670_Special_Effects(effect);         
  1392.        
  1393.         //TIM6_Int_Init(10000,7199);                        //10Khz計(jì)數(shù)頻率,1秒鐘中斷                                                                          
  1394.         EXTI8_Init();                                                //使能定時(shí)器捕獲
  1395.         OV7670_Window_Set(12,176,240,320);        //設(shè)置窗口          
  1396.   OV7670_CS=0;                       
  1397.         LCD_Clear(BLACK);                                                          

  1398. }
  1399. /*---------------------更新LCD顯示-----------------*/
  1400. void camera_refresh(void)
  1401. {
  1402.   
  1403. //   TARGET_CONDI Conditionred={215,240,20,240,30,160,30,30,320,240};        //紅色1   API參數(shù)  hsl的閾值,識(shí)別時(shí)用的
  1404. //         unsigned char  H_MIN;//目標(biāo)最小色調(diào)
  1405. //   unsigned char  H_MAX;//目標(biāo)最大色調(diào)       
  1406. //   
  1407. //         unsigned char  S_MIN;//目標(biāo)最小飽和度  
  1408. //   unsigned char  S_MAX;//目標(biāo)最大飽和度
  1409. //       
  1410. //         unsigned char  L_MIN;//目標(biāo)最小亮度  
  1411. //   unsigned char  L_MAX;//目標(biāo)最大亮度
  1412. //       
  1413. //         unsigned int  WIDTH_MIN;//目標(biāo)最小寬度
  1414. //         unsigned int  HIGHT_MIN;//目標(biāo)最小高度

  1415. //         unsigned int  WIDTH_MAX;//目標(biāo)最大寬度
  1416. //         unsigned int  HIGHT_MAX;//目標(biāo)最大高度
  1417.         TARGET_CONDI Conditionred={215,240,20,240,30,160,15,15,320,240};        //紅色1   API參數(shù)  hsl的閾值,識(shí)別時(shí)用的
  1418.         u32 j;
  1419.         u16 color;         
  1420.         if(ov_sta)//有幀中斷更新?
  1421.         {
  1422.                 LCD_Scan_Dir(U2D_L2R);                //從上到下,從左到右  
  1423.                 if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//將顯示區(qū)域設(shè)置到屏幕中央
  1424.                 else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//將顯示區(qū)域設(shè)置到屏幕中央
  1425.                 LCD_WriteRAM_Prepare();     //開(kāi)始寫(xiě)入GRAM       
  1426.                 OV7670_RRST=0;                                //開(kāi)始復(fù)位讀指針
  1427.                 OV7670_RCK_L;
  1428.                 OV7670_RCK_H;
  1429.                 OV7670_RCK_L;
  1430.                 OV7670_RRST=1;                                //復(fù)位讀指針結(jié)束
  1431.                 OV7670_RCK_H;
  1432.                 for(j=0;j<76800;j++)
  1433.                 {
  1434.                         OV7670_RCK_L;
  1435.                         color=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  1436.                         OV7670_RCK_H;
  1437.                         color<<=8;  
  1438.                         OV7670_RCK_L;
  1439.                         color|=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  1440.                         OV7670_RCK_H;
  1441.                         LCD->LCD_RAM=color;   
  1442.                 }   

  1443.      if(Trace(&Conditionred,&Resured) )                      //API
  1444.                         {                               
  1445.                                 LCD_Fillred(Resured.x-Resured.w/2,Resured.y-Resured.h/2,Resured.x+Resured.w/2,Resured.y-Resured.h/2+1,0xf800);//u16 x,u16 y,u16 width,u16 hight,u16 Color
  1446.                                 LCD_Fillred(Resured.x-Resured.w/2,Resured.y-Resured.h/2,Resured.x-Resured.w/2+1,Resured.y+Resured.h/2,0xf800);
  1447.                                 LCD_Fillred(Resured.x-Resured.w/2,Resured.y+Resured.h/2,Resured.x+Resured.w/2,Resured.y+Resured.h/2+1,0xf800);
  1448.                                 LCD_Fillred(Resured.x+Resured.w/2,Resured.y-Resured.h/2,Resured.x+Resured.w/2+1,Resured.y+Resured.h/2,0xf800);
  1449.                                 LCD_Fillred(Resured.x-2,Resured.y-2,Resured.x+2,Resured.y+2,0xf800);
  1450.        
  1451.                                 r=Resured.x;
  1452.                           y=Resured.y;
  1453.                         }               
  1454.                 //printf("%d  %d\r\n ",r,y);
  1455.                 ov_sta=0;                                        //清零幀中斷標(biāo)記
  1456.                 ov_frame++;
  1457.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復(fù)默認(rèn)掃描方向
  1458.         }
  1459. }          
  1460. /*---------------------主函數(shù)----------------------*/
  1461. int main(void)
  1462. {         
  1463.         u8 msgbuf[15];                                  //消息緩存區(qū)
  1464.         u8 i=0;          
  1465.         u8 tm=0;
  1466.         delay_init();                        //延時(shí)函數(shù)初始化          
  1467.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  1468.         uart_init(115200);                   //串口初始化為 115200
  1469.   LED_Init();                                            //初始化與LED連接的硬件接口
  1470.         LCD_Init();                                             //初始化LCD  
  1471.   io_in_out_Init();       // io口輸入輸出初始化
  1472.   TIM4_PWM_Init(3599,49); //pwm 20khz
  1473.   show_7670();            //7670和lcd的相關(guān)配置
  1474.   QGDZJS();               //OLED初始化 并且顯示全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽字樣
  1475.         TIM_SetCompare1(TIM4,1235);//  控制前后舵機(jī)初始化角度       
  1476.   TIM_SetCompare4(TIM4,1275);//  控制左右舵機(jī)初始化角度       
  1477.         while(1)
  1478.         {         
  1479.                 /*--------------選擇 、修改 、確定 ...都是通過(guò) 4個(gè) 自鎖開(kāi)關(guān) 和 4個(gè)按鍵來(lái)選擇。------*/
  1480.                          PWMMENUS();  //修改 A B C D 四個(gè)區(qū)域 出發(fā)到結(jié)束的位置
  1481.        wkqwz();     //未啟動(dòng)位置  作用:在還沒(méi)啟動(dòng)任務(wù)的時(shí)候先觀察小球在的位置是否滿足要求
  1482.        MENUS();     //總?cè)蝿?wù)選擇
  1483.                    camera_refresh();//更新顯示
  1484.         }
  1485.         }          
  1486. /*---------------------定時(shí)器二--------------------*/
  1487. void TIM2_IRQHandler(void)   //TIM2中斷  TIM2的初始化在 總?cè)蝿?wù)選擇里
  1488. {               

  1489.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源
  1490.                 {
  1491.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源
  1492.                 if(((Resured.x>5)&&(Resured.x<315))&&((Resured.y>5)&&(Resured.y<235)))       
  1493.                 {
  1494.      switch(RWXZ)
  1495.                  {
  1496.                          case 1 : MODE1(); break;
  1497.                          case 2 : MODE2(); break;
  1498.                          case 3 : MODE3(); break;
  1499.                          case 4 : MODE4(); break;
  1500.                          case 5 : MODE5(); break;
  1501.                          case 6 : MODE6(); break;
  1502.                          case 7 : MODE7(); break;
  1503.                          case 8 : MODE8(); break;               
  1504.        case 9 : MODE9(); break;       
  1505.        case 10 : MODE10(); break;                                 
  1506.                  }
  1507.          }
  1508.                 }
  1509. }
復(fù)制代碼

所有資料51hei提供下載:
F1紅色小球識(shí)別的板球控制-ov7670.7z (276.36 KB, 下載次數(shù): 83)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-1-25 18:36 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:138247 發(fā)表于 2019-5-2 15:25 | 只看該作者

謝謝樓主分享。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 美女黄网 | 91精品国产美女在线观看 | www.毛片| 久久精品免费看 | 成人网址在线观看 | 久久精品亚洲国产 | 一区在线视频 | 日韩av在线免费 | 久久国产精品网站 | 欧美日韩黄 | 古典武侠第一页久久777 | 免费在线观看黄视频 | 亚洲国产精品久久久久久 | 涩涩视频在线观看免费 | 午夜精品久久 | 欧美一级黄色片免费观看 | 国产成年人视频 | 在线亚洲电影 | 亚洲高清网 | 丝袜一区二区三区 | 丝袜毛片 | 亚洲美女天堂网 | 黄网站免费在线 | 国产精品精品视频一区二区三区 | 欧美黄色片 | 欧美成人a∨高清免费观看 色999日韩 | 亚洲欧美中文日韩在线v日本 | 美国av毛片 | 久久久久久国产精品免费免费 | 欧美日本一区二区 | 国产精品欧美一区二区三区不卡 | 久久国产精品色av免费观看 | 中文字幕精品一区二区三区精品 | 一区二区三区视频在线 | 久久久久久久亚洲精品 | 久久精品毛片 | 欧美日韩高清在线一区 | 精品久久视频 | 久色一区| 亚洲精品无人区 | 国产精品一区在线观看 |