0

我来自谷歌的示例代码。

#!/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 行,在 j = pygame.joystick.Joystick() 类型错误:函数只需要 1 个参数(给定 0)

4

1 回答 1

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 行:假设前面有一个 # 标签,仅用于表示法。您实际上可以删除此行,因为它无论如何都是来自其他人的项目的注释。第 78 行:缩进不正确。它必须遵循它上面的“ while True ”循环的缩进。所以要修复它,请确保将第 78 行中的命令一直退格到左侧,然后按空格键 8 次,或者按 TAB 键 2 次,同样的事情。那将解决它!

现在你的代码可以工作了。实际上最后一件事,确保也安装 pygame 库,如果你还没有它,请在 Xterminal 中输入它(我使用 raspberry pi 和 raspbian):sudo apt-get install python-pygame

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

于 2017-06-17T13:45:21.847 回答