Python Tastatureingabe

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Hallo Leute

Ich hoffe es kann mir jemand helfen. Muss ein Projekt machen.

Möchte ein Auto steuern mit Raspberry pi 3 b+. Das Skript möcht ich im python schreiben. Der Motor für Antrieb rennt schon in die eine und andere Richtung.

Jetzt meine Frage, ich würde gerne den Motor mit Tastatureingabe steuern.
Hierzu gibt es schon viele Möglichkeiten. Aber komm damit nicht zurecht.

Hat vielleicht jemand einen Tipp wie es funktioniert?

Ich bitte um Antwort.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verstehe ich nicht. Wenn du eine Tastatur am PI hat, der gleichzeitig die Motoren steuert - wohin faehrt denn das Auto dann? Das Tastaturkabel ist ja nicht so wahnsinnig lang...

Kannst du dein gesamtes Setup mal ein bisschen genauer beschreiben?
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Ich muss mal vorab sagen Ziel ist es das Auto mittels Smartphone über Kamera zu steuern.

Als Zwischenschritt soll über eine Funktastatur den Antrieb und Lenkung zu steuern.

Verstehe nur nicht wie man die Eingabe deklariert
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Ich habe ein Cada Technik Modellauto in dem 2 motoren sind. Und diese sollen über das Raspberry pi das auf dem Auto montiert ist gesteuert werden.

Ich möchte vorab aber schon an anderen Motoren testen mittels tastatur.

Ich mache Raspberry pi die ganze ansteuerung und mein Kollege die Verbindung vom Handy
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was hast Du schon ausprobiert? Womit kommst Du konkret nicht zurecht?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt da verschiedene Moeglichkeiten. Wenn das eh nur so zum Test aufgebaut wird, dann kannst du zB mit pygame arbeiten.
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Das Problem ist weis nicht genau wie ich die methode genau aufbaue. Zumindest eine n wenig.

Ich muss ja eine Methode schreiben wo der Tastendruck ausgeführt wird. Ich möchte ja das solange ich die Taste gedrückt halte das Auto nach vor oder zurück fährt.

Kann mir jemand kurz diesen Methodenaufruf schreiben?

Dann wird ja mit def vorwärts()
Gpio.outpu(...) die Pins auf high oder Low gesetzt oder?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

pygame hat eine Hauptschleife, in der bestaendig Events (also auch Tastaturdruecke) abgefragt werden. Darin musst du dann einfach deine Logik einbauen. Ein kompaktes Beispiel zum rumspielen ist zB die zweite Antwort hier, das sollte eigentlich funktionieren:

https://stackoverflow.com/questions/160 ... -in-pygame
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Hey deets,

Danke mal für deine hilfe. Wird es mal ausprobieren. Wenn ich fragen habe kann ich mich wieder an dich wenden?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin ja hier, ja. Je konkreter die Fragen, je mehr Code, je besser. Und bitte oeffentlich posten, Beratung per PN mache ich nicht.
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Ok vielen Dank fürs erste
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

guten morgen,

so ich habe versucht mal mit pygame ein kleines programm zu schreiben. Eine LED ein und ausschalten. Einfach zum kennenlernen

Hier der Code:

import RPi.GPIO as GPIO
import pygame, sys, os
from pygame.locals import *

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)


def ledein():
GPIO.output(8, GPIO.HIGH)

def ledaus():
GPIO.output(8, GPIO.LOW)

events = pygame.event.get()
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
ledein()
if event.key == pygame.K_ENTER:
ledaus()

ich bekomme aber in der console diese fehlermeldung:

Traceback (most recent call last):
File "led2.py", line 16, in <module>
events = pygame.event.get()
pygame.error: viedeo system not initialized

wo habe ich den fehler?
kann mir wer helfen?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Fehlermeldung ist eindeutig: Du brauchst ein Video-System, also ein Fenster an das die Eingaben gesendet werden können. Warnungen sind da, um sie zu beheben, und nicht, um sie einfach zu ignorieren; daher fehlt noch ein gpio.finalize. sys und os werden importiert aber nicht benutzt.

Code: Alles auswählen

import RPi.GPIO as gpio
import pygame

def led_ein():
    gpio.output(8, gpio.HIGH)

def led_aus():
    gpio.output(8, gpio.LOW)

def main():
    try:
        gpio.setmode(gpio.BOARD)
        gpio.setup(8, gpio.OUT, initial=gpio.LOW)
        pygame.display.init()
        screen = pygame.display.set_mode((320, 240))
        while True:
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        led_ein()
                    if event.key == pygame.K_ENTER:
                        led_aus()
    finally:
        gpio.finalize()

if __name__ == '__main__':
    main()
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

Hallo,

hab diesen code jetzt mal versucht. nur irgendwie führt er bei mir die events nicht aus.
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

programm führt wohl aus nur sobald ich die escape taste drücke kommt:

Traceback (most recent call last):
File "led2.py", line 28 in <module>
main()
File "led2.py", line 25 in main
GPIO finalize()
AttributeError: 'module' object has no attribute finalize
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Heißt ja auch »gpio.cleanup«.
Crisou
User
Beiträge: 23
Registriert: Samstag 20. Oktober 2018, 18:09

das habe ich schon geändert

nur ich kann td nicht die LED was am raspi angeschlossen ist ein und auschalten.

oder brauch ich da wieder eine eigene funktion?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt mußt Du herausfinden, ob es am pygame liegt, oder ob das gpio nicht richtig funktioniert oder ob die LED nicht richtig angeschlossen ist. Ersteres läßt sich durch »print« an den richtigen Stellen herausfinden, zweiteres und drittes nur, indem man prüft, ob man auch den richtigen PIN hat und man die Schaltung prüft (richtige Polung, richtige Widerstände, etc).
Antworten