树莓派中用python检测连续脉冲
来源:互联网 发布:程敏政 知乎 编辑:程序博客网 时间:2024/06/05 17:40
在制作树莓派小车过程中,需要对轮子进行测速,采用的是马达+霍尔传感器的形式,小车运动的同时,霍尔传感器输出连续脉冲,即可通过检测脉冲的数量计算小车的速度,前行的距离等等。
在树莓派中检测脉冲,一般有两种方法:
轮询
边缘检测
这两者方法和工作原理在这篇文章中讲解的非常清楚:
使用 RPi.GPIO 模块的输入(Input)功能
在笔者的程序中,需要实时连续的检测脉冲,采用的是边缘检测方式,对应的Python代码为:
```python #霍尔脉冲读取函数 GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_UP) #通过18号引脚读取左轮脉冲数据 GPIO.setup(35, GPIO.IN,pull_up_down=GPIO.PUD_UP) #通过35号引脚读取右轮脉冲数据 counter=0 #左轮脉冲初值 counter1=0 #右轮脉冲初值 def my_callback(channel): #边缘检测回调函数,详情在参见链接中 global counter #设置为全局变量 if GPIO.event_detected(18): #检测到一个脉冲则脉冲数加1 counter=counter+1 def my_callback1(channel1): #这里的channel和channel1无须赋确定值,但笔者测试过,不能不写 global counter1 if GPIO.event_detected(35): counter1=counter1+1 GPIO.add_event_detect(18,GPIO.RISING,callback=my_callback) #在引脚上添加上升临界值检测再回调 GPIO.add_event_detect(35,GPIO.RISING,callback=my_callback1) ```
在边缘检测方式中,add_event_detect()函数运行后,会为回调函数另外开启一个线程,与主程序并发运行,因此不容易错过当 CPU 忙于处理其它事物时输入状态的改变。但同一进程内也最好不要有太过耗费CPU时间的部分,否则仍会导致脉冲的丢失,如果不可避免,可以用多进程去处理CPU密集型代码部分。
人生苦短,我用Python~
阅读全文
0 0
- 树莓派中用python检测连续脉冲
- Arduino Mega_ADK 脉冲检测
- 脉冲序列的检测
- 脉冲检测法
- Verilog 脉冲边沿检测
- python中用正则表达式检测邮件是否合法
- 脉冲边沿检测(Verilog)
- python递归检测文件名是否连续
- 脉冲边沿检测的亚稳态处理
- 脉冲
- 脉冲
- 高矮脉冲数据提取分离,以及连续计数程序结构
- 【Python】Python文本处理中用langid工具包来对文本进行语言检测与判别
- FPGA基础之脉冲边沿检测原理verilog版本
- 数字电路中如何实现脉冲的边沿检测
- 使用定时器1以方式0产生周期为500us的方波连续脉冲
- python中用beautifulSoup 安装
- python中用beautifulSoup 安装
- 搜集一些有趣的排序算法,持续更新
- HDU6069(素数筛选+思维)
- HDU 6075 Questionnaire
- wait(1000)与sleep(1000)的区别
- 拦截导弹noip1999
- 树莓派中用python检测连续脉冲
- 设计模式5——建造者模式
- PHP·保存会话数据的两种技术之一·Cookie·实例
- leetcode-634 Find the Derangement of An Array(水水的模拟)
- 对四元数解算姿态的理解
- spring boot的ActiveMQ使用
- FZU
- 关于创建对象数组的引用数据类型空指针异常问题
- 【Java集合】HashMap和Hashtable