STM32蓝牙控制循迹避障小车源代码——2.循迹模块

注意-所需模块:

接线:四个循迹模块(从左到右分别为1,2,3,4)
B4–第1个循迹模块的D0
B5–第2个循迹模块的D0
B6–第3个循迹模块的D0
B7–第4个循迹模块的D0

代码

所有的代码都是直接从工程里面复制的,实测是没有问题的。

参考文章: 基于STM32F103C8T6的循迹避障小车完整制作过程

我这里再简单总结一下:

  • 四个IO口,VCC,GND,A0,D0.
    用3个,即VCC,GND,D0(输出高低电平)
    当模块检测到黑线的时候,D0输出高电平,正常情况下D0输出处低电平。

  • 定义B4,B5,B6,B7引脚,分别接到4个循迹模块上的D0口。

  • 四个循迹模块从左到右依次为: 1 2 3 4
    如果4个全部没有读取黑线,直走; Forward();
    如果2,3读取黑线,直走; Forward();
    如果2读取黑线,左转; Turn_left();
    如果3读取黑线,右转; Turn_right();
    如果1读取黑线,大左转; Big_Turn_left();
    如果4读取黑线,大右转; Big_Turn_right();

xunji.c

#include "XUNJI.H"//   1   2   3   4  :  B4  B5  B6  B7
void xunji_config(void)//引脚初始化
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOBGPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//上拉输入GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);//初始化B4,B5,B6,B7}void Read_xunji_Date(void)//读取两个循迹模块的电平
{xunji_1;xunji_2;xunji_3;xunji_4;}

xunji.h:

#ifndef __XUNJI_H
#define __XUNJI_H#include "stm32f10x.h"//定义B4,B5引脚读取循迹模块D0
#define xunji_1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)
#define xunji_2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
#define xunji_3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)
#define xunji_4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)void xunji_config(void);
void Read_xunji_Date(void);#endif

测试

将上面两个代码写进工程里,在主函数里写进以下代码。

main.c

#include "stm32f10x.h"
#include "moter.h"
#include "delay.h"
#include "xunji.h"
#include "usart.h"//循迹模块从左到右为: 1   2   3   4  :  B4  B5  B6  B7int main(void)
{delay_init();    //延时初始化       TIM3_PWM_Init();    //电机pwm   TIM3xunji_config();       //引脚初始化while(1){Read_xunji_Date();//读取循迹值if(xunji_1==0&&xunji_2==0&&xunji_3==0&&xunji_4==0)//如果4个全部没有读取黑线,直走;   Forward();{Forward(500);delay_ms(5);}if(xunji_1==0&&xunji_2==1&&xunji_3==1&&xunji_4==0)//如果2,3读取黑线,直走;   Forward();{Forward(500);delay_ms(5);}if(xunji_1==0&&xunji_2==1&&xunji_3==0&&xunji_4==0)//如果2读取黑线,左转;   Turn_left();{Turn_left(500);delay_ms(5);}if(xunji_1==0&&xunji_2==0&&xunji_3==1&&xunji_4==0)//如果3读取黑线,右转;   Turn_right();{Turn_right(500);delay_ms(5);}if(xunji_1==1&&xunji_2==0&&xunji_3==0&&xunji_4==0)//如果1读取黑线,大左转;   Big_Turn_left();{Big_Turn_left(200);delay_ms(5);}if(xunji_1==0&&xunji_2==0&&xunji_3==0&&xunji_4==1)//如果4读取黑线,大右转;   Big_Turn_right();{Big_Turn_right(200);delay_ms(5);}}}

工程项目:
STM32蓝牙控制循迹避障小车–测试2 循迹模块.zip

下一节我会写舵机和超声波

STM32蓝牙控制循迹避障小车——2.循迹模块相关推荐

  1. STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制

    STM32蓝牙控制循迹避障小车源代码--4.蓝牙控制 注意-所需模块: 蓝牙模块 接线: 串口通信 A2–RX A3–TX 所有的代码都是直接从工程里面复制的,实测是没有问题的. 蓝牙控制原理: 设计 ...

  2. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块

    STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...

  3. STM32蓝牙控制循迹避障小车源代码——5.最终程序

    STM32蓝牙控制循迹避障小车源代码--5.最终程序 将前面4讲的内容整合一起.主函数里用switch函数或者if语句来判断接收到的数据,改变小车的运动. 注意要将控制循迹和避障的参数单独定义一个.否 ...

  4. 基于STM32的智能循迹避障小车实验(小车运动部分)

    写在前面 这个实验是关于智能小车的实验,现在的想法就是先做出一个循迹和避障功能,后续可能会再添加一些其他的模块. 我在做这个实验之前基本了解了F1系列开发板的大部分模块,如果没有学习之前的模块,建议先 ...

  5. STM32循迹避障小车制作代码详解(简单实现版)

    感谢几年来大家的支持,看到大家对工程的呼声很高,所以来把工程上传了,大家自行下载即可哈,谢谢大家支持 这个代码是进阶版的,就是可以跑的很快的,和上面博客的主要区别就是这个代码的避障机制并不是做在主ma ...

  6. 基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)

    基于STM32F103C8T6的循迹避障小车完整制作过程 本文适合小白观看 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程中也参考了很多大神分享的资料,学到 ...

  7. 基于STM32F103的红外循迹避障小车设计(含Proteus仿真)

    基于STM32F103的红外循迹避障小车设计 红外循迹及红外避障实现较简单,无论是51单片机还是STM32单片机,其例程随处可见.但是完全可以运行的Proteus仿真,开源的并不多,更不要说基于STM ...

  8. c语言智能车跑道检测程序,基于单片机的智能循迹避障小车(附电路原理图,程序清单)...

    基于单片机的智能循迹避障小车(附电路原理图,程序清单)(论文10000字) 摘要:目前,移动机器人的开发和研究越来越令人瞩目,而智能循迹壁障小车作为移动机器人的一个重要分支,非常值得我们探索和讨论.智 ...

  9. 基于STC12C5616AD芯片智能循迹避障小车完整制作过程(详细教程)

    前言:本篇文章适合小白阅读,其中有很基础的Keil 5的使用教程等.大多网友知道如何使用,因此大家可以看目录,对于自己而言比较基础的可以不用阅读,重点关注一些迷茫的部分. 智能循迹避障小车教程目录 智 ...

最新文章

  1. 区块链人才月均薪酬1.6W?
  2. Open Images冠军,商汤提出解偶检测分支新方法TSD并入选CVPR 2020
  3. SQL server 存储过程的建立和调用
  4. 为什么写Java程序需要接口
  5. SSM高级整合_非Maven控制版本下SSM高级整合
  6. C语言计算一个数的平方根立方根,怎样快速计算出一个数的平方根立方根?
  7. 详解div+css相对定位和绝对定位用法
  8. pro c 访问 MySQL_Pro*C  OCI  OCCI  及OCI介绍
  9. android 按钮点击声音,如何在Android中单击按钮时播放声音?
  10. opencv实现matlab的median()函数
  11. svn 认证失败请看解决办法
  12. Windows 10 1703-1909 版本 Win+X 丢失原控制面板解决方法
  13. C++对象模型——Member的各种调用方式(第四章)
  14. GDSII format
  15. 2019 Java程序员(方向)
  16. Jquery解决视频播放过程中定时弹出确认窗口
  17. 图像标记的认识加使用
  18. Maya/3DMax/RV的集成插件下载
  19. java中计算一个文件的总字节数_【JVM故事】一个Java字节码文件的诞生记
  20. 「直播回放」数仓如何落地

热门文章

  1. 当3dsmax软件崩溃闪退时,该如何做?
  2. twitter APi的使用与twitter数据的应用
  3. 关于Mongodb的全面总结
  4. GD32,在电源电路VDD VDDA VREF+/-参考设计
  5. PHP高级面试题(三)
  6. 关于renameTo的用法
  7. STM32:使用ST官方的原理图和PCB封装
  8. STM32 Cube MX学习笔记——TOF 高速单线激光雷达 L10(usart)
  9. LABVIEW绘制等高线
  10. 《ucore lab1 练习5》实验报告