Raspi, Motoren per Tastatur/Controller ansteuern

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
gamble
User
Beiträge: 10
Registriert: Dienstag 26. April 2016, 10:36

ja stimmt...
ist mein erstes Projekt und mir fehlt noch das Hintergrundwissen :?
gamble
User
Beiträge: 10
Registriert: Dienstag 26. April 2016, 10:36

[codebox=jquery file=Unbenannt.js][/code]aber was ich nicht ganz verstehe:

Code: Alles auswählen

#!/usr/bin/python3

X_Button = 14
JOYSTICK_DEVICE_PATH = '/dev/input/js0'
CHANGE_INTERVAL = 0.1
STEERING_LEVELS = [0.0, 26.4, 37.9, 49.4, 63.2, 74.7, 87.4, 100.0]
speed_from_keyboard = 0

def run(speed_pwm, right_pwm, left_pwm, controller):
    while True:
        if controller.get_button(X_Button):
            return
        ... irgendwas mit speed_from_keyboard
        time.sleep(CHANGE_INTERVAL)
def main():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(
        [
            SPEED_PIN, FORWARD_PIN, BACKWARD_PIN, STEERING_PIN, RIGHT_PIN, LEFT_PIN, 
            UP_PIN, DOWN_PIN, OPEN_PIN, CLOSE_PIN, READY_PIN,
        ],
        GPIO.OUT,
        initial=GPIO.LOW
    )
    GPIO.output(READY_PIN, GPIO.HIGH)
    try:        
        controller = pygame.joystick.Joystick(0)
        controller.init()
        try:
            run(speed_pwm, right_pwm, left_pwm, controller)
        finally:
            pygame.quit()	
    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()
 
if __name__ == "__main__":
    main()
warum kennt das Skript X_Button und CHANGE_INTERVAL aber nicht "speed_from_keyboard"?
BlackJack

@gamble: Weil Du bei dem ”irgendwas” sicherlich irgendwo dem Namen etwas zuweist, und damit ist das ein lokaler Name der innerhalb der Funktion sichtbar ist und den gleichen Namen auf Modulebene verdeckt. Wenn Du innerhalb einer Funktion etwas zuweist, dann willst Du das ja aber sowieso nicht auf Modulebene zuweisen, denn das wäre dann ja eine globale Variable und damit Böse™.

`X_Button` sollte konventionell `X_BUTTON` heissen. Sonst denkt am Ende noch jemand es sei der Name einer Klasse. Auch wenn in *den* Namen normalerweise keine Unterstriche vorkommen.
Antworten