Return 在 Python 和 Rpi 达到特定值后该值变为 0
Return the value to 0 after reaching specific value in Python and Rpi
我有一个连接到 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。
我有一个连接到 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。