我有麻烦,j = pygame.joystick.Joystick()

时间:2017-03-03 12:21:58

标签: python controls rc servo

我的谷歌示例代码。

#!/usr/bin/env python

import pygame
from pygame import
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

# Initialise the pygame library
pygame.init()

# Connect to the first JoyStick16:11:10:05:0B:1C
j = pygame.joystick.Joystick(0)
j.init()

print 'Initialized Joystick : %s' % j.get_name()

# Setup the various GPIO values, using the BCM numbers for now
MotorA0 = 16
MotorA1 = 18
MotorAE = 22

MotorB0 = 23
MotorB1 = 21
MotorBE = 19
16:11:10:05:0B:1C
A0 = False
A1 = False
B0 = False
B1 = False



GPIO.setup(MotorA0,GPIO.OUT)
GPIO.setup(MotorA1,GPIO.OUT)
GPIO.setup(MotorAE,GPIO.OUT)

GPIO.setup(MotorB0,GPIO.OUT)
GPIO.setup(MotorB1,GPIO.OUT)
GPIO.setup(MotorBE,GPIO.OUT)

# Set all the Motors to 'off'
GPIO.output(MotorA0, A0)
GPIO.output(MotorA1, A1)
GPIO.output(MotorAE, False)
GPIO.output(MotorBE, False)
GPIO.output(MotorB0, B0)
GPIO.output(MotorB1, B1)


# Only start the motors when the inputs go above the following threshold
threshold = 0.60


LeftTrack = 0
RightTrack = 0

# Configure the motors to match the current settings.

def setmotors():
    GPIO.output(MotorA0, A0)
    GPIO.output(MotorA1, A1)
    GPIO.output(MotorAE, True)
    GPIO.output(MotorBE, True)
    GPIO.output(MotorB0, B0)
    GPIO.output(MotorB1, B1)

# Try and run the main code, and in case of failure we can stop the motors
try:
    # Turn on the motors
    GPIO.output(MotorAE, True)
    GPIO.output(MotorBE, True)

    # This is the main loop
    while True:

    # Check for any queued events and then process each one
    events = pygame.event.get()
    for event in events:
      UpdateMotors = 0

      # Check if one of the joysticks has moved
      if event.type == pygame.JOYAXISMOTION:
        if event.axis == 1:
          LeftTrack = event.value
          UpdateMotors = 1
        elif event.axis == 3:
          RightTrack = event.value
          UpdateMotors = 1

        # Check if we need to update what the motors are doing
        if UpdateMotors:

          # Check how to configure the left motor

          # Move forwards
          if (RightTrack > threshold):
              A0 = False
              A1 = True
          # Move backwards
          elif (RightTrack < -threshold):
              A0 = True
              A1 = False
          # Stopping
          else:
              A0 = False
              A1 = False

          # And do the same for the right motor
          if (LeftTrack > threshold):
              B0 = False
              B1 = True
          # Move backwards
          elif (LeftTrack < -threshold):
              B0 = True
              B1 = False
          # Otherwise stop
          else:
              B0 = False
              B1 = False

          # Now we've worked out what is going on we can tell the
          # motors what they need to do
          setmotors()


except KeyboardInterrupt:
    # Turn off the motors
    GPIO.output(MotorAE, False)
    GPIO.output(MotorBE, False)
    j.quit()#!/usr/bin/env python

GPIO.cleanup()

当我运行此代码时,我有一个疑难解答。

追踪(最近一次通话):   文件“control.py”,第13行,in     j = pygame.joystick.Joystick() TypeError:function只需1个参数(0给定)

1 个答案:

答案 0 :(得分:0)

Your issue is that the command line j=pygame.joystick.Joystick(0) is calling the first ps3 controller that is available and paired to your raspberry pi (or whatever device you are using). 
With that said, if you do not have a ps3 controller paired with the device, it will never work, because the next command line calls the Ps3controller 0 , and in your case, seems not to be any installed or paired.

您的代码还有其他一些问题:

第4行:完全删除此行 第26行:假设在它之前有一个#hashtag,仅用于表示法。你实际上可以删除这一行,因为无论如何它都来自别人的项目。 第78行:缩进不正确。它必须遵循它上面的“ while True ”循环的缩进。所以要修复它,确保将第78行中的命令一直退到左边,然后按空格键8次,或按TAB键2次,同样的事情。这将解决它!

现在您的代码正常运行。实际上最后一件事,确保安装pygame库,在Xterminal中键入它(我使用带有raspbian的raspberry pi)如果你还没有它:sudo apt-get install python-pygame

我希望这一切都有所帮助。我知道你会有更多的问题,这段代码常常让我生气!lol