2016-03-05 160 views
0

所以我使用樹莓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)的驚人數字,因爲我不知道在哪裏導入它! :)

任何幫助將欣然接受了:)

回答

0

我我的問題追查到一個錯字:我updateEngine函數必須調用self.Rf.ChangeDutyCucle,當它應該是self.Rf.ChangeDutyCycle

相關問題