本次介绍遥控控制小车
遥控使用的是:2262/2272四路 安防配件
脚位及使用说明:
遥控器接收端VT为输出状态指示引脚,遥控发射端任意按键有按动就可以输出高电平。
接线方式:
前进A->D2: PA10
后退B->D0: PA11
左转C->D3: PA8
右转D->D1: PA9
注意接线共地
control.c:
//按键初始化函数
void KEY_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA时钟
//初始化-->GPIOA 下拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY8按下
//2,KEY9按下
//3,KEY10按下
//4,KEY11按下
//注意此函数有响应优先级,KEY8>KEY9>KEY10>KEY11!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY8==1||KEY9==1||KEY10==1||KEY11==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY8==1)return KEY8_PRES;
else if(KEY9==1)return KEY9_PRES;
else if(KEY10==1)return KEY10_PRES;
else if(KEY11==1)return KEY11_PRES;
}else if(KEY8==0&&KEY9==0&&KEY10==0&&KEY11==0)key_up=1;
return 0;// 无按键按下
}
control.h
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
//#define KEY0 PEin(4) //PE4
//#define KEY1 PEin(3) //PE3
//#define KEY2 PEin(2) //PE2
//#define WK_UP PAin(0) //PA0 WK_UP
#define KEY8 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)//读取按键0
#define KEY9 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)//读取按键1
#define KEY10 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)//读取按键2
#define KEY11 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)//读取按键3(WK_UP)
#define KEY8_PRES 1 //KEY8按下
#define KEY9_PRES 2 //KEY9按下
#define KEY10_PRES 3 //KEY10按下
#define KEY11_PRES 4 //KEY11按下(即WK_UP/KEY_UP)
void KEY_Init(void);//IO初始化
u8 KEY_Scan(u8); //按键扫描函数
#endif
按键控制小车要使不按遥控器小车立刻停止,就需要程序支持连续按键模式。
遥控控制函数如下:
controltype.c
int main() //遥控控制函数
{
u8 key;
LED_Init();
delay_init();
KEY_Init();
Motor_Init();
TIM2_PWM_Init(100-1,720-1);
TIM4_PWM_Init(100-1,720-1);
LED=0;
while(1)
{
key=KEY_Scan(1); //得到键值 1.支持连续按键
if(key)
{
switch(key)
{
case KEY11_PRES: //前进
// Car_stop();
Car_forward(60);
LED=!LED;
delay_ms(100);
Car_stop();
break;
case KEY10_PRES: //后退
// Car_stop();
Car_backward(60);
delay_ms(100);
LED=!LED;
Car_stop();
break;
case KEY9_PRES: //左转
// Car_stop();
Car_turnL(60);
delay_ms(100);
LED=!LED;
Car_stop();
break;
case KEY8_PRES: //右转
// Car_stop();
Car_turnR(60);
delay_ms(100);
LED=!LED;
Car_stop();
break;
}
}else delay_ms(10);
}
}
测试效果欢迎观看视频:
小车测试效果