Keyboard (2.4 GHz) als Fernsteuerung nutzen
Verfasst: Mittwoch 14. August 2019, 19:19
Hallo, ich bin ganz neu hier und brauche dringend Unterstützung.
Mit einem Keyboard (Rii Mini i8+/2.4 GHz) möchte ich auf meinem Raspberry 3B+ 2 Servos fernsteuern und ein Roboterauto bewegen. Dazu muss ich feststellen, welche Taste gedrückt wird. Das schaffe ich, auch bei Sondertasten, die eigntlich für Lautstärke- und Videosteuerung vorgesehen sind.
Mein Problem liegt aber darin, dass ich die Variablen, die für die sukzessive Bewegung der Servos vorgesehen sind, nicht ändern kann.
Der Programmcode funktioniert nur, wenn ich feste Werte eingebe, nicht wenn ich die Variablen ändere.
Im folgenden Python-Code sind die Zeilen, die einen Abbruch-Fehler hervorrufen deaktiviert (##).
Hat jemand eine Idee, was ich falsch mache?
Danke für jeden zielführenden Hinweis.
Anbei der Python-Code:
from __future__ import division
import sys, tty, termios, os, readchar
import pynput
from pynput import keyboard
import time
import pygame
pygame.init()
# Import the PCA9685 module.
import Adafruit_PCA9685
Taste = ""
servo_lr_akt = 400
servo_lr_min = 130
servo_lr_max = 730
servo_hr_akt = 400
servo_hr_min = 130
servo_hr_max = 730
currentlyRunning = True
# Initialise the PCA9685 using the default address (0x40).
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(0, 0, servo_lr_akt)
def set_servo_pulse(channel, pulse):
pulse_length = 1000000 # 1,000,000 us per second
pulse_length //= 60 # 60 Hz
print('{0}us per period'.format(pulse_length))
pulse_length //= 4096 # 12 bits of resolution
print('{0}us per bit'.format(pulse_length))
pulse *= 1000
pulse //= pulse_length
pwm.set_pwm(channel, 0, pulse)
def on_press(key):
try:
print('Key {0} pressed'.format(key.char))
except AttributeError:
print('Key {0} pressed'.format(key))
def on_release(key):
print('{0} released'.format(key))
print(key)
Taste = str(key)
print(Taste)
if Taste.find("269025046") == True:
##servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
sleep(1)
print("rechts")
return True
if Taste.find("269025047") == True:
##servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
sleep(1)
print("links")
return True
if Taste.find("269025041") == True:
##servo_hr_akt = servo_hr_akt + 5
pwm.set_pwm(1, 0, servo_hr_max)
sleep(1)
print("hoch")
return True
if Taste.find("269025043") == True:
##servo_hr_akt = servo_hlr_akt + 5
pwm.set_pwm(1, 0, servo_hr_akt )
sleep(1)
print("runter")
return True
if Taste.find("269025044") == True:
#servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(1, 0, servo_hr_akt)
print("stop")
return True
if key == keyboard.Key.esc:
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(1, 0, servo_hr_akt)
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
Mit einem Keyboard (Rii Mini i8+/2.4 GHz) möchte ich auf meinem Raspberry 3B+ 2 Servos fernsteuern und ein Roboterauto bewegen. Dazu muss ich feststellen, welche Taste gedrückt wird. Das schaffe ich, auch bei Sondertasten, die eigntlich für Lautstärke- und Videosteuerung vorgesehen sind.
Mein Problem liegt aber darin, dass ich die Variablen, die für die sukzessive Bewegung der Servos vorgesehen sind, nicht ändern kann.
Der Programmcode funktioniert nur, wenn ich feste Werte eingebe, nicht wenn ich die Variablen ändere.
Im folgenden Python-Code sind die Zeilen, die einen Abbruch-Fehler hervorrufen deaktiviert (##).
Hat jemand eine Idee, was ich falsch mache?
Danke für jeden zielführenden Hinweis.
Anbei der Python-Code:
from __future__ import division
import sys, tty, termios, os, readchar
import pynput
from pynput import keyboard
import time
import pygame
pygame.init()
# Import the PCA9685 module.
import Adafruit_PCA9685
Taste = ""
servo_lr_akt = 400
servo_lr_min = 130
servo_lr_max = 730
servo_hr_akt = 400
servo_hr_min = 130
servo_hr_max = 730
currentlyRunning = True
# Initialise the PCA9685 using the default address (0x40).
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(0, 0, servo_lr_akt)
def set_servo_pulse(channel, pulse):
pulse_length = 1000000 # 1,000,000 us per second
pulse_length //= 60 # 60 Hz
print('{0}us per period'.format(pulse_length))
pulse_length //= 4096 # 12 bits of resolution
print('{0}us per bit'.format(pulse_length))
pulse *= 1000
pulse //= pulse_length
pwm.set_pwm(channel, 0, pulse)
def on_press(key):
try:
print('Key {0} pressed'.format(key.char))
except AttributeError:
print('Key {0} pressed'.format(key))
def on_release(key):
print('{0} released'.format(key))
print(key)
Taste = str(key)
print(Taste)
if Taste.find("269025046") == True:
##servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
sleep(1)
print("rechts")
return True
if Taste.find("269025047") == True:
##servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
sleep(1)
print("links")
return True
if Taste.find("269025041") == True:
##servo_hr_akt = servo_hr_akt + 5
pwm.set_pwm(1, 0, servo_hr_max)
sleep(1)
print("hoch")
return True
if Taste.find("269025043") == True:
##servo_hr_akt = servo_hlr_akt + 5
pwm.set_pwm(1, 0, servo_hr_akt )
sleep(1)
print("runter")
return True
if Taste.find("269025044") == True:
#servo_lr_akt = servo_lr_akt + 5
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(1, 0, servo_hr_akt)
print("stop")
return True
if key == keyboard.Key.esc:
pwm.set_pwm(0, 0, servo_lr_akt)
pwm.set_pwm(1, 0, servo_hr_akt)
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()