制作简单的小车运动控制程序,使用遥控器给小车发指令,遥控器和接收器都使用STM32。
遥控器端发不同的指令,小车接收器端解析指令再控制步进电机不同的运转。基于NRF24L01,作如下具体事项。
遥控器端main程序:
#include "sys.h"
#include "misc.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "24l01.h"
//#include "timer.h"
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
int main(void)
{
u8 key;
u8 tmp_buf[33];
u8 t;
SystemInit(); //系统时钟等初始化
delay_init(72); //初始化延时
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化波特率为9600,停止位1
LED_Init(); //初始化LED灯
KEY_Init(); //按键初始化
NRF24L01_Init(); //初始化NRF24L01
while(NRF24L01_Check())//检测不到24L01
{
delay_ms(1000);
LED0=!LED0; //D2闪烁
}
TX_Mode();//发送模式
for(t=0;t<6;t++)
{
tmp_buf[t]='0';
}
while(1)
{
key=KEY_Scan(0);
switch(key)
{
case KEY_FORWARD:
for(t=0;t<6;t++)
{
tmp_buf[t]='1';
}
NRF24L01_TxPacket(tmp_buf);
LED1=!LED1; //D3闪烁
//LCD_ShowString(100,210,239,32,16,"forward ");
break;
case KEY_BACKWARD:
for(t=0;t<6;t++)
{
tmp_buf[t]='2';
}
NRF24L01_TxPacket(tmp_buf);
LED1=!LED1; //D3闪烁
//LCD_ShowString(100,210,239,32,16,"backward ");
break;
case KEY_LEFT:
for(t=0;t<6;t++)
{
tmp_buf[t]='3';
}
NRF24L01_TxPacket(tmp_buf);
LED1=!LED1; //D3闪烁
//LCD_ShowString(100,210,239,32,16,"turn left");
break;
case KEY_RIGHT:
for(t=0;t<6;t++)
{
tmp_buf[t]='4';
}
NRF24L01_TxPacket(tmp_buf);
LED1=!LED1; //D3闪烁
//LCD_ShowString(100,210,239,32,16,"turn right");
break;
case KEY_STOP:
tmp_buf[0] = '1';
tmp_buf[1] = '1';
tmp_buf[2] = '1';
tmp_buf[3] = '0';
tmp_buf[4] = '1';
tmp_buf[5] = '1';
LED1=!LED1; //D3闪烁
NRF24L01_TxPacket(tmp_buf);
//LCD_ShowString(100,210,239,32,16,"Stop ");
break;
case KEY_VACUUMPUMP:
tmp_buf[0] = '1';
tmp_buf[1]