所以我正在使用树莓派B +制作一个小机器人,一切都进展得很顺利,但我收到的这个错误信息似乎无法解决..
属性错误:RPi.GPIO.PWM没有属性'ChangeDutyCycle'
以下是您可能需要了解的两件事:D - 在我把它作为一个类之前,代码工作得很好,ChangeDutyCycle确实存在 - 如果我将鼠标置于'不允许'即ie给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方法中。 另外你会注意到我导入了相同包装(RPi.GPIO)3倍的惊人数量,因为我不知道在哪里导入它! :)
任何帮助都会得到慷慨接受:)
答案 0 :(得分:0)
我将问题追溯到一个错字:我的updateEngine
函数调用了self.Rf.ChangeDutyCucle
,它应该是self.Rf.ChangeDutyCycle
。