python - 我需要在 Python 中使用 PWM 控制 2 个电机,用于树莓派 4。我使用 sys.argv [1]。PWM 必须在 while 循环内
问题描述
我正在尝试用树莓派 4 控制 2 个电机。参数 sys.argv [1] 给我带来了数字 1 来启动电机,而 2 则让电机反转。我需要将 pwm 命令放在 while 循环中,以便它可以保持不变。它对我不起作用,因为在 while 循环中留下了一些东西并且它让两个电机都打开。
import sys
import RPi.GPIO as GPIO
import os
import time
ena = 12 #Motor1
in1 = 23
in2 = 24
enb = 13 #Motor2
in3 = 19
in4 = 26
GPIO.setmode(GPIO.BCM)
GPIO.setup(ena,GPIO.OUT)
GPIO.setup(enb,GPIO.OUT)
GPIO.setup(in1, GPIO.OUT)
GPIO.setup(in2, GPIO.OUT)
GPIO.setup(in3, GPIO.OUT)
GPIO.setup(in4, GPIO.OUT)
pwm_1 = GPIO.PWM(ena,100)
pwm_2 = GPIO.PWM(enb,100)
pwm_1.start(0)
pwm_2.start(0)
duty = 20
#from web interface with PHP
x = sys.argv[1]
try:
while True:
if x=="1":
#Motor1
GPIO.output(in1,True)
GPIO.output(in2,False)
pwm_1.start(duty)
#pwm_1.ChangeDutyCycle(duty) #alternative
#Motor2
GPIO.output(in3,True)
GPIO.output(in4,False)
pwm_2.start(duty)
#pwm_2.ChangeDutyCycle(duty) #alternative
elif x=="2":
#Motor1
GPIO.output(in1,False)
GPIO.output(in2,True)
pwm_1.start(duty)
#pwm_1.ChangeDutyCycle(duty) #alternative
#Motor2
GPIO.output(in3,False)
GPIO.output(in4,True)
pwm_2.start(duty)
#pwm_2.ChangeDutyCycle(duty) #alternative
else:
pwm_1.stop()
pwm_2.stop()
GPIO.cleanup()
break
except ValueError:
pwm_1.stop()
pwm_2.stop()
GPIO.cleanup()
exit()
解决方案
推荐阅读
- mysql - 如何使用源命令引用与 mysql.exe 不在同一目录中的 .sql 文件
- wordpress - 如何更改自定义注册块样式的按钮外观?
- sql-server - 我想计算单独列中给出的特定日期的周末日期
- angular - 如何在 Angular 中定义订阅 Observables 的执行顺序?
- c++ - 用作默认参数的静态成员导致未解析的外部
- flutter - Flutter Scrollcontroller maxScrollExtent 直到列表末尾
- python - pexpect AttributeError: 'module' 对象没有属性 'spawn'
- r - 根据其他列中值的唯一组合分配新列
- sql - PostgreSQL 搜索字符串列中的子字符串列表
- r - R箱线图产生不正确的晶须?