2015-11-01 60 views
1

我試圖使用raw_input函數輸入一個字母,例如lr,它會像0.41.6一定的PWM值。這裏是我的代碼:怎樣的raw_input使用控制PWM

import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BCM) 
GPIO.setwarnings(False) 

GPIO.cleanup() 

enable_pin = 18 
coil_A_1_pin = 27 
coil_A_2_pin = 17 
coil_B_1_pin = 23 
coil_B_2_pin = 24 
coil_A_x1_pin = 22 
coil_A_x2_pin = 5 
coil_B_x1_pin = 6 
coil_B_x2_pin = 13 

s = 12 
GPIO.setup(enable_pin, GPIO.OUT) 
GPIO.setup(coil_A_1_pin, GPIO.OUT) 
GPIO.setup(coil_A_2_pin, GPIO.OUT) 
GPIO.setup(coil_B_1_pin, GPIO.OUT) 
GPIO.setup(coil_B_2_pin, GPIO.OUT) 
GPIO.setup(coil_A_x1_pin, GPIO.OUT) 
GPIO.setup(coil_A_x2_pin, GPIO.OUT) 
GPIO.setup(coil_B_x1_pin, GPIO.OUT) 
GPIO.setup(coil_B_x2_pin, GPIO.OUT) 
GPIO.setup(s, GPIO.OUT) 

GPIO.output(enable_pin, 1) 

def forward(delay, steps): 
    for i in range(0, steps): 
    setStep(1, 1, 0, 0) 
    time.sleep(delay) 
    setStep(0, 1, 1, 0) 
    time.sleep(delay) 
    setStep(0, 0, 1, 1) 
    time.sleep(delay) 
    setStep(1, 0, 0, 1) 
    time.sleep(delay) 

def backwards(delay, steps): 
    for i in range(0, steps): 
    setStep(1, 0, 0, 1) 
    time.sleep(delay) 
    setStep(0, 0, 1, 1) 
    time.sleep(delay) 
    setStep(0, 1, 1, 0) 
    time.sleep(delay) 
    setStep(1, 1, 0, 0) 
    time.sleep(delay) 


def setStep(w1, w2, w3, w4): 
    GPIO.output(coil_A_1_pin, w1) 
    GPIO.output(coil_A_x1_pin, w1) 
    GPIO.output(coil_A_2_pin, w2) 
    GPIO.output(coil_A_x2_pin, w2) 
    GPIO.output(coil_B_1_pin, w3) 
    GPIO.output(coil_B_x1_pin, w3) 
    GPIO.output(coil_B_2_pin, w4) 
    GPIO.output(coil_B_x2_pin, w4) 


p = GPIO.PWM(s,7.5) 


try: 
    while True: 
    l = 0.3 
    r = 1.7 
    n = 1.1 
    pos = raw_input("Left(l), right(r) or neutral(n)? ") 
    p.ChangeDutyCycle(float(pos)) 
    delay = raw_input("Delay between steps (milliseconds)? ") 
    steps = raw_input("How many steps forward? ") 
    forward(int(delay)/1000.0, int(steps)) 
    steps = raw_input("How many steps backwards? ") 
    backwards(int(delay)/1000.0, int(steps)) 
except KeyboardInterrupt: 
    GPIO.cleanup() 

我也有另一個程序與pygame做到這一點,但我無法弄清楚如何使用通過SSH對一個開發模式的Chromebook,所以我拋棄這一點。另外,不要介意所有def和我正在運行的步進電機的其他事情。步進電機工作正常,因爲我直接輸入數字而不是變量,但我無法弄清楚如何使它與變量一起工作。如果有人向我展示如何在chromebook上通過ssh運行pygame,這會讓它變得容易很多,這將是非常棒的!

回答

0

對於變量pos,您應該使用input而不是raw_input
基本上s = input('Say: ')做同樣的事情作爲

s = eval(raw_input('Say: ')) 

即給定的輸入字符串將被評價。那麼你甚至不需要做一個浮動。

+0

好的,我會試試看,並回復你。 – malteasy

相關問題