所以我使用樹莓pi B +做一個小機器人,一切都很順利,但我得到這個錯誤信息,我似乎並沒有能夠解決..屬性錯誤:RPi.GPIO.PWM沒有屬性'ChangeDutyCycle'
屬性錯誤:RPi.GPIO.PWM有沒有屬性「ChangeDutyCycle」
這裏是你可能需要知道兩件事情:d - 該代碼非常完美,我把它作爲前ChangeDutyCycle是否存在 - 如果我將鼠標置於「不允許」(即允許ChangeDutyCycle值小於0或大於100的值),則錯誤更改並且變爲「ChangeDutyCycle不能接受小於0的值或超過100「(所以首先你告訴我沒有這樣的功能,然後告訴我它不能有一些價值? :roll:)
所以我現在要稍微瘋狂了。 注意:我是一個完整的Python初學者,說實話,在我看來,就像一個糟糕的Java版本,但RPi GPIO似乎是針對這種語言進行了優化,所以我試了一下,所以如果你看到任何東西其他錯誤或不好的事情,不要讓我知道:d
現在的代碼:
我的「主」,在那裏我從一個pygame的窗口輸入(鼠標位置)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pygame
import RPi.GPIO as GPIO
from pygame.locals import *
from control import control
print('Path :', pygame.__file__)
def main():
pygame.init()
screen = pygame.display.set_mode((200,200))
ctrl = control()
bg = pygame.Surface(screen.get_size())
bg = bg.convert()
bg.fill((250,250,250))
font = pygame.font.Font(None, 36)
text = font.render("Hello", 1, (10,10,10,))
textpos = text.get_rect()
textpos.centerx = bg.get_rect().centerx
bg.blit(text, textpos)
screen.blit(bg, (0,0))
pygame.display.flip()
try:
while 1:
for event in pygame.event.get():
bg.fill((250, 250, 250))
if event.type == QUIT:
return
pos = pygame.mouse.get_pos()
x = pos[0]-100
y = -(pos[1]-200)-100
text = font.render(str(x)+' '+str(y), 1, (10,10,10,))
ctrl.updateEngine(x,y)
bg.blit(text,textpos)
screen.blit(bg, (0,0))
pygame.display.flip()
except KeyboardInterrupt:
return
finally:
ctrl.cleanup()
if __name__ == '__main__': main()
而且我的班級具有控制電機的功能,control.py:
import RPi.GPIO as GPIO
from time import sleep
import sys
import Tkinter as tk
class control:
def __init__(self):
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.OUT)# set GPIO 25 as output for white led
GPIO.setup(18, GPIO.OUT)# set GPIO 24 as output for red led
GPIO.setup(2, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
self.Rb = GPIO.PWM(2, 100)
self.Lf = GPIO.PWM(18, 100)
self.Lb = GPIO.PWM(17, 100)
self.Rf = GPIO.PWM(3, 100)
self.Rb.start(0)
self.Rf.start(0)
self.Lb.start(0)
self.Lf.start(0)
def cleanup(self):
self.Rb.stop()
self.Rf.stop()
self.Lb.stop()
self.Lf.stop()
def updateEngine(self, x, y):
self.clear()
if y>15 and (x>15 or x<-15) :
self.Rf.ChangeDutyCucle(y-15-x)
self.Lf.ChangeDutyCycle(y-15+x)
elif y<-15 and (x>15 or x<-15) :
self.Rb.ChangeDutyCycle(-15-y-x)
self.Lb.ChangeDutyCycle(-15-y+x)
def clear(self):
self.Rf.ChangeDutyCycle(0)
self.Rb.ChangeDutyCycle(0)
self.Lf.ChangeDutyCycle(0)
self.Lb.ChangeDutyCycle(0)
所以錯誤發生在control.py中,在updateEngine方法中。 另外你會注意到我導入了3倍的相同數據包(RPi.GPIO)的驚人數字,因爲我不知道在哪裏導入它! :)
任何幫助將欣然接受了:)