Hallo an alle,
ich bin "neu" bei Python. Ich nutze es auf meinem Raspberry, um elektronische Baugruppen via spi-Bus anzusteuern. Das klappt soweit auch schon recht gut - es hilft, wenn man andere Sprachen (bash, C, C++, PHP) spricht :)
Nun stehe ich an folgender Stelle und auch Mr. google hat mich mehr verwirrt als geholfen:
Ich bin mir bei drei SPI-Speicherstellen nicht sicher, was ich da für einen Wert übertragen muss, Dummerweise beeinflussen sich die drei Einstellungen auch noch gegenseitig. Klar: ich könnte das Script stets abbrechen, die Variable im Quellcode erneut zuweisen und dann neu starten. Dauert bei drei Speicherstellen aber eine gefühlte Ewigkeit.
Einfacher wäre es, wenn ich 6 Tasten definieren könnte, und bei einem Druck auf die Taste wirde Speicherstelle 1, 2 oder 3 jeweils um einen Wert erhöht bzw. erniedrigt.
Die Codestellen zum verändern der Variablen sind trivial und fertig. Mir ist es aber bislang nicht gelungen, eine Funktion unter Python zu finden, die den Scancode (oder irgendwas anderes) einer evtl. gedrückten Taste zurückgibt und NICHT ANHÄLT BIS EINE TASTE GEDRÜCKT IST.
Bedeutet: Ich möchte die Ausgaben meines Programmes weiter sehen. Dann tippe ich eine meiner "magischen Steuertasten" an und die Tastendrücke werden zum Verändern der Variablen ausgewertet. Keine Taste gedrückt ==> Programm läuft so weiter ab wie bisher und wartet auf nix (vor allem keinen Tastendruck). Das Programm darf nicht anhalten - das ist der Knackpunkt!
Sehe ich den Wald vor lauter Bäumen nicht oder ist das tatsächlich nicht so einfach??
Gruß
df8oe
Interaktionsmöglichkeit gesucht...
@df8oe: Das ist plattformübergreifend nicht einfach. Wenn Dir eine Lösung reicht die ohne Zusatzmodule unter Linux läuft, dann gibt es in der Standardbibliothek das `curses`-Modul mit dem man Textoberflächen programmieren kann wo man auf einzelne Tastendrücke reagieren kann.
Wenn es auch etwas externes sein darf, ist `urwid` eine etwas schönere API die darauf aufbaut.
Wenn es auch etwas externes sein darf, ist `urwid` eine etwas schönere API die darauf aufbaut.
Plattformübergreifend muss es nicht sein. Python und der Raspi dienen mir als Entwicklungsumgebung und später kommt das erarbeitete Ergebnis dann in einen Microcontroller (programmiert in C oder Assembler).
Mit curses hatte ich auch schon mal rumgebastelt - mir ist da aber nur die getchr() Funktion aufgefallen, und wenn das Programm an die Stelle kommt dann hält es an, bis eine Taste gedrückt ist. Das kann ich so nicht gebrauchen. Wenn keine Taste gedrückt ist, darf das Programm nicht anhalten und "warten".
Wenn urwid auf curses aufbaut, dann muss ich vorher wissen, ob es in curses solch eine Funktion gibt...
Danke für Deine Antwort - ich bin erleichtert, dass es doch etwas komplizierter ist - also keine "dumme Frage"
Gruß
df8oe
Mit curses hatte ich auch schon mal rumgebastelt - mir ist da aber nur die getchr() Funktion aufgefallen, und wenn das Programm an die Stelle kommt dann hält es an, bis eine Taste gedrückt ist. Das kann ich so nicht gebrauchen. Wenn keine Taste gedrückt ist, darf das Programm nicht anhalten und "warten".
Wenn urwid auf curses aufbaut, dann muss ich vorher wissen, ob es in curses solch eine Funktion gibt...
Danke für Deine Antwort - ich bin erleichtert, dass es doch etwas komplizierter ist - also keine "dumme Frage"
Gruß
df8oe
@df8oe: Das verhalten von `window.getch()` kann man mit der `nodelay()`- oder der `timeout()`-Funktion beeinflussen, so dass -1 zurückgegeben wird wenn keine Tastendrücke zum Verarbeiten vorliegen.