所以我使用树莓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)的惊人数字,因为我不知道在哪里导入它! :)
任何帮助将欣然接受了:)