python - 在 Python 和 Rpi 中达到特定值后将值返回为 0
问题描述
我有一个连接到 Raspberrypi 的编码器。电机连接到arduino,根据编码器的值,电机将起作用。我可以使用串行通信(USB)将值从 rpi 发送到 arduino。问题是,该值不断增加(例如1、2、3,......)。我希望编码器的值一旦读取为 10 就应该从 0 开始,如下面的代码所示。帮助将不胜感激。
import RPi.GPIO as GPIO
import time
import serial
ser=serial.Serial('/dev/ttyACM0',9600)
#ser.write(b'0')
GPIO.setmode (GPIO.BCM)
GPIO.setwarnings(True)
pin_A = 17
pin_B = 18
Encoder_Count = 0
A_Pos2=0
GPIO.setup (pin_A, GPIO.IN)
GPIO.setup (pin_B, GPIO.IN)
A_Pos = 0
A_Last = "00"
STATE = {"0001":1,"0010":-1,"0100":-1,"0111":1,"1000":1,"1011":-1, "1101":-1, "1110":1}
def Encoder1(channel1):
global Encoder_Count,A_Pos,A_Last,STATE
now = str(GPIO.input(17)) + str(GPIO.input(18))
key = A_Last + now
if key in STATE:
direction = STATE[key]
A_Last = now
A_Pos +=direction
GPIO.add_event_detect (pin_A, GPIO.BOTH, callback=Encoder1)
GPIO.add_event_detect (pin_B, GPIO.BOTH, callback=Encoder1)
#A_Pos2=0
while(1):
# ser.write(b'1')
A_Pos2= A_Pos/(1600)
print (A_Pos2)
if (A_Pos2 >10):
ser.write(b'0')
time.sleep(0.01)
GPIO.cleanup()
解决方案
这可以通过模运算来完成,除非我遗漏了一些东西:
if (A_Pos2 >10):
A_Pos2 = A_Pos2 % 10
A_Pos2
一旦达到 10,它将重置为 0。
推荐阅读
- flutter - 颤振按钮图标不随音频播放器改变
- r - 因变量中缺少数据的回归模型
- python - 数据框 - 具有时间值的字符串类型列的平均值
- python - 驱动程序在功能/硒中不起作用
- c# - 使用 c# 代码在 Header 中使用 Assertion Saml2 创建 SOAP 消息
- c++ - 如何将两个 C 风格的数组匹配到 google mock 中?
- python - pymongo 用它的子字符串值更新字段集合中的所有文档
- collections - 如何转换列表
到地图 使用 Java8 流 - pandas - 防止 pandas 插值外推
- git - 本地和远程文件的 git 2 版本