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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ccorecontrol.c

?? 第二屆飛思卡爾杯智能車大賽
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright (c) 1998, Xiongfei Guo, Shanghai Second Polytechnic University 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Shanghai Second Polytechnic University nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// 黑線識別

#include "includes.h"

// 有關速度的參數
INT16S lastTgtSpeed = 100;
INT16S tgtSpeed = 100;
INT16U maxSpeed = 110;
INT16U minSpeed = 80;

// 限制距離為 多少米
INT16U DistLimit = 0;

// 絕對和相對的紅外檢測值
INT16U wir[nIR];
INT16U irValue[nIR];

// 黑白的參考值
INT16U whiteAvg[nIR], blackAvg[nIR];

// 中間變量
INT16U minTmp[nIR][10], maxTmp[nIR][10];

// 每次檢測到的IR位置
INT16U position;

// 舵機目標位置
INT8U servoTgtAngle;

INT16U tmir;

// 十字和交叉的記錄
INT8U crsN,crsType[10];
INT16U crsDist[10];

INT16U StartLineDist[4];
INT8U CrossLineN = 0, RampDistN = 0;
INT16U CrossLineDist[20];
INT16U RampDist[10];
// 當前所在的圈
INT8U nowLoop;

// 用于計算單位角度舵機拐角的平均值
INT32U PerDistSrvTotal;
INT16U PerDistSrvN;

#define swap(x, y) {(x) = (x) ^ (y);(y) = (x) ^ (y);(x) = (x) ^ (y);}


// IR 發射序列 分別向PTH, PORTE & PORTA 賦值
const INT8U irSendArr[nIR][3] = {
#if nIR == 12
                                    {0, 0, PORTA_BIT6_MASK},
                                    {0, 0, PORTA_BIT7_MASK},
                                    {PTH_PTH3_MASK, 0, 0},
                                    {PTH_PTH2_MASK, 0, 0},
                                    {PTH_PTH1_MASK, 0, 0},
                                    {PTH_PTH0_MASK, 0, 0},
                                    {0, PORTE_BIT3_MASK, 0},
                                    {0, PORTE_BIT2_MASK, 0},
                                    {0, 0, PORTA_BIT2_MASK},
                                    {0, 0, PORTA_BIT3_MASK},
                                    {0, 0, PORTA_BIT5_MASK},
                                    {0, 0, PORTA_BIT4_MASK}
#elif nIR == 8
                                    {PTH_PTH3_MASK, 0, 0},
                                    {PTH_PTH2_MASK, 0, 0},
                                    {PTH_PTH1_MASK, 0, 0},
                                    {PTH_PTH0_MASK, 0, 0},
                                    {0, PORTE_BIT3_MASK, 0},
                                    {0, PORTE_BIT2_MASK, 0},
                                    {0, 0, PORTA_BIT2_MASK},
                                    {0, 0, PORTA_BIT3_MASK},

#endif
                                };

// IR 接收管排列方式
const INT8U irRecvArr[nIR] = {
#if nIR == 12
                                 11,//0
                                 10,
                                 12,
                                 4,
                                 15,
                                 7,
                                 14,//6
                                 6,
                                 13,
                                 5,
                                 3,
                                 2
#elif nIR == 8
                                 12,
                                 14,//64,
                                 15,
                                 13,
                                 4,
                                 6,
                                 7,
                                 5
#endif
                             };

const INT8U irRevPair[nIR / 2][4] = {
#if nIR == 12
                                        {5, 0, 7, 11},
                                        {10, 1, 3, 10},
                                        {7 ,2, 6, 12},
                                        {3, 8, 4, 13},
                                        {9, 4, 5, 15},
                                        {11, 6, 2, 14}
#elif nIR == 8
                                        {7,3,5,13},
                                        {4,0,4,12},
                                        {5,1,6,14},
                                        {6,2,7,15}

#endif
                                    };


const INT8U ir_position[nIR] = {
#if nIR == 8
                                   38,
                                   63,
                                   88,
                                   113,
                                   138,
                                   163,
                                   188,
                                   213
#elif nIR == 12
                                   15,
                                   35,
                                   55,
                                   75,
                                   95,
                                   115,
                                   135,
                                   155,
                                   175,
                                   195,
                                   215,
                                   235
#endif
                               };

const INT8U speed_arr[251] = {
                                 0, 0, 0, 0, 0, 0, 0, 0,
                                 0, 0, 0, 0, 1, 1, 1, 1,
                                 1, 2, 2, 2, 2, 2, 3, 3,
                                 3, 4, 4, 4, 5, 5, 5, 6,
                                 6, 6, 7, 7, 8, 8, 8, 9,
                                 9, 10, 10, 11, 11, 11, 12, 12,
                                 13, 13, 14, 14, 15, 15, 16, 16,
                                 17, 17, 18, 18, 19, 19, 20, 20,
                                 21, 21, 22, 22, 23, 23, 24, 24,
                                 25, 25, 26, 26, 27, 27, 28, 28,
                                 28, 29, 29, 30, 30, 31, 31, 31,
                                 32, 32, 33, 33, 33, 34, 34, 34,
                                 35, 35, 35, 36, 36, 36, 37, 37,
                                 37, 37, 37, 38, 38, 38, 38, 38,
                                 39, 39, 39, 39, 39, 39, 39, 39,
                                 39, 39, 39, 39, 39, 39, 39, 39,
                                 39, 39, 39, 39, 39, 39, 39, 39,
                                 39, 38, 38, 38, 38, 38, 37, 37,
                                 37, 37, 37, 36, 36, 36, 35, 35,
                                 35, 34, 34, 34, 33, 33, 33, 32,
                                 32, 31, 31, 31, 30, 30, 29, 29,
                                 28, 28, 28, 27, 27, 26, 26, 25,
                                 25, 24, 24, 23, 23, 22, 22, 21,
                                 21, 20, 20, 19, 19, 18, 18, 17,
                                 17, 16, 16, 15, 15, 14, 14, 13,
                                 13, 12, 12, 11, 11, 11, 10, 10,
                                 9, 9, 8, 8, 8, 7, 7, 6,
                                 6, 6, 5, 5, 5, 4, 4, 4,
                                 3, 3, 3, 2, 2, 2, 2, 2,
                                 1, 1, 1, 1, 1, 0, 0, 0,
                                 0, 0, 0, 0, 0, 0, 0, 0,
                                 0, 0, 0
                             };


const INT8U servo_turn_arr[251] = {
                                      51, 51, 51, 51, 51, 51, 51, 51,
                                      51, 51, 51, 51, 51, 51, 51, 51,
                                      51, 51, 51, 51, 51, 51, 51, 51,
                                      51, 52, 52, 52, 52, 52, 52, 52,
                                      52, 52, 52, 52, 53, 53, 53, 53,
                                      53, 53, 53, 53, 54, 54, 54, 54,
                                      54, 54, 54, 55, 55, 55, 55, 55,
                                      56, 56, 56, 56, 56, 57, 57, 57,
                                      57, 58, 58, 58, 58, 59, 59, 59,
                                      60, 60, 60, 61, 61, 61, 62, 62,
                                      63, 63, 63, 64, 64, 65, 65, 66,
                                      66, 67, 67, 68, 68, 69, 69, 70,
                                      71, 71, 72, 72, 73, 74, 74, 75,
                                      76, 77, 77, 78, 79, 80, 80, 81,
                                      82, 83, 84, 84, 85, 86, 87, 87,
                                      88, 89, 89, 89, 89, 89, 90, 90,
                                      91, 92, 92, 93, 94, 95, 96, 97,
                                      98, 99, 100, 101, 101, 102, 103, 104,
                                      105, 106, 106, 107, 108, 109, 109, 110,
                                      111, 111, 112, 113, 113, 114, 114, 115,
                                      115, 116, 116, 117, 117, 118, 118, 119,
                                      119, 119, 120, 120, 121, 121, 121, 122,
                                      122, 122, 122, 123, 123, 123, 124, 124,
                                      124, 124, 125, 125, 125, 125, 125, 126,
                                      126, 126, 126, 126, 127, 127, 127, 127,
                                      127, 127, 127, 127, 128, 128, 128, 128,
                                      128, 128, 128, 128, 128, 128, 129, 129,
                                      129, 129, 129, 129, 129, 129, 129, 129,
                                      129, 129, 129, 129, 129, 129, 129, 129,
                                      129, 129, 129, 129, 129, 129, 129, 129,
                                      129, 129, 129, 129, 129, 129, 129, 129,
                                      129, 129, 129
                                  };

// 識別黑線所需的一些變量
INT16U tBlState;
INT16U tv;
INT16U ttotal,total;
INT16U minIRv, minIRn;
INT16U minIRv2, minIRn2; /* 第二小 */
INT16U maxIRv;
INT16U last_position = 90;

INT32U tdist;

// 黑線的狀態
#define NORMAL 0        /* 普通黑線 */
#define LOST 1          /* 找不到 */
#define START 2         /* 起始線 */
#define CROSS 3         /* 十字交叉 */

INT16U blStateArr[4];   /* 狀態數組 */
INT16U blState;         /* 狀態分析結果 */
INT16U tw, tb;
void GetBlackAndWhite(void) {
    INT16U i, j;


    for (i = 0;i < nIR;i++) {
        whiteAvg[i] = 0;
        blackAvg[i] = 0;
        for (j = 0;j < 10;j++) {
            maxTmp[i][j] = 0;
            minTmp[i][j] = 1023;
        }
    }

    for (;;) {


        PORTB = 0x55;


        if (!PTIP_PTIP0) {
            // 處理
            for (i = 0;i < nIR;i++) {
                tw = 0;
                tb = 0;
                for (j = 0;j < 10;j++) {
                    if (maxTmp[i][j] != 0) {
                        tw++;
                        whiteAvg[i] += maxTmp[i][j];
                    }
                }
                whiteAvg[i] /= tw;
                for (j = 0;j < 10;j++) {
                    if (minTmp[i][j] != 1023) {
                        tb++;
                        blackAvg[i] += minTmp[i][j];
                    }
                }
                blackAvg[i] /= tb;

            }

            /** 紅外值的手工修正 **/

            //whiteAvg[3] -= 36;
            //whiteAvg[2] -= 10;
            //whiteAvg[6] -= 10;

            return;
        }


        // 采集紅外值
        for (i = 0;i < nIR / 2;i++) {
            irSendDouble(irRevPair[i][0], irRevPair[i][1]);

            for (j = 0;j < 100;j++);

            ReadADCDouble(irRevPair[i][2],irRevPair[i][3], &wir[irRevPair[i][0]], &wir[irRevPair[i][1]]);

        }

        irSendAllStop();

        // 找最大最小
        for (i = 0;i < nIR;i++) {
            for (j = 0;j < 10;j++) {
                if (wir[i] > maxTmp[i][j]) {
                    maxTmp[i][j] = wir[i];
                    break;
                }
            }
            for (j = 0;j < 10;j++) {
                if (wir[i] < minTmp[i][j]) {
                    minTmp[i][j] = wir[i];
                    break;
                }
            }

        }
    }
}


// 多少黑 多少白
struct _SPC_PNT {
    INT32U allWhite;
    INT32U allBlack;
    INT32U likeStart;
    INT16U dist;
}
spcPnts[30] = {{0,0,0,0}};
INT8U spcPntsN = 0;

INT16U nBlack, nWhite;

// 檢測是不是同一個點, 不是則新開一個
void NewSpecialPoint(void) {
    if (GetDistance() - spcPnts[spcPntsN].dist > 8) {
        if (spcPntsN > 28) return;
        spcPntsN++;
        spcPnts[spcPntsN].allWhite = 0;
        spcPnts[spcPntsN].allBlack = 0;
        spcPnts[spcPntsN].likeStart = 0;
        spcPnts[spcPntsN].dist = GetDistance();
    }
}

void ProcessSpecialPoint(void) {
    INT16U centerMax1,centerMax2, sideMax1,sideMax2;
    INT16U i,j;
    nBlack = nWhite = 0;

    // 在路中間么
    if (LastSrvAvg > 115 || LastSrvAvg < 75)
        return;

    // 判斷坡
    for (i = 0;i < nIR;i++) {
        if (wir[i] > whiteAvg[i] + (1023 - whiteAvg[i]) / 3) {
            nWhite++;
        }
    }// for

    if ( nWhite > 5 && blState == 1) {
        NewSpecialPoint();
        spcPnts[spcPntsN].allWhite++;
    }


    // 判斷出發點
    centerMax1 = centerMax2 = sideMax1 = sideMax2 = 0;
#if nIR == 8
    for (j = 2;j <= 5;j++) {
#elif nIR == 12
    for (j = 4;j <= 7;j++) {
#endif
        if (centerMax1 < irValue[j]) {
            centerMax2 = centerMax1;
            centerMax1 = irValue[j];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线观看免费一区| 午夜成人免费视频| 免播放器亚洲一区| 99这里都是精品| 2023国产一二三区日本精品2022| 亚洲国产日韩在线一区模特| 成人高清av在线| 久久久亚洲欧洲日产国码αv| 日韩影院在线观看| 93久久精品日日躁夜夜躁欧美| 欧美精品一区二区高清在线观看 | 日韩一区二区在线看片| 亚洲色欲色欲www| 国产一区二区在线视频| 欧美日韩久久一区| 成人欧美一区二区三区小说| 久久99久国产精品黄毛片色诱| 国产成人自拍高清视频在线免费播放 | 91精品国产91综合久久蜜臀| 1区2区3区国产精品| 久久99久久精品| 欧美精品久久99久久在免费线| 国产精品久久一卡二卡| 久久国产麻豆精品| 欧美另类高清zo欧美| 亚洲欧美在线视频| 黑人巨大精品欧美一区| 欧美日韩一区二区在线视频| 亚洲欧洲在线观看av| 国产一区二区在线免费观看| 欧美精品成人一区二区三区四区| 自拍偷在线精品自拍偷无码专区| 国产一区二区三区免费在线观看 | 美女视频一区二区| 欧洲亚洲国产日韩| 综合av第一页| www.爱久久.com| 国产三级一区二区| 久久se精品一区精品二区| 欧美色欧美亚洲另类二区| 亚洲国产成人私人影院tom| 日本午夜一本久久久综合| 欧美自拍偷拍一区| 亚洲图片欧美激情| 国产精品911| 精品国内二区三区| 麻豆精品国产91久久久久久 | 国产成人午夜精品5599| 日韩精品综合一本久道在线视频| 视频一区在线播放| 欧美视频一区二区三区| 一区二区三区资源| 欧洲人成人精品| 亚洲一区欧美一区| 欧美综合亚洲图片综合区| 一区二区三区免费观看| 91视频一区二区| 亚洲人成网站色在线观看| 97精品超碰一区二区三区| 亚洲丝袜精品丝袜在线| 成人亚洲精品久久久久软件| 中文在线免费一区三区高中清不卡| 国产91清纯白嫩初高中在线观看| 久久久99久久精品欧美| 免费av成人在线| 久久亚洲影视婷婷| 福利一区二区在线观看| 亚洲国产岛国毛片在线| 99精品一区二区| 一级特黄大欧美久久久| 欧美老女人在线| 日本不卡123| 精品国产免费一区二区三区香蕉| 精品影视av免费| 久久精品人人做人人爽97| 成人小视频免费观看| 亚洲色图欧洲色图| 欧美午夜免费电影| 亚洲一区二区三区中文字幕在线| 91丨九色porny丨蝌蚪| 亚洲免费毛片网站| 欧美日韩免费在线视频| 日本一区中文字幕| 久久精品亚洲精品国产欧美| 99国产欧美另类久久久精品| 香蕉加勒比综合久久| 精品人伦一区二区色婷婷| 国产一区二区精品在线观看| 国产精品色哟哟网站| 色8久久人人97超碰香蕉987| 香蕉久久夜色精品国产使用方法| 日韩美女视频在线| 粉嫩绯色av一区二区在线观看| 亚洲欧美日韩综合aⅴ视频| 欧美男男青年gay1069videost| 美国三级日本三级久久99| 国产日韩欧美电影| 欧美在线观看一二区| 日本欧美一区二区三区| 欧美国产一区二区| 欧美群妇大交群的观看方式| 国产精品羞羞答答xxdd| 有码一区二区三区| 欧美一区二区大片| 成人国产精品视频| 亚洲在线视频一区| 欧美日韩成人在线| 国产精品亚洲视频| 亚洲国产精品嫩草影院| 久久久久久一二三区| 欧美在线色视频| 国产露脸91国语对白| 亚洲一区二区三区国产| 日韩精品中午字幕| 91福利国产成人精品照片| 国产一区二区免费在线| 亚洲国产视频直播| 国产精品丝袜在线| 欧美日韩在线三区| 色综合欧美在线| 国产在线精品视频| 亚洲综合激情网| 亚洲国产高清不卡| 日韩你懂的在线播放| 91免费视频观看| 国产一区二区看久久| 丝袜亚洲精品中文字幕一区| 国产精品私人影院| 精品国产乱码久久久久久久 | 中文字幕电影一区| 欧美精品一区二区蜜臀亚洲| 色94色欧美sute亚洲线路一久| 国内精品写真在线观看| 亚洲欧美怡红院| 久久众筹精品私拍模特| 欧美精品亚洲二区| 色婷婷久久久亚洲一区二区三区 | 国产精品伦理一区二区| 日韩午夜激情免费电影| 91成人在线免费观看| 成人精品视频一区| 国产在线精品免费av| 日本亚洲三级在线| 亚洲图片一区二区| 自拍av一区二区三区| 精品国免费一区二区三区| 日韩欧美你懂的| 9191久久久久久久久久久| 91美女片黄在线观看| 成人妖精视频yjsp地址| 国产一区二区三区精品欧美日韩一区二区三区 | 韩国在线一区二区| 日韩精品久久久久久| 一区二区三区欧美日| 国产精品国产精品国产专区不片| 久久精品亚洲精品国产欧美kt∨| 欧美一区二区三区免费在线看 | 久久精品国产成人一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 日韩美女久久久| 国产精品国产三级国产aⅴ入口 | 午夜久久电影网| 一区二区三区精品视频| 18成人在线视频| 国产精品第一页第二页第三页| 国产午夜精品一区二区三区视频 | 色国产综合视频| 色先锋aa成人| 色综合天天视频在线观看| 成a人片国产精品| 成人一区二区三区视频在线观看| 国产精品99久久不卡二区| 国产麻豆成人精品| 国产在线一区二区综合免费视频| 久久机这里只有精品| 麻豆精品久久久| 久久国产精品99久久久久久老狼| 蜜桃久久久久久久| 日韩专区在线视频| 日韩av二区在线播放| 狠狠色丁香久久婷婷综合_中| 国产一区二区调教| 国产精品自拍网站| 成人激情图片网| av一区二区三区| 99精品久久只有精品| 成人午夜在线视频| 色999日韩国产欧美一区二区| 欧洲中文字幕精品| 欧美三日本三级三级在线播放| 欧美日韩一区三区四区| 日韩丝袜美女视频| 久久久午夜精品| 中文字幕中文乱码欧美一区二区| 亚洲色图一区二区| 婷婷激情综合网| 国产在线日韩欧美| 99综合电影在线视频| 精品视频一区二区三区免费| 日韩色在线观看|