?? 34
字號(hào):
if (iL >= 500) {
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
0x00);
}
/*
* 如果右電機(jī)長時(shí)間停止,則斷電
*/
if (__GmRight.cState == __MOTORSTOP) {
iR++;
} else {
iR = 0;
}
if (iR >= 500) {
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
0x00);
}
/*
* 紅外線檢測(cè)
*/
__irCheck();
}
/*********************************************************************************************************
** Function name: __irSendFreq
** Descriptions: 發(fā)送紅外線。
** input parameters: __uiFreq: 紅外線調(diào)制頻率
** __cNumber: 選擇需要設(shè)置的PWM模塊
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void __irSendFreq (uint32 __uiFreq, int8 __cNumber)
{
__uiFreq = SysCtlClockGet() / __uiFreq;
switch (__cNumber) {
case 1:
PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, __uiFreq); /* 設(shè)置PWM發(fā)生器1的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, __uiFreq / 2); /* 設(shè)置PWM2輸出的脈沖寬度 */
PWMGenEnable(PWM_BASE, PWM_GEN_1); /* 使能PWM發(fā)生器1 */
break;
case 2:
PWMGenPeriodSet(PWM_BASE, PWM_GEN_2, __uiFreq); /* 設(shè)置PWM發(fā)生器2的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_4, __uiFreq / 2); /* 設(shè)置PWM4輸出的脈沖寬度 */
PWMGenEnable(PWM_BASE, PWM_GEN_2); /* 使能PWM發(fā)生器2 */
break;
default:
break;
}
}
/*********************************************************************************************************
** Function name: __irCheck
** Descriptions: 紅外線傳感器檢測(cè)。
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void __irCheck (void)
{
static uint8 ucState = 0;
static uint8 ucIRCheck;
switch (ucState) {
case 0:
__irSendFreq(32200, 2); /* 探測(cè)左右兩側(cè)近距 */
__irSendFreq(35000, 1); /* 驅(qū)動(dòng)斜角上的傳感器檢測(cè) */
break;
case 1:
ucIRCheck = GPIOPinRead(GPIO_PORTB_BASE, 0x3e); /* 讀取傳感器狀態(tài) */
PWMGenDisable(PWM_BASE, PWM_GEN_2); /* 禁止PWM發(fā)生器2 */
PWMGenDisable(PWM_BASE, PWM_GEN_1); /* 禁止PWM發(fā)生器1 */
if (ucIRCheck & __RIGHTSIDE) {
__GucDistance[__RIGHT] &= 0xfd;
} else {
__GucDistance[__RIGHT] |= 0x02;
}
if (ucIRCheck & __LEFTSIDE) {
__GucDistance[__LEFT] &= 0xfd;
} else {
__GucDistance[__LEFT] |= 0x02;
}
if (ucIRCheck & __FRONTSIDE_R) {
__GucDistance[__FRONTR] = 0x00;
} else {
__GucDistance[__FRONTR] = 0x01;
}
if (ucIRCheck & __FRONTSIDE_L) {
__GucDistance[__FRONTL] = 0x00;
} else {
__GucDistance[__FRONTL] = 0x01;
}
break;
case 2:
__irSendFreq(36000, 2); /* 驅(qū)動(dòng)檢測(cè)左前右三個(gè)方向遠(yuǎn)距 */
break;
case 3:
ucIRCheck = GPIOPinRead(GPIO_PORTB_BASE, 0x2a); /* 讀取傳感器狀態(tài) */
PWMGenDisable(PWM_BASE, PWM_GEN_2); /* 禁止PWM發(fā)生器2 */
break;
case 4:
__irSendFreq(36000, 2); /* 重復(fù)檢測(cè)左前右三個(gè)方向遠(yuǎn)距 */
break;
case 5:
ucIRCheck &= GPIOPinRead(GPIO_PORTB_BASE, 0x2a); /* 讀取傳感器狀態(tài) */
PWMGenDisable(PWM_BASE, PWM_GEN_2); /* 禁止PWM發(fā)生器2 */
if (ucIRCheck & __RIGHTSIDE) {
__GucDistance[__RIGHT] &= 0xfe;
} else {
__GucDistance[__RIGHT] |= 0x01;
}
if (ucIRCheck & __LEFTSIDE) {
__GucDistance[__LEFT] &= 0xfe;
} else {
__GucDistance[__LEFT] |= 0x01;
}
if (ucIRCheck & __FRONTSIDE) {
__GucDistance[__FRONT] &= 0xfe;
} else {
__GucDistance[__FRONT] |= 0x01;
}
break;
default:
break;
}
ucState = (ucState + 1) % 6; /* 循環(huán)檢測(cè) */
}
/*********************************************************************************************************
** Function name: mouseTurnright
** Descriptions: 右轉(zhuǎn)
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void mouseTurnright(void)
{
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
/*
* 開始右轉(zhuǎn)
*/
__delay(100);
__GucMouseState = __TURNRIGHT;
__GmRight.cDir = __MOTORGOBACK;
__GmRight.uiPulse = 53;
__GmRight.iSpeed = 65;
__GmLeft.cDir = __MOTORGOAHEAD;
__GmLeft.uiPulse = 54;
__GmLeft.iSpeed = 65;
__GmRight.cState = __MOTORRUN;
__GmLeft.cState = __MOTORRUN;
GucMouseDir = (GucMouseDir + 1) % 4; /* 方向標(biāo)記 */
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
__mazeInfDebug();
__delay(110000);
}
/*********************************************************************************************************
** Function name: mouseTurnleft
** Descriptions: 左轉(zhuǎn)
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void mouseTurnleft(void)
{
__delay(100);
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
/*
* 開始左轉(zhuǎn)
*/
__GucMouseState = __TURNLEFT;
__GmRight.cDir = __MOTORGOAHEAD;
__GmRight.uiPulse = 53;
__GmRight.iSpeed = 65;
__GmLeft.cDir = __MOTORGOBACK;
__GmLeft.uiPulse = 54;
__GmLeft.iSpeed = 65;
__GmRight.cState = __MOTORRUN;
__GmLeft.cState = __MOTORRUN;
GucMouseDir = (GucMouseDir + 3) % 4; /* 方向標(biāo)記 */
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
__mazeInfDebug();
__delay(110000);
}
/*********************************************************************************************************
** Function name: mouseTurnback
** Descriptions: 后轉(zhuǎn)
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void mouseTurnback(void)
{
/*
* 等待停止
*/
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
/*
* 開始后轉(zhuǎn)
*/
__GucMouseState = __TURNBACK;
__GmRight.cDir = __MOTORGOBACK;
__GmRight.uiPulse = 112;//162 * 10;
__GmRight.iSpeed = 100;
__GmLeft.cDir = __MOTORGOAHEAD;
__GmLeft.uiPulse = 111;//162 * 10;
__GmLeft.iSpeed = 100;
__GmLeft.cState = __MOTORRUN;
__GmRight.cState = __MOTORRUN;
GucMouseDir = (GucMouseDir + 2) % 4; /* 方向標(biāo)記 */
while (__GmLeft.cState != __MOTORSTOP);
while (__GmRight.cState != __MOTORSTOP);
__mazeInfDebug();
__delay(110000);
}
/*********************************************************************************************************
** Function name: __mouseCoorUpdate
** Descriptions: 根據(jù)當(dāng)前方向更新坐標(biāo)值
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void __mouseCoorUpdate (void)
{
switch (GucMouseDir) {
case 0:
GmcMouse.cY++;
break;
case 1:
GmcMouse.cX++;
break;
case 2:
GmcMouse.cY--;
break;
case 3:
GmcMouse.cX--;
break;
default:
break;
}
__mazeInfDebug();
__wallCheck();
}
/*********************************************************************************************************
** Function name: __wallCheck
** Descriptions: 根據(jù)傳感器檢測(cè)結(jié)果判斷是否存在墻壁
** input parameters: 無
** output parameters: 無
** Returned value: cValue: 低三位從左到右一次代表左前右。1為有墻,0為沒墻。
*********************************************************************************************************/
void __wallCheck (void)
{
uint8 ucMap = 0;
ucMap |= MOUSEWAY_B;
if (__GucDistance[__LEFT] & 0x01) {
ucMap &= ~MOUSEWAY_L;
}else {
ucMap |= MOUSEWAY_L;
}
if (__GucDistance[__FRONT] & 0x01) {
ucMap &= ~MOUSEWAY_F;
}else {
ucMap |= MOUSEWAY_F;
}
if (__GucDistance[__RIGHT] & 0x01) {
ucMap &= ~MOUSEWAY_R;
}else {
ucMap |= MOUSEWAY_R;
}
if (GucMapBlock[GmcMouse.cX][GmcMouse.cY] == 0x00) {
GucMapBlock[GmcMouse.cX][GmcMouse.cY] = ucMap;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -