【树莓派】拉线式编码器/位移传感器数据读取(AB相)(2)

参考链接
【1】【树莓派】拉线式编码器/位移传感器数据读取(AB相)
【2】【Arduino】拉线式编码器/位移传感器数据读取(AB相)
【3】树莓派引脚编号

接线效果图

在这里插入图片描述

键盘输入q后停止计数、计时代码

由于拉线传感器代码只能在拉线传感器产生位移时有数据,因此为了计算被测物的移动速度,需要记录位移产生变化的时刻,而树莓派的GPIO.add_event_detect()不能传递参数,因此需要在def中断服务函数中声明全局变量(global),每次中断产生一次新位移+时刻,再把新位移+时刻插入到位移数组与时刻数组内,由于新位移的数量不确定且每次记录数据至txt内都会产生时延(导致记录缺步且降低精度),因此只能在记录完成时通过键盘输入q终止程序+记录数据

代码,能跑

import RPi.GPIO as GPIO #导入RPi.GPIO库
import time #导入time库
import numpy as np
import array

APin = 23#Green,BCM                               
BPin = 24#White,BCM

GPIO.setwarnings(False) #不加这句会有警告,因为该引脚已经被设置成了非默认值(也可以不加,不影响正常使用)
GPIO.setmode(GPIO.BCM)  #使用BCM编码的引脚号
GPIO.setup(APin,GPIO.IN,GPIO.PUD_DOWN)#配置引脚模式
GPIO.setup(BPin,GPIO.IN,GPIO.PUD_DOWN)#设置引脚模式
                    
status = 0 #记录电平状态
arr_encoder=np.array([])#arr_encoder记录新产生的位移数据
time_encoder=np.array([])#time_encoder记录新产生的位移数据对应的时刻

def APinInterrupt(APin):#外部中断服务函数
    global status#全局变量
    global arr_encoder#全局变量
    global time_encoder#全局变量
    
    AAA=GPIO.input(APin)
    BBB=GPIO.input(BPin)
    if AAA==BBB :
        status=status+1
    else :
        status=status-1
    #记录数据
    arr_encoder=np.append(arr_encoder,status*0.125)#arr_encoder记录位移,mm
    time_encoder=np.append(time_encoder,time.time())#time_encoder记录arr_encoder位移产生的时刻
    print(status*0.125)#mm,输出位移
        
def inter():#中断函数
    GPIO.add_event_detect(APin,GPIO.BOTH,APinInterrupt)#中断服务函数

if __name__=='__main__':
    inter()
    value_input=input()#键盘输入q后终止程序、记录数据至txt内
    if value_input=='q':
        print('save the txt file')
        np.savetxt('Data-encoder.txt',arr_encoder,delimiter=',')
        np.savetxt('Time-encoder.txt',time_encoder,delimiter=',')


注:
Python time.time()的功能是:返回当前时间的时间戳,即1970纪元后经过的浮点秒数,返回值精确到小数点后六位
精确到小数点后六位
精确到小数点后六位
精确到小数点后六位

时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(背景时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的可验证的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值