标题:
STM32F103AGV小车程序
[打印本页]
作者:
ForrestWuuu
时间:
2019-6-22 22:21
标题:
STM32F103AGV小车程序
功能:同时实现自主循迹、自动避障、红外遥控、舵机运动
单片机源程序如下:
//连接方式 :请参考interface.h文件
#include "stm32f10x.h"
#include "interface.h"
#include "LCD1602.h"
#include "IRCtrol.h"
#include "motor.h"
#include "uart.h"
#include "redvoid.h"
#include "UltrasonicCtrol.h"
//全局变量定义
unsigned int speed_count=0;//占空比计数器 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计数器,作为主函数的基本周期
unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
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;//蓝牙控制标志位
unsigned char duoji_count=0;
unsigned char zhuanjiao = 11;
void DuojiMid()
{
zhuanjiao = 12;
Delayms(300);
}
void DuojiRight()
{
zhuanjiao = 14;
Delayms(300);
}
void DuojiLeft()
{
zhuanjiao = 10;
Delayms(300);
}
//循迹,通过判断三个光电对管的状态来控制小车运动
void SearchRun(void)
{
//三路都检测到
if(SEARCH_M_IO == BLACK_AREA && SEARCH_L_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA)
{
ctrl_comm = COMM_UP;
DuojiLeft();
return;
}
if(VOID_R_IO == BARRIER_Y && VOID_L_IO == BARRIER_Y)
{
VoidRun();
}
else if(VOID_L_IO == BARRIER_Y)
{
VoidRun();
}
else if(VOID_R_IO == BARRIER_Y)
{
VoidRun();
}
else 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;
}
if(SEARCH_M_IO == WHITE_AREA && SEARCH_L_IO == WHITE_AREA && SEARCH_R_IO == WHITE_AREA)
{
continue_time--;//200ms 无接收指令就停车
if(continue_time == 0)
{
continue_time = 1;
CarStop();
}
if(ir_rec_flag == 1)//接收到红外信号
{
ir_rec_flag = 0;
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();DuojiRight();break;
default : break;
}
LCD1602WriteCommand(ctrl_comm);
}
}
}
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)//指令发生变化
{
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);
}
}
}
}
复制代码
所有资料51hei提供下载:
移动机器人.zip
(5.58 MB, 下载次数: 73)
2019-6-22 22:19 上传
点击文件名下载附件
AGV
下载积分: 黑币 -5
作者:
伊特
时间:
2019-8-2 18:42
谢谢,有没有连接图呐
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1