红外寻迹原理以及STM32 GPIO的输入检测

2023-11-09

红外寻迹原理以及GPIO的输入检测

一、红外寻迹原理

    采用YL-70 红外寻迹壁障模块,红外发射管(透明)发出红外光,如果红外光照在浅色平面,则红外光被反射,并且被红外接收管(黑色)接收,同时对应的输出接口输出低电平(0),红外主板上对应的LED灯也会点亮如果红外光照在深色平面,则红外光被吸收不会被反射,此时对应的输出接口输出高电平(1),对应的LED灯熄灭红外主板链接红外发射和接收管的位置处,有一个点位旋钮可以用来调节红外管的检测距离,顺时针增加检测距离,逆时针降低检测距离
小板原理图
在这里插入图片描述
主控板原理图
在这里插入图片描述
主板实物图
在这里插入图片描述

二、STM32 GPIO的输入检测

GPIO_ReadInputDataBit用来获取输入模式下的 GPIO引脚的电平状态

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx ,  uint16_t GPIO_Pin )  
       @GPIOx:指定要获取输入状态的引脚的GPIO分组 
           GPIOA  ...  GPIOI 
       @GPIO_Pin:指定要获取输入状态的引脚编号  
           GPIO_Pin_0  ...  GPIO_Pin_15  
       返回值:  获取到高电平,则返回 1  
                获取到低电平,则返回 0

注意:链接红外的GPIO引脚是需要获取红外检测信号所以,该引脚应该配置为 输入模式,并且不需要上下拉电阻

工作任务

获取红外检测信号,完成小车红外寻迹

/*红外模式的 IN1链接在 PC11上,IN4链接在PB6上*/
#define IN1  GPIO_Pin_11
#define IN2  GPIO_Pin_6

/*初始化输入检测GPIO*/
void Input_init(void)
{
    /*定义GPIO初始化结构体*/
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitTypeDef GPIO_InitStruct1;
	
	/*1.使能GPIOC组GPIOB组时钟*/
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	
	/*2.配置GPIO输入模式*/
	GPIO_InitStruct.GPIO_Pin   =   IN1 ;
	GPIO_InitStruct.GPIO_Mode  =   GPIO_Mode_IN;
	GPIO_InitStruct.GPIO_OType =   GPIO_OType_PP;
	GPIO_InitStruct.GPIO_Speed =   GPIO_Speed_100MHz;
	GPIO_InitStruct.GPIO_PuPd  =   GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	GPIO_InitStruct1.GPIO_Pin   =   IN2 ;
	GPIO_InitStruct1.GPIO_Mode  =   GPIO_Mode_IN;
	GPIO_InitStruct1.GPIO_OType =   GPIO_OType_PP;
	GPIO_InitStruct1.GPIO_Speed =   GPIO_Speed_100MHz;
	GPIO_InitStruct1.GPIO_PuPd  =   GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOB, &GPIO_InitStruct1);
	/*3.默认复位*/
	GPIO_ResetBits(GPIOC, IN1);
	GPIO_ResetBits(GPIOB, IN2);
	
}

int main(void)
{
  /*定义时钟*/
  SysTick_Config(SystemCoreClock/1000);
  
  /*初始化GPIO*/
  control_init();
  Input_init();
  
  /*进入寻迹模式*/
  while (1)
  {
	if(GPIO_ReadInputDataBit(GPIOC,IN1)==0&&GPIO_ReadInputDataBit(GPIOB,IN2)==0)
    {
      car_go();
	}
	else if(GPIO_ReadInputDataBit(GPIOC,IN1)==1&&GPIO_ReadInputDataBit(GPIOB,IN2)==0)
	{
	  car_turn_left();
		
	}
	else if(GPIO_ReadInputDataBit(GPIOC,IN1)==0&&GPIO_ReadInputDataBit(GPIOB,IN2)==1)
	{
  	  car_turn_right();
	}
	else
	{
	  car_stop();
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

红外寻迹原理以及STM32 GPIO的输入检测 的相关文章

  • shell 多行注释

    在写 shell 脚本的时候 经常需要注释多行命令 但在每一行前输入 很不方便 1 DOCUMENT 可以采用 HERE DOCUMENT 特性 实现多行注释 这是比较稳妥的作法 比如 bin bash lt lt COMMENT your
  • 火焰检测的相关步骤及算法综述

    引言 随着人类社会的发展进步 火灾成为了不可忽视的多发性问题 火灾一次次展示了其对于人员伤亡和财产的巨大破坏性 火灾的预防和检测一直是人类与火灾斗争过程中关注的焦点 1 近些年来 随着数字通信技术 计算机技术的发展 数字图像处理技术获得了广

随机推荐

  • Yolo系列目标检测 V1-V8

    当two stage proposal detection 系列的算法在目标检测界大展身手的时候 不禁会有人问道 Why we have to train proposal first 于是 便有学者展开了关于one stage算法的研究
  • 修改jupyter notebook的默认路径

    前言 由于不想占用C盘空间 所以想修改jupyter notebook的默认路径 第一次打开anaconda中自带的jupyter notebook 默认路径都是C Users Admin 自己的用户名 新建想默认打开的文件夹 在你想以后默
  • N沟道和P沟道MOS FET开关电路

    在电路中常见到使用MOS FET场效应管作为开关管使用 下面举例进行说明 如图1所示 使用了P沟道的内置二极管的电路 此处二极管的主要作用是续流作用 电路是Li电池充放电电路 当外部电源断开时采用Li电池进行内部供电 即 5V电源断开后Q1
  • python做量化交易干货分享

    python做量化交易干货分享 http www newsmth net nForum article Python 128763 最近程序化交易很热 量化也是我很感兴趣的一块 国内量化交易的平台有几家 我个人比较喜欢用的是JoinQuan
  • Java、解一元二次方程

    可以使用下面的公式求一元二次方程 ax 2 bx c 0 的两个根 r1 b b 2 4ac 2a r2 b b 2 4ac 2a b 2 4ac 称作一元二次方程的判别式 如果它是正值 那么一元二次方程就有两个实数根 如果它为 0 方程式
  • eclipse代码格式化的注释缩进问题

    未修改前ctrl shift f格式化代码 注释缩进不能和代码保持一致 拿到要被转换的字符串 Scanner scanner new Scanner System in String str scanner nextLine 通过内存流实现
  • vue3 props传入的组件无法正常刷新

    问题描述 vue3 写入的数据无法正常渲染 但是从子组件获取正常 使用props导入 解决方案 在setup导出的时候 直接导入props 而不是导入props 变量 错误用法 props var1 let var1 张三 setup re
  • phpstudy安装教程

    1 下载phpstudy 2 安装文件 3 把pikachu文件解压到phpstudy phptutorial WWW 文件名字改成pikachu 4 启动 MySQL管理器 输入账号密码 确定 5 打开浏览器 输入127 0 0 1 pi
  • 微信开放平台_第三方平台授权流程_接口调用令牌

    六 接口调用令牌 6 1 官网说明 在公众号 小程序接口调用令牌 authorizer access token 失效时 可以使用刷新令牌 authorizer refresh token 获取新的接口调用令牌 注意 authorizer
  • Qt开发环境下载和安装

    文档下载地址 https download csdn net download blackbattery 10439812 Qt是跨平台的图形开发库 目前由Digia全资子公司 Qt Company 独立运营 官方网址 http www q
  • 关于C/C++标识符、常量、变量的理解

    1 标识符是由字母和数字构成的序列 第一个字符必须是英文字母 下划线 也被看成是字母 大写字母和小写字母是不同的 标识符可以为任意长度 对于内部标识符来说 至少前31 个字母是有效的 在某些实现中 有效的字符数可能更多 2 在程序执行过程中
  • 数组组成的最小数字

    题目 最小数字 给定一个整型数组 请从该数组中选择3个元素组成最小数字并输出 如果数组长度小于3 则选择数组中所有元素来组成最小数字 输入描述 一行用半角逗号分割的字符串记录的整型数组 0 lt 数组长度 lt 100 0 lt 整数的取值
  • 【TypeScript】项目中对于TypeScript的打包处理

    webpack 通常情况下 实际开发中我们都需要使用构建工具对代码进行打包 TS同样也可以结合构建工具一起使用 下边以webpack为例介绍一下如何结合构建工具使用TS 步骤 初始化项目 进入项目根目录 执行命令 npm init y 主要
  • java 矩阵[多维数组]源代码

    1 import java util Random 2 3 矩阵类 4 public class Matrix 5 6 private int matrix 7 8 Random random new Random 9 10 构造方法 11
  • YiOVE书源:不只是书源,还有对书源的一些预处理,比如提前查看书源数量,以及包含哪些小说站

    引言 我是一个小说爱好者 阅读APP更是其中的效果斐然的不错宝器 平时自己也会收集一些书源 但是在这过程中产生了一些需求 比如 书源的数目是多少 书源链接还有效吗 于是 自己基于Flask写了一个程序 可以解决以上需求 并且可以在网页端显示
  • JqGrid完整例子

    之前写过一篇过于ajax异步加载jqgrid的文章 那个只是一个特殊的情况 如果创建不同数据库表的jqgrid 必须分别写servlet dao层和连接池 很麻烦 今天我写了一个万能的写法 客官只要在前台js中写入表格名称和字段名称即可实现
  • java 中秒杀逻辑

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 考虑要点 二 预减库存 三 秒杀超卖 四 排它锁是什么 前言 什么是秒杀 是一种高并发的技术 许多电商网站都是采用这样的技术应对突发流量的问题 一 考虑要
  • tensorflow提示缺少cudnn64_7.dll

    解决思路 下载一个 https developer nvidia com rdp cudnn download 下载后的压缩包有三个文件 把三个文件添加到对应的地方即可
  • Linux ping www.baidu.com时报错 Name or service not known原因

    一般是你配置的ens33的IPADDR跟虚拟机网络编辑器里的网段不一样 编辑 虚拟网络编辑器 NAT模式 NET设置 这里可以更改net设置里的参数 vi etc sysconfig network scripts ifcfg ens33
  • 红外寻迹原理以及STM32 GPIO的输入检测

    红外寻迹原理以及GPIO的输入检测 一 红外寻迹原理 采用YL 70 红外寻迹壁障模块 红外发射管 透明 发出红外光 如果红外光照在浅色平面 则红外光被反射 并且被红外接收管 黑色 接收 同时对应的输出接口输出低电平 0 红外主板上对应的L