久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32紅外尋循跡小車源碼
[打印本頁]
作者:
angel_Rayna
時間:
2018-11-30 16:58
標(biāo)題:
STM32紅外尋循跡小車源碼
循跡小車源碼分享給大家。
單片機源程序如下:
//連接方式 :請參考interface.h文件
#include "stm32f10x.h"
#include "interface.h"
#include "LCD1602.h"
#include "IRCtrol.h"
#include "motor.h"
#include "uart.h"
//全局變量定義
unsigned int speed_count=0;//占空比計數(shù)器 50次一周期
char front_left_speed_duty=SPEED_DUTY;
char front_right_speed_duty=SPEED_DUTY;
char behind_left_speed_duty=SPEED_DUTY;
char behind_right_speed_duty=SPEED_DUTY;
unsigned char tick_5ms = 0;//5ms計數(shù)器,作為主函數(shù)的基本周期
unsigned char tick_1ms = 0;//1ms計數(shù)器,作為電機的基本計數(shù)器
unsigned char tick_200ms = 0;//刷新顯示
char ctrl_comm = COMM_STOP;//控制指令
char ctrl_comm_last = COMM_STOP;//上一次的指令
unsigned char continue_time=0;
unsigned char bt_rec_flag=0;//藍(lán)牙控制標(biāo)志位
//循跡,通過判斷三個光電對管的狀態(tài)來控制小車運動
void SearchRun(void)
{
//三路都檢測到
if(SEARCH_M_IO == BLACK_AREA && SEARCH_L_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA)
{
ctrl_comm = COMM_UP;
return;
}
if(SEARCH_R_IO == BLACK_AREA)//右
{
ctrl_comm = COMM_RIGHT;
}
else if(SEARCH_L_IO == BLACK_AREA)//左
{
ctrl_comm = COMM_LEFT;
}
else if(SEARCH_M_IO == BLACK_AREA)//中
{
ctrl_comm = COMM_UP;
}
}
int main(void)
{
delay_init();
GPIOCLKInit();
UserLEDInit();
LCD1602Init();
//IRCtrolInit();
TIM2_Init();
MotorInit();
ServoInit();
RedRayInit();
//USART3Conf(9600);
while(1)
{
if(tick_5ms >= 5)
{
tick_5ms = 0;
tick_200ms++;
if(tick_200ms >= 40)
{
tick_200ms = 0;
LEDToggle(LED_PIN);
}
// continue_time--;//200ms 無接收指令就停車
// if(continue_time == 0)
// {
// continue_time = 1;
// CarStop();
// }
//do something
SearchRun();
if(ctrl_comm_last != ctrl_comm)//指令發(fā)生變化
{
ctrl_comm_last = ctrl_comm;
switch(ctrl_comm)
{
case COMM_UP: CarGo();break;
case COMM_DOWN: CarBack();break;
case COMM_LEFT: CarLeft();break;
case COMM_RIGHT: CarRight();break;
case COMM_STOP: CarStop();break;
default : break;
}
Delayms(10);//防抖
LCD1602WriteCommand(ctrl_comm);
}
}
}
}
復(fù)制代碼
#include "IRCtrol.h"
#include "interface.h"
unsigned char ir_rec_flag=0;//接收數(shù)據(jù)標(biāo)志位 1 有新數(shù)據(jù) 0 沒有
unsigned char IRCOM[4];
//use time3 realize delay systick已經(jīng)在main函數(shù)中使用了,在中斷中不能重復(fù)使用
void Time3Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 1;
TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1);//72M / 72 = 1us
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
}
//1us 延時
void DelayUs(vu32 nCount)
{
u16 TIMCounter = nCount;
TIM_Cmd(TIM3, ENABLE);
TIM_SetCounter(TIM3, TIMCounter);
while (TIMCounter>1)
{
TIMCounter = TIM_GetCounter(TIM3);
}
TIM_Cmd(TIM3, DISABLE);
}
//外部中斷配置 紅外遙控配置
void IRCtrolInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;//定義一個外部中斷相關(guān)的結(jié)構(gòu)體
NVIC_InitTypeDef NVIC_InitStructure; //定義一個中斷的結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);
GPIO_InitStructure.GPIO_Pin = IRIN_PIN;//配置使能GPIO管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//配置GPIO模式,輸入上拉
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置GPIO端口速度
GPIO_Init(IRIN_GPIO , &GPIO_InitStructure);
GPIO_EXTILineConfig(IRIN_PORTSOURCE , IRIN_PINSOURCE);
EXTI_InitStructure.EXTI_Line = IRIN_EXITLINE;//將對應(yīng)的GPIO口連接到中斷線上
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//中斷事件類型,下降沿
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//選擇模式,中斷型
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能該中斷
EXTI_Init(&EXTI_InitStructure);//將配置好的參數(shù)寫入寄存器
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //階級為0,不可嵌套
NVIC_InitStructure.NVIC_IRQChannel = IRIN_IRQCH;//打開PINA_8的外部中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//主優(yōu)先級0,最高
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子優(yōu)先級,最低
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能該模塊中斷
NVIC_Init(&NVIC_InitStructure); //中斷初始化,將結(jié)構(gòu)體定義的數(shù)據(jù)執(zhí)行
Time3Init();
}
/*******************************************************************************
* 函 數(shù) 名 :DelayIr
* 函數(shù)功能 :0.14MS 延時
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void DelayIr(unsigned char x)
{
while(x--)
{
DelayUs(140);
}
}
void IRIntIsr(void)
{
unsigned char j,k,N=0;
DelayIr(15);
if (IRIN==1)
{
return;
}
continue_time = 40;//連發(fā)信號,表示指令持續(xù) 40*5 = 200ms 無指令停車
//確認(rèn)IR信號出現(xiàn)
while (!IRIN) //等IR變?yōu)楦唠娖剑^9ms的前導(dǎo)低電平信號。
{DelayIr(1);}
for (j=0;j<4;j++) //收集四組數(shù)據(jù)
{
for (k=0;k<8;k++) //每組數(shù)據(jù)有8位
{
while (IRIN) //等 IR 變?yōu)榈碗娖,跳過4.5ms的前導(dǎo)高電平信號。
{DelayIr(1);}
while (!IRIN) //等 IR 變?yōu)楦唠娖?br />
{DelayIr(1);}
while (IRIN) //計算IR高電平時長
{
DelayIr(1);
N++;
if (N>=30)
{
return;} //0.14ms計數(shù)過長自動離開。
} //高電平計數(shù)完畢
IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補“1”
N=0;
}//end for k
}//end for j
k = ~IRCOM[3];
if (IRCOM[2] != k)
{
return; }
//指令轉(zhuǎn)換
switch(IRCOM[2])
{
case 0x46: ctrl_comm = COMM_UP;break;
case 0x15: ctrl_comm = COMM_DOWN;break;
case 0x44: ctrl_comm = COMM_LEFT;break;
case 0x43: ctrl_comm = COMM_RIGHT;break;
case 0x40: ctrl_comm = COMM_STOP;break;
default : return;
}
ir_rec_flag = 1;
}
復(fù)制代碼
所有資料51hei提供下載:
紅外黑線循跡.rar
(272.46 KB, 下載次數(shù): 31)
2018-12-1 03:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成年人在线播放
|
91一区二区在线观看
|
成人精品国产一区二区4080
|
97色在线观看免费视频
|
久久99深爱久久99精品
|
又黑又粗又长的欧美一区
|
情侣酒店偷拍一区二区在线播放
|
久久久久成人精品
|
日韩电影一区二区三区
|
丁香色婷婷
|
91传媒在线观看
|
91日b
|
色一情一乱一伦一区二区三区
|
午夜免费观看网站
|
成人午夜视频在线观看
|
天天看逼
|
欧美久久一区二区
|
成人黄色在线
|
91精品国产91久久久久久密臀
|
又黑又粗又长的欧美一区
|
久久精品69
|
一区二区三区福利视频
|
精品一二三区
|
日日操夜夜操天天操
|
日日干夜夜干
|
av大片
|
国产无人区一区二区三区
|
国产精品视频不卡
|
亚洲欧洲精品在线
|
久久久一二三
|
一级毛片大全免费播放
|
在线一级片
|
99久久婷婷国产综合精品首页
|
国产精品爱久久久久久久
|
国产高清一区二区三区
|
九九在线视频
|
精品伊人
|
久久综合伊人一区二区三
|
欧美久
|
91视频在线网站
|
亚洲有码转帖
|