STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车

文章目录

    • STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车
    • 前言
  • 一、实现的功能?
  • 二、主要代码及模块讲解
    • 1.主要代码
    • 2.RX(接收端)
  • demo总体分析和代码部分解读
    • PWM驱动部分
    • 游戏摇杆ADC部分
    • NRF2401模块

前言

在电赛延期之后,用了两三天时间,从空的车模到板子的搭建,再到程序,实现了STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 代码逻辑不难,主要是锻炼板子搭建接线、代码测试、效果运行等方面,涉及到的东西包括PWM、ADC采集、2.4G通信等


实物照片如下

演示视频链接如下

演示视频

一、实现的功能?

基于STM32F103ZET6系列(两块板子分别为精英版、board),(用两块精英版一样的道理,也可以自己制板,比较麻烦)。主要模块为:游戏摇杆ADC采集模块、LCD屏幕、NRF2401两个、车模一个(包括直流减速电机和转向舵机)其他包括稳压模块等
实现无线遥控小车前进后退左右转,前进后退制动速度、舵机转向角度根据摇杆控制。

二、主要代码及模块讲解

1.主要代码

TX(发送端)代码如下

while(1){    show();        //显示游戏摇柄电压值大小,方便调试LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");  NRF24L01_TX_Mode(); if(NRF24L01_TxPacket(tmp_buf)==TX_OK) //检测状态、准备发送数据{tmp_buf[1]=1;        //点灯测试数据是否成功tmp_buf[2]=2;/***********前进部分***************/if(go_speed>150&&go_speed<500)      //检测电压值tmp_buf[3]=1;           //1挡最低速、3挡最高速,实现速度调控else if(go_speed>500&&go_speed<800)tmp_buf[3]=2;else if(go_speed>800) tmp_buf[3]=3;else tmp_buf[3]=0;/***********后退部分***************/if(back_speed>150&&back_speed<500)tmp_buf[5]=1;else if(back_speed>500&&back_speed<900)tmp_buf[5]=2;else if(back_speed>900) tmp_buf[5]=3;else tmp_buf[5]=0;/***********左转部分***************/if(left_speed>150&&left_speed<650)tmp_buf[7]=1;else if(left_speed>650&&left_speed<1000)tmp_buf[7]=2;else if(left_speed>1000) tmp_buf[7]=3;else tmp_buf[7]=0;/***********右转部分***************/if(right_speed>50&&right_speed<550)tmp_buf[9]=1;else if(right_speed>550&&right_speed<900)tmp_buf[9]=2;else if(right_speed>900) tmp_buf[9]=3;else tmp_buf[9]=0;tmp_buf[32]=0;//加入结束符}

2.RX(接收端)

代码如下:

while(1){    // show();       //调试检查 LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");  LCD_ShowString(30,170,200,16,16,"Received DATA:");    NRF24L01_RX_Mode();       while(1){         if(NRF24L01_RxPacket(tmp_buf)==0)//检测状态、准备接收{tmp_buf[32]=0;//加入结束符LCD_ShowxNum(60,210,tmp_buf[3],4,16,0);    //LCD显示状态、方便调试LCD_ShowxNum(60,240,tmp_buf[5],4,16,0);LCD_ShowxNum(60,270,tmp_buf[7],4,16,0);LCD_ShowxNum(60,300,tmp_buf[9],4,16,0);}else delay_us(100);/***********前进部分***************/ if(tmp_buf[3]==1) go_speed = 500;else if(tmp_buf[3]==2) go_speed = 800;else if(tmp_buf[3]==3) go_speed = 1200;else go_speed = 0;/***********后退部分***************/if(tmp_buf[5]==1) back_speed = 500;else if(tmp_buf[5]==2) back_speed = 800;else if(tmp_buf[5]==3) back_speed = 1200;else back_speed = 0;/***********转动部分***************/if(tmp_buf[7]==1) left_speed = 1050;//此部分代码后面有解释else if(tmp_buf[7]==2) left_speed = 850;else if(tmp_buf[7]==3) left_speed = 650;if(tmp_buf[9]==1) left_speed = 1450;else if(tmp_buf[9]==2) left_speed = 1650;else if(tmp_buf[9]==3) left_speed = 1800;if(tmp_buf[7]==0&&tmp_buf[9]==0) left_speed = 1250;//TIM_SetCompare3(TIM3,1250); //pwm输出,制动前进、后退、左转、右转TIM_SetCompare1(TIM3,go_speed);//前进TIM_SetCompare2(TIM3,back_speed);//后退TIM_SetCompare3(TIM3,left_speed);//角度舵机转动};

demo总体分析和代码部分解读

这个项目总体来说很简单,但自己从车模到代码的编写和测试都需要一定的时间和细心程度

PWM驱动部分

无论是电机驱动还是舵机转角,都需要pwm进行驱动,此demo使用STM32的TIM3定时器输出思路pwm进行调速,具体代码见工程包,网上也有很多。(第四路未用到)

游戏摇杆ADC部分

这部分主要是要通过两路ADC读取一个摇杆的电压值,demo中两个摇杆一共需要四个I/O口来读取电压值,并不是每一个I/O都能当作AD的(不要乱用),此部分要查资料,网上也有很多,详情看代码包

NRF2401模块

这个模块是经典的2.4G通信模块,比起LORA能更快的上手,这个模块的驱动代码网上都有,主要说我开发过程遇到的坑,tmp_buf这个数组是U8型的,看清楚不要传不匹配的数据,这个数组的每一个大小是8位的,也就是说传值的大小只能是0~255(8位二进制最大值),这也是我为什么速度的调控先传1 2 3 0 的档位,接收的时候再根据档位去调控应该输出的速度大小。这个模块一个要检测寄存器的位,就是NRF24L01_TxPacket(tmp_buf)==TX_OK
NRF24L01_RxPacket(tmp_buf)==0
这两句

/最后,代码包链接如下*******/

代码包

STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车相关推荐

  1. 【毕设项目】基于单片机的遥控小车设计与实现 - 嵌入式 物联网 stm32 c51

    文章目录 1 简介 2 主要器件与实现 2.1 电机驱动模块 2.2 蓝牙模块 2.3 蓝牙调试APP 3 实现效果 5 部分参考代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍 ...

  2. 基于51单片机的遥控小车

    基于51单片机的遥控小车(HC-05模块,L298n模块) 保姆级 1.硬件准备 2.部分硬件说明 USB转TTL模块 可以把串口发送的TTL信号转换成USB信号再发送给电脑,电脑就可以接收到单片机发 ...

  3. 89c51控制小车运行c语言,STC89C52单片机蓝牙遥控小车代码

    所用模块: 1.蓝牙模块 2.超声波模块 3.LCD1602模块 4.L298N模块 5.寻迹模块 主要功能: 1.蓝牙可以遥控小车 2.超声波可以测距避障 3.小车可以寻黑线 使用逻辑: 串口初始化 ...

  4. 单片机智能遥控小车实战

    能遥控小车实战 单片机视频教程 单机片实战 包含必学的视频教程+说明书 手册 原理图+参考实验 完美的单机片视频教程! 视频教程目录: 视频教程目录: 下载地址:关注wx公众号feixueteam

  5. 51单片机之遥控小车基本之无线光电门区段测速及51单片机介绍

    一 实现的过程: 1.51单片机作为主控芯片,主要用于调控芯片中的各个模块,详情我们可以参考附录代码: 2.ESP8266WiFi模块作为发射与接收数据,我们可以采用模块自带的AY指令来控制, AT+ ...

  6. STC12C5A60S2单片机-双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

  7. 基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集

    基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集 一.PS2游戏机摇杆概述 1.1PS2游戏机摇杆概述 1.2PS2游戏机摇杆图解 二.硬件连接分析 三.代码实现 3.1 ADC代码 ...

  8. STM32F103校内赛-摇杆遥控器

    STM32F103摇杆和按键学习 现在回忆我暑假回家自学STM32F103摇杆,只能说当时的我简直菜的离谱,我现在回看我自己找的摇杆程序,理解个差不多,但是有一点我很难受,就是我那时候竟然能忍受很乱的 ...

  9. nRF24L01--2.4G无线通信模块(1)(51单片机和51单片机通信)

    作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 或者 https://blog.csdn.net/Kevin_8_Lee/article/details/9 ...

最新文章

  1. Elide 4.3.1 发布,雅虎开源的应用数据 API 搭建平台
  2. IP地址修改后ORACLE不能使用问题
  3. php lodop 实例,Vue使用lodop实现打印小结
  4. 一篇文章学懂Shell脚本,最简明的教程在这里
  5. Java IO: File
  6. python 原始字符串_Python原始字符串
  7. jieba 中文分词使用教程
  8. vue使用插件jsbarcode 生成条码下载
  9. jspx页面用到的一些在值表达式中的运算符含义
  10. H3C IRF2的三种配置情况「转载」
  11. pip安装faiss
  12. Matlab窄带信号的测向算法
  13. ODM、JDM、OBM 、OEM概念的区别与理解
  14. java 并g1_JVM G1详解
  15. 吐槽一下typora
  16. Linux进阶之路-Ubuntu版
  17. c0000005 Access Violation
  18. foxmail邮件只能显示邮件头,不能显示内容
  19. C语言刷题系列——14.(结构)计算两个复数之积15.按等级统计学生成绩16.根据成绩高低将学生记录排序
  20. 华文行楷字帖欣赏_千字文华文行楷字帖.pdf

热门文章

  1. 面向对象贪吃蛇游戏源码
  2. jvm-sandbox-repeater环境搭建
  3. Spring Cloud Ribbon 是什么?
  4. matplotlib 的rcParams文件、常见的中文字体问题以及图片中全局字体大小控制
  5. C#使用WinExec调用exe程序
  6. SequoiaDB巨杉数据库SequoiaFS挂载目录
  7. CSS 3.0图片像素放大马赛克特效
  8. mac打开服务器文件管理,6款热门受欢迎的mac文件管理软件~
  9. 记一次构建基于arm的linux根文件系统的曲折历程
  10. java xsd校验,java中使用xsd验证xml | 学步园