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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3782|回復: 1
打印 上一主題 下一主題
收起左側

K60_CCD直立小車源碼(二等獎程序)

[復制鏈接]
跳轉到指定樓層
樓主
k60 ccd二等獎程序

本程序配套4按鍵直立一體板

按鍵功能:
E0: 參數加
E1: 參數減
E2: 切換顯示及功能
E3: 回到最初顯示及功能


調試直立

A、修改直立靜態偏移量: calcultion.c   s32 GRAVITY_OFFSET=485;//230  MPU6550為平衡時Z軸角度,放大10倍
B、main.c里 run()函數中:  修改  PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,MotorTurnPWM);//電機輸出
                            為: PWMout=MotorSpeedOut(AAngPWM,0,0);//關閉速度環和轉向環分量,直立后再加上兩個分量



系統連線說明 :


單片機源程序如下:
  1. #include "include.h"
  2. #include "calculation.h"
  3. #include"VisualScope.h"
  4. #include "CCD.h"
  5. #include "LQ12864.h"
  6. #include "MPU6050.h"

  7. int16 angletmp,angle_g,angle_w;  //16位
  8. int16 angle6550;  //MPU6550計算

  9. extern byte F6x8[][6];
  10. extern s16 g_nLeftMotorPulseSigma,g_nRightMotorPulseSigma;
  11. extern float GYROSCOPE_ANGLE_RATIO;
  12. s32 TurnPosition;//實際位置
  13. s32 TurnPositionOld; //上一次位置
  14. int dline; //左右邊界差

  15. float  ANGLE_CONTROL_P=240;//* 260    //直立P  260
  16. float  ANGLE_CONTROL_D=30;//1.5;//*  4.8   //直立D  5.8

  17. int16 xgout=1000;   //MPU6050六軸參數  x軸角速度
  18. int16 ygout=1000;
  19. int16 zgout=1000;
  20. int16 xaout=-1000;   //x軸加速度
  21. int16 yaout=-1000;
  22. int16 zaout=-1000;

  23. uint8 PWMDEADL = 0;  //死區電壓左路電機
  24. uint8 PWMDEADR = 0;  //死區電壓右路電機

  25. uint16 MAXTURNPWM= 200;  //電機轉向最大PWM值

  26. #define   SAVEADRESS   (0X1C)

  27. extern s32 GRAVITY_OFFSET;
  28. uint8 disen;  //允許上傳CCD圖像

  29. uint16 A_P,A_D,V_P,V_I,T_P,T_D;  //從FLASH中讀出的參數
  30. uint32 G_RATIO;
  31. uint8 flashreadbuf[6];

  32. u16 SpeedKP = 24;//4.4;//*              //速度P 放大10倍
  33. u16 SpeedKI = 6;//*               //速度D 放大10倍

  34. u16 TurnP1 = 80;  //直道前進時舵機PD值,放大10倍
  35. u16 TurnD1 = 2;

  36. //u16 TurnP2 = 34;//70;  //彎道時舵機轉角比例系數 放大10倍
  37. //u16 TurnD2 = 140;//30;  //彎道時舵機轉角積分系數  放大100倍
  38. //
  39. //u16 TurnP3 = 40;  //大彎時轉角比例
  40. //u16 TurnD3 = 110;   //大彎時轉角積分
  41. //
  42. //u16 TurnP4 = 48;  //大彎時轉角比例
  43. //u16 TurnD4 = 90;   //大彎時轉角積分

  44. u16 TurnP;     //* 94                 //方向P
  45. u16 TurnD;   //* 8.4              //方向D
  46. u16 turnsetmax;  //轉向最大PWM值
  47. u16 turnpwmmax;
  48. u8  disccd[128][4];
  49. u8  paraadjflag;   //參數修改組切換


  50. extern int leftline, rightline; //左右邊界值
  51. extern int leftlineold,rightlineold; //左右邊界上一次值
  52. extern int yuzhizhi;//動態閾值
  53. extern signed int sumlspeed,sumrspeed;

  54. s16 SetSpeed= -250;
  55. s16 AmSpeed;//*   //目標速度 用于外部       設置速度時在這里設置
  56. s16 g_Speedgoal=0;//用于內部 自加速使用
  57. //時間標志位
  58. extern u8 TIME0flag_5ms,TIME0flag_10ms,TIME0flag_20ms;
  59. extern u8 TIME1flag_100ms,flag_1ms ;
  60. extern u8 TIME1flag_1s   ;  //PT1口1s定時標志位
  61. extern s16 whitelength;//91;   //具體看CCD圖像,賽道寬度



  62. s32 ATimeCount=700;//100ms進入標志  由20個5ms構成,速度PID時使用
  63. s32 TimeCount=0 ;//1ms中斷標志
  64. //角度傳感器
  65. s32 GYROSCOPE_OFFSET,GYROSCOPE_turn_OFFSET;//陀螺儀靜止時的零點
  66. s32 AD_ACC_Z;//加速度計的Z軸
  67. s32 AD_GYRO;//平衡陀螺儀
  68. s32 AD_GYRO_turn;//轉向陀螺儀
  69. s32 AAngPWM=0,LastAAngPWM=0,AAngPeriodCount=0,MotorAAngPWM=0 ;
  70. //速度變量
  71. float g_SpeedControlOutNew,g_SpeedControlOutOld ;
  72. s16 SpeedPeriodCount=0;
  73. s32 MotorSpeedPWM=0 ;
  74. s32 PWMout ;
  75. int start_flag=0,stop_jiasu=0;
  76. //CCD變量
  77. int ccd_count=0;
  78. uint8_t Pixel[128];
  79. int ccd_flag=0;
  80. s16 TurnPeriodCount=0 ;
  81. s32 MotorTurnPWM=0 ;
  82. s16 TurnPWMOUT=0 ;
  83. s16 LastTurnPWMOUT=0;
  84. u16 discnt;
  85. u8  workflag;


  86. void run();//直立主函數
  87. void qibu();//起步不能一下把速度加上去,速度要慢慢加
  88. void GPIO_Init();
  89. void dispage1();
  90. void dispage2();
  91. void dispage3();
  92. void disdata1();
  93. void disdata2();
  94. void disdata3();
  95. void disccdval();
  96. extern void Pause(void);
  97. extern void LCD_CLS(void);

  98. void main()
  99. {  int16 ii;
  100.    discnt=0;
  101.    paraadjflag=0;
  102.    workflag=0;
  103.    AmSpeed = SetSpeed;
  104.    turnsetmax = 650;
  105.    s32 xgtemp,ygtemp;
  106.    DisableInterrupts; //禁止總中斷
  107.    uart_init (UART0,115200);//初始化UART0,輸出腳PTA15,輸入腳PTA14
  108.    //AngleAcceleration_init() ;//AD初始化
  109.    FTM1_QUAD_Iint();//正交解碼測速  A相---PTA8  B相---PTA9
  110.    FTM2_QUAD_Iint();//正交解碼測速  A相---PTA10 B相---PTA11
  111.    oled_init();//oled初始化
  112.    CCD_init (); //CCD初始化
  113.    GPIO_Init(); //程序運行燈
  114.    pit_init_ms(PIT0, 1);  //初始化PIT0,定時時間為: 1ms
  115.    pit_init_ms(PIT1, 100);//初始化PIT1,定時時間為: 100ms
  116.    FTM_init() ; //PWM初始化
  117.    delayms(100);
  118.    MPU6050_Init();  //MPU6050初始化  , PD8  , PD9
  119.    delayms(300);
  120.    xgtemp=0;
  121.    ygtemp=0;
  122.    TurnP=TurnP1;
  123.    TurnD=TurnD1;
  124.    for(ii=0;ii<100;ii++)
  125.    {
  126.      xgtemp += MPU6050_GetDoubleData(MPU6050_GYRO_XOUT);//讀X軸角速度,直立
  127.      Pause();
  128.      ygtemp += MPU6050_GetDoubleData(MPU6050_GYRO_YOUT);//讀Y軸角速度,轉向
  129.      Pause();
  130.    }
  131.    GYROSCOPE_OFFSET = xgtemp/100;        //靜態X軸角速度值,直立,理論上為0,但實際可能不為0
  132.    GYROSCOPE_turn_OFFSET = ygtemp/100;   //靜態Y軸角速度值,轉向,理論上為0,但實際可能不為0
  133.    
  134.    EnableInterrupts;//開總中斷  
  135.    uart_irq_EN(UART0);
  136.    
  137.    uart_putchar(UART0,'O');
  138.    uart_putchar(UART0,'K');

  139.    A_P = ANGLE_CONTROL_P;
  140.    A_D = ANGLE_CONTROL_D*10;
  141.    V_P = SpeedKP;
  142.    V_I = SpeedKI;
  143.    T_P = TurnP;
  144.    T_D = TurnD;
  145.    G_RATIO = GYROSCOPE_ANGLE_RATIO*100;
  146.    LCD_CLS();
  147.    dispage1(); //正常顯示
  148.    while(1)
  149.    {
  150.      if(workflag==0)  //正常狀態
  151.      { if(gpio_get(PORTE,3)==0)  //狀態切換
  152.        { delayms(4);
  153.          if(gpio_get(PORTE,3)==0)
  154.          {
  155.            workflag=1;
  156.            LCD_CLS(); //清屏
  157.            dispage2();
  158.            while(gpio_get(PORTE,3)==0); //等待按鍵松開
  159.          }
  160.        }
  161.        discnt++;
  162.        if(discnt>=100)
  163.        { discnt=0;
  164.          disdata1();
  165.          delayms(2);
  166.        }
  167.        delayms(1);
  168.      }
  169.      else if(workflag==1)   //顯示和上傳CCD圖像
  170.      { if(ccd_flag==1)//采完一副圖像
  171.        {
  172.          ccd_flag=0;
  173.          tuxiang();  //紅樹偉業上位機
  174.          discnt++;
  175.          if(discnt>=100)
  176.          { discnt=0;
  177.            disdata2();  //顯示圖像
  178.            disccdval();
  179.            delayms(1);
  180.          }
  181.        }
  182.        if(gpio_get(PORTE,3)==0)  //狀態切換
  183.        { delayms(4);
  184.          if(gpio_get(PORTE,3)==0)
  185.          {
  186.            workflag=2;
  187.            LCD_CLS(); //清屏
  188.            dispage3();
  189.            while(gpio_get(PORTE,3)==0); //等待按鍵松開
  190.          }
  191.        }
  192.        if(gpio_get(PORTE,2)==0)  //回正常狀態
  193.        { delayms(4);
  194.          if(gpio_get(PORTE,2)==0)
  195.          {
  196.            workflag=0;
  197.            LCD_CLS(); //清屏
  198.            dispage1();
  199.            while(gpio_get(PORTE,5)==0); //等待按鍵松開
  200.          }
  201.        }
  202.      }
  203.      else if(workflag==2)  //調節參數
  204.      { if(gpio_get(PORTE,3)==0)  //修改參數變換
  205.        { delayms(4);
  206.          if(gpio_get(PORTE,3)==0)
  207.          {
  208.            paraadjflag++;
  209.            if(paraadjflag==5) paraadjflag=0;  // 切換。如果有更多的參數組,自行修改
  210.            if(paraadjflag==0)
  211.            { LCD_P6x8Str(0,1,"Speed Para:  <--");
  212.              LCD_P6x8Str(0,3,"Turn Para:      ");
  213.              LCD_P6x8Str(0,5,"Speed Set:      ");
  214.            }
  215.            else if(paraadjflag==1)
  216.            { LCD_P6x8Str(0,1,"Speed Para:  -->");
  217.              LCD_P6x8Str(0,3,"Turn Para:      ");
  218.              LCD_P6x8Str(0,5,"Speed Set:      ");
  219.            }  
  220.            else if(paraadjflag==2)
  221.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  222.              LCD_P6x8Str(0,3,"Turn Para:   <--");
  223.              LCD_P6x8Str(0,5,"Speed Set:      ");
  224.            }
  225.            else if(paraadjflag==3)
  226.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  227.              LCD_P6x8Str(0,3,"Turn Para:   -->");
  228.              LCD_P6x8Str(0,5,"Speed Set:      ");
  229.            }
  230.            else if(paraadjflag==4)
  231.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  232.              LCD_P6x8Str(0,3,"Turn Para:      ");
  233.              LCD_P6x8Str(0,5,"Speed Set:   <--");
  234.            }
  235.            while(gpio_get(PORTE,3)==0); //等待按鍵松開
  236.          }
  237.        }
  238.        if(gpio_get(PORTE,2)==0)  //回正常狀態
  239.        { delayms(4);
  240.          if(gpio_get(PORTE,2)==0)
  241.          {
  242.            workflag=0;
  243.            LCD_CLS(); //清屏
  244.            dispage1();
  245.            while(gpio_get(PORTE,2)==0); //等待按鍵松開
  246.          }
  247.        }
  248.        if(gpio_get(PORTE,0)==0)  //參數調節
  249.        { delayms(4);
  250.          if(gpio_get(PORTE,0)==0)
  251.          { if(paraadjflag==0)   //速度KP 加減
  252.            { SpeedKP++;
  253.              Dis_num(24,2,SpeedKP);
  254.            }
  255.            else if(paraadjflag==1)
  256.            { SpeedKI++;
  257.              Dis_num(90,2,SpeedKI);         
  258.            }
  259.            else if(paraadjflag==2)
  260.            { turnsetmax=turnsetmax+5;
  261.              Dis_num(24,4,turnsetmax);         
  262.            }
  263.            else if(paraadjflag==3)
  264.            { TurnD++;
  265.              Dis_num(90,4,TurnD);         
  266.            }
  267.            else if(paraadjflag==4)  //速度
  268.            { SetSpeed = SetSpeed - 5;
  269.              AmSpeed = SetSpeed;
  270.              Dis_num(24,6,SetSpeed);
  271.            }
  272.            while(gpio_get(PORTE,0)==0); //等待按鍵松開
  273.          }
  274.        }
  275.        if(gpio_get(PORTE,1)==0)  //參數調節
  276.        { delayms(4);
  277.          if(gpio_get(PORTE,1)==0)
  278.          {
  279.            if(paraadjflag==0)   //速度KP 加減
  280.            { SpeedKP--;
  281.              Dis_num(24,2,SpeedKP);
  282.            }
  283.            else if(paraadjflag==1)
  284.            { SpeedKI--;
  285.              Dis_num(90,2,SpeedKI);         
  286.            }
  287.            else if(paraadjflag==2)
  288.            { turnsetmax=turnsetmax-5;
  289.              Dis_num(24,4,turnsetmax);         
  290.            }
  291.            else if(paraadjflag==3)
  292.            { TurnD--;
  293.              Dis_num(90,4,TurnD);         
  294.            }
  295.            else if(paraadjflag==4)  //速度
  296.            { SetSpeed = SetSpeed + 5;
  297.              Dis_num(24,6,SetSpeed);
  298.              AmSpeed = SetSpeed;
  299.            }
  300.            while(gpio_get(PORTE,1)==0); //等待按鍵松開
  301.          }
  302.        }
  303.        delayms(5);
  304.      }
  305.    }
  306. }

  307. void GPIO_Init()
  308. {
  309.    gpio_init (PORTA, 17, GPO, 1u); //初始化PTE0為高電平輸出---LED0
  310.    gpio_set  (PORTA, 19, 0);       //設置PTE0為高電平輸出,LED0滅
  311.    gpio_init (PORTE,0,GPI,0);      //按鍵輸入
  312.    gpio_init (PORTE,1,GPI,0);     //按鍵輸入
  313.    gpio_init (PORTE,2,GPI,0);     //按鍵輸入
  314.    gpio_init (PORTE,3,GPI,0);     //按鍵輸入   
  315.    
  316. }

  317. void run()//直立函數 在isr.c中的1ms中斷中調用  PIT0_IRQHandler
  318. {   
  319.   TimeCount++ ;
  320.   SpeedPeriodCount++;
  321.   TurnPeriodCount ++ ;
  322.   AAngPeriodCount ++ ;
  323.   if(AAngPeriodCount>=4) AAngPeriodCount=4;
  324.   
  325.   MotorTurnPWM  = TurnPWMOut(TurnPWMOUT,LastTurnPWMOUT,TurnPeriodCount) ;
  326.   MotorSpeedPWM = SpeedPWMOut(g_SpeedControlOutNew ,g_SpeedControlOutOld,SpeedPeriodCount);  
  327.   MotorAAngPWM  = AAangPWMOut(AAngPWM ,LastAAngPWM ,AAngPeriodCount);  
  328.   Checkcarstate();//開啟停止判斷
  329.   if(TimeCount>=5)//讀速度  5ms
  330.   {
  331.     TimeCount=0;
  332.     GetMotorPulse();//讀速度脈沖
  333.   }  
  334.   else if(TimeCount == 1)//讀取MPU6050
  335.   {      
  336.      xaout=MPU6050_GetDoubleData(MPU6050_ACCEL_XOUT);//讀X軸加速度
  337.      yaout=MPU6050_GetDoubleData(MPU6050_ACCEL_YOUT);//讀X軸加速度
  338.      zaout=MPU6050_GetDoubleData(MPU6050_ACCEL_ZOUT);//讀X軸加速度
  339.      xgout=MPU6050_GetDoubleData(MPU6050_GYRO_XOUT);//讀X軸角速度,直立角速度
  340.      ygout=MPU6050_GetDoubleData(MPU6050_GYRO_YOUT);//讀Y軸角速度,轉向角速度
  341.      angle6550=MPU6050_Get_Angle(xaout,yaout,zaout,0);
  342.   }
  343.   else if(TimeCount == 2)//5ms 直立濾波,控制
  344.   {
  345.     AAngPeriodCount  = 0;
  346.     AngleCalculate();//計算加速值和角度值
  347.     LastAAngPWM = AAngPWM ;      
  348.     AAngPWM = AngleControl() ;     //計算平衡電機速度
  349.     PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,MotorTurnPWM);//電機輸出
  350.     //PWMout=MotorSpeedOut(0,0,MotorTurnPWM);
  351.     //PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,0);//電機輸出  剛開始用的時候可以把MotorSpeedPWM和MotorTurnPWM都設為0
  352.      //PWMout=MotorSpeedOut(AAngPWM,0,0);//電機輸出  剛開始用的時候可以把MotorSpeedPWM和MotorTurnPWM都設為0
  353.     //先調直立,再加速度MotorSpeedPWM,最后加方向MotorTurnPWM
  354.    
  355.   }
  356.   else if(TimeCount == 3)//5ms  速度PI調節
  357.   {
  358.      ATimeCount ++ ;
  359.      if(ATimeCount >= 20)//20*5=100ms進行一次速度PID調節
  360.      {
  361.        ATimeCount=0;
  362.        SpeedPID() ;
  363.        SpeedPeriodCount = 0 ;
  364.        qibu();//起步  不可以一下就把速度加上,要緩慢加
  365.      }
  366.    }
  367.   else if(TimeCount == 4)// CCD圖像采集與處理
  368.   {
  369.     ccd_count++;
  370.     if(ccd_count>=4)//20ms進一次
  371.     {
  372.         ccd_count=0;
  373.         ccd_flag=1;//發送圖像到上位機標志
  374.         ImageCapture(Pixel) ;//將捕捉到的圖像放在Pixel數組中
  375.         //process();//圖像處理函數
  376.         FindLine();
  377.         dline = rightline - leftline;
  378.         if((dline>64)||(dline<12)) //十字路或橋上
  379.         { //TurnP = TurnP1;
  380.           //TurnD = TurnD1;
  381.           turnpwmmax=turnsetmax;
  382.         }
  383.         else if((dline>(whitelength+16))||(dline<(whitelength-16))) //丟線
  384.         { turnpwmmax=turnsetmax+50;
  385.           //TurnD = TurnD4;
  386.         }
  387.         else if((dline>(whitelength+9))||(dline<(whitelength-9))) //60度彎道
  388.         { //TurnP = TurnP4;
  389.           //TurnD = TurnD4;
  390.           turnpwmmax=turnsetmax+30;
  391.         }
  392.         else if((dline>(whitelength+4))||(dline<(whitelength-4))) //50度彎道
  393.         { //TurnP = TurnP3;
  394.           //TurnD = TurnD3;
  395.           turnpwmmax=turnsetmax+20;
  396.         }
  397.          else if((dline>(whitelength+2))||(dline<(whitelength-2))) //亞直道
  398.         { //TurnP = TurnP2;
  399.           //TurnD = TurnD2;
  400.           turnpwmmax=turnsetmax;
  401.         }
  402.         else //直道
  403.         { //TurnP = TurnP1;
  404.           //TurnD = TurnD1;
  405.           turnpwmmax=turnsetmax;
  406.         }
  407.         LastTurnPWMOUT = TurnPWMOUT ;
  408.         TurnPWM() ;
  409.         TurnPeriodCount = 0 ;
  410.     }
  411.   }  
  412.   if(TIME1flag_1s == 1)//程序運行燈
  413.   {
  414.     TIME1flag_1s = 0 ;
  415.     PTA17_OUT = ~PTA17_OUT ;
  416.   }
  417. }
  418. void qibu()//這一部分認真看一下,也可以根據自己的想法改一下
  419. {
  420.   if(AmSpeed!=0)//在目標速度不為0時才運行
  421.   {
  422.    start_flag++;
  423.    if(start_flag<30)//靜止2S才出發  可根據規則修改
  424.    {  g_Speedgoal=0;
  425.       //SpeedKI=0;
  426.    }
  427.    else if(start_flag>=30)
  428.    {
  429.      if(g_Speedgoal>AmSpeed&&stop_jiasu==0)//然后逐漸加速
  430.      {
  431.          g_Speedgoal-=15; //  30  //單次加速值,值大加速能力強,比賽前可設兩組值,一組快速加速,用于應對起步時是長
  432.                          //直道的情況,另一組為慢加速,用于應對起步時就是彎道的情況
  433.      }
  434.      else if(g_Speedgoal<=AmSpeed&&stop_jiasu==0) //內部速度高于設置速度,停止大幅度加速,進行小幅度調整加速
  435.      {
  436.          g_Speedgoal=AmSpeed;
  437.          stop_jiasu=1;
  438.      }                                
  439.      start_flag=3000;  //終止靜止2s計數
  440.      //SpeedKI=0;
  441.      if(stop_jiasu==1)        //車模之后的目標速度調整主要在此函數中
  442.      {
  443.        if(g_Speedgoal>AmSpeed)//然后逐漸加速
  444.        {
  445.          g_Speedgoal-=15;//
  446.        }
  447.         else if(g_Speedgoal<=AmSpeed)
  448.        {
  449.          g_Speedgoal=AmSpeed;
  450.        }   
  451.      }
  452.    }
  453.   }
  454. }


  455. void dispage1()
  456. {  Dis_num(0,0,GRAVITY_OFFSET);  //設定值,垂直時加速度AD
  457.    Dis_num(42,0,GYROSCOPE_OFFSET);//陀螺儀零偏  自檢平均值
  458.    LCD_P6x8Str(0,1,"Ap:");
  459.    Dis_num(20,1,A_P);//加計零偏 定值
  460.    LCD_P6x8Str(60,1,"Ad:");
  461.    Dis_num(80,1,A_D);
  462.    
  463.    LCD_P6x8Str(0,2,"Vp:");
  464.    Dis_num(20,2,V_P);
  465.    LCD_P6x8Str(60,2,"Vd:");
  466.    Dis_num(80,2,V_I);
  467.    
  468.    LCD_P6x8Str(0,3,"Tp:");
  469.    Dis_num(20,3,T_P);
  470.    LCD_P6x8Str(60,3,"Td:");
  471.    Dis_num(80,3,T_D);
  472.    
  473.    LCD_P6x8Str(0,4,"A      S      C");
  474.    
  475.    LCD_P6x8Str(0,5,"Spd");
  476.    LCD_P6x8Str(1,7,"LMB:");
  477.    LCD_P6x8Str(64,7,"RMB:");
  478. }

  479. void disdata1()
  480. {    Dis_num(6,4,angletmp);
  481.      Dis_num(48,4,-AmSpeed);
  482.      Dis_num(90,4,TurnPosition);
  483.      A_P = ANGLE_CONTROL_P;
  484.      A_D = ANGLE_CONTROL_D*10;
  485.      V_P = SpeedKP;
  486.      V_I = SpeedKI;  
  487.      T_P = TurnP;
  488.      T_D = TurnD;  
  489.      Dis_num(20,1,A_P);//加計零偏 定值
  490.      //Dis_num(80,1,A_D);
  491.      Dis_num(80,1,TurnPWMOUT);
  492.      Dis_num(20,2,V_P);
  493.      Dis_num(80,2,V_I);
  494.      Dis_num(20,3,T_P);
  495.      Dis_num(80,3,T_D);
  496.      delayms(50);
  497.      Dis_num(10,6,leftlineold);  //賽道左邊界
  498.      Dis_num(94,6,rightlineold); //賽道右邊界
  499.      Dis_num(52,6,dline); //賽道右-左
  500.      Dis_num(28,7,sumlspeed);
  501.      Dis_num(96,7,sumrspeed);
  502.      Dis_num(20,5,AmSpeed);
  503.      Dis_num(80,5,turnsetmax);
  504. }

  505. void dispage2()
  506. {  LCD_P6x8Str(0,0,"CCD DATA UP&DIS");
  507.    LCD_P6x8Str(0,1,"L:        R:");
  508.    Dis_num(20,1,leftlineold);  //賽道左邊界
  509.    Dis_num(94,1,rightlineold); //賽道右邊界
  510. }

  511. void disdata2()
  512. {  Dis_num(20,1,leftlineold);  //賽道左邊界
  513.    Dis_num(94,1,rightlineold); //賽道右邊界
  514. }
  515. ……………………

  516. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:

K60_CCD直立.rar (13.35 MB, 下載次數: 55)



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

使用道具 舉報

沙發
ID:1 發表于 2018-5-12 06:08 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲国产精品日日av夜夜 | 日韩色图在线观看 | 亚洲成人免费视频在线观看 | 久久久www成人免费精品 | 欧美日产国产成人免费图片 | 久草免费在线视频 | 久久蜜桃资源一区二区老牛 | 特黄一级| 高清一区二区 | 岛国av一区二区 | 亚洲一区二区黄 | 国产精品久久亚洲 | av中文字幕在线 | 成人区精品一区二区婷婷 | 成人日批视频 | 麻豆久久久久 | 成人免费共享视频 | 中文字幕日韩一区二区 | 欧美日韩一区二区三区四区 | 欧美精品久久久久 | 欧美国产亚洲一区二区 | 国产日韩精品视频 | 成人久久久久 | 久久成人av电影 | 国产精品女人久久久 | 天堂成人国产精品一区 | 99精品欧美 | 日韩一区二区黄色片 | 黄网站在线观看 | 91福利电影在线观看 | 欧美电影在线 | 亚洲天堂一区 | 成人精品毛片 | 久久精彩视频 | 久久国产精品久久久久久 | 九色在线观看 | 中国美女一级黄色片 | 欧美激情第一区 | 精品免费国产一区二区三区 | 亚洲一区二区三区视频 | 99精品视频免费在线观看 |