Invertierter GPIO-Touchscreen (mit 99-kalibrierung.conf)


8

Ich habe gestern meinen ersten 3,5-Zoll-Touchscreen für meinen Raspberry Pi gekauft. (Elegoo 3,5-Zoll-TFT-LCD-Touchscreen-Monitor) Auf meinem Raspberry läuft ein OctoPrint-Bild (Raspbian-basiert).

Das Display funktioniert. Mein Problem ist die Berührungsfunktion; es ist irgendwie umgekehrt. Wenn ich oben rechts berühre. Mein Cursor befindet sich unten rechts. Wenn ich von links nach rechts ziehe, geht mein Kurs nur auf und ab.

Ich habe diesen Treiber / dieses Programm heruntergeladen .

Ich habe auch einen Kalibrierungstest mit versucht

sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_test`
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate

Und das funktioniert gut. Nachdem ich xinput_calibrator verwendet habe, um die neuen Kalibrierungsdaten zu lesen und sie unter einzufügen /etc/X11/xorg.conf.d/99-calibration.conf. Nach dem Neustart oder Neustart des "LCD-Show" -Treibers ändert sich nichts.

Normalerweise überschreibt das verwendete Programm (LCD-Show) jede Konfiguration. Aber ich habe es deaktiviert, um Fehler zu beheben und meinen Fehler zu finden.

Im Moment weiß ich nicht, was ich tun soll. Ich habe verschiedene Werte (SwapAxes) geändert, aber es ist immer invertiert.

Bearbeiten - Schritte, die ich mit dem xinput-Kalibrator ausgeführt habe:

DISPLAY=:0.0 xinput_calibrator

Ausgabe ist: Geben Sie hier die Bildbeschreibung ein

Ich habe den Abschnitt Abschnitt in EndSection kopiert in:

/etc/X11/xorg.conf.d/99-calibration.conf

Nach dem Neustart ändert sich nichts. Ich habe auch versucht, den "SwapXY" -Wert auf 0 zu ändern. Wieder keine Änderungen.


Hallo Kevin, ist dein Problem jetzt gelöst?
Dmitry Grigoryev

Haben Sie versucht lcd_rotate=2, config.txt hinzuzufügen? Mir ist klar, dass das Display nicht die Eingabe umdreht, aber wenn das gedrehte Display die Eingabe richtig ausrichtet, kann dies eine schnelle Lösung sein, bis Sie die Eingabeebene sortieren können.
Sandor Dosa

Antworten:


6

Herunterladen

Laden Sie zunächst die Datei von diesem Link waveshare-dtoverlays herunter

Installation

Mein Touchscreen ist Waveshare 3,5 "LCD. Ich habe" waveshare35a-overlay.dtb "nach" / boot / Overlays "kopiert.

sudo cp waveshare-dtoverlays/waveshare35a-overlay.dtb /boot/overlays/ 

Bearbeiten Sie dann die Startkonfiguration mit root

sudo nano /boot/config.txt

dann füge hinzu :

dtoverlay=waveshare35a:rotate=270,swapxy=1

"drehen" kann 0,90,180 oder 270 sein. Es hängt von Ihnen ab, es dreht Ihren Bildschirm (Ausgabe), aber nicht Ihren Touchscreen (Eingabe).

Dann neu starten.

Kalibrierungs-Touchscreen

Um auch Ihren Touchscreen (Eingabe) zu drehen, müssen wir diese Datei ändern.

sudo nano /usr/share/X11/xorg.conf.d/99-callibration.conf 

oder

sudo nano /usr/share/X11/xorg.conf.d/40-libinput.conf.

Ich habe den zweiten benutzt. Legen Sie dann durch Hinzufügen eine Optionstransformationseinstellung fest

Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"

Diese Transformationsmatrix ist für 90 Grad rechts (gegen den Uhrzeigersinn), da ich den Bildschirm bereits auf 270 Grad gedreht habe. Sie können auch die anderen Transformationsmatrix-Einstellungen unter dem angegebenen Link sehen. Vergessen Sie nicht, es muss mit der Dreheinstellung übereinstimmen. Fügen Sie dann die obige Zeile in den folgenden Abschnitt in der Datei "40-libinput.conf" ein.

Section "InputClass"
    Identifier "libinput touchscreen catchall"
    MatchIsTouchScreen "on"
    MacthDevicePath "/dev/input/event*"
    Driver "libinput"
    Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
EndSection

Speichern Sie es dann und starten Sie es neu.

Schließlich funktioniert mein Touchscreen richtig.

Für einen detaillierten Schritt können Sie diesem Link folgen


2

Ähnlich wie bei Dmitry hat hier Folgendes für mich auf einem Waveshare 4 "-Touchscreen und Xinput-Calibrate funktioniert, als keine meiner Änderungen in 99-calibration.conf etwas zu bewirken schien.

   $ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ADS7846                                   id=6    [slave  pointer  (2)]
...

Sollte alles funktionieren, aber mein xinput list-props 6gab mir drei verschiedene Eigenschaften:

  • Koordinatentransformationsmatrix
  • libinput Kalibrierungsmatrix
  • libinput Calibration Matrix Standard

Jedes davon wird mit einer 3x3-Matrix geliefert, die wie folgt aufgebaut ist:

Coordination Transformation Matrix (115): 1 0 0 0 1 0 0 0 1

wobei jede bis zu 6 Dezimalstellen sein kann.

Mit ein bisschen Google-Fu habe ich diesen Link gefunden, der die Transformationen erklärt, mit denen Sie die Eingabe des Bildschirms mit bearbeiten können

xinput set-prop 6 "Coordinate Transformation Matrix" [your 3x3 matrix here]

Auf meinem speziellen Bildschirm konnte ich sowohl die Inversion als auch den Achsenwechsel korrigieren, indem ich Folgendes tat:

xinput set-prop 6 "Coordinate Transformation Matrix" 0 -1 1 -1 - 1 0 0 1

Aber Ihre könnte anders sein, wenn Sie den obigen Wiki-Link verwenden, erhalten Sie einige hilfreiche Transformationen. Dies wird leider auch beim Neustart rückgängig gemacht.


Dies funktionierte für mich,xinput set-prop 6 "Coordinate Transformation Matrix" 0 -1 1 -1 - 1 0 0 1
won_joiner

1

tslib(Die Bibliothek, die Sie anscheinend verwenden) sollte ihre Konfiguration in speichern /etc/pointercal. Dieser Speicherort kann über eine TSLIB_CALIBFILEUmgebungsvariable geändert werden , es gibt jedoch selten einen legitimen Grund dafür. Stellen Sie also sicher, dass Sie diese Datei während der Kalibrierung verwenden, öffnen Sie eine Root-Konsole und geben Sie Folgendes ein:

export TSLIB_FBDEVICE=/dev/fb1
export TSLIB_TSDEVICE=/dev/input/touchscreen
export TSLIB_CALIBFILE=/etc/pointercal
ts_calibrate

Überprüfen Sie nach Abschluss der Kalibrierung, ob diese /etc/pointercalaktualisiert wurde.

Eine weitere wichtige Datei, die Sie kennen sollten, ist /etc/ts.conf.

PS. Nach dem Austausch, den wir in Kommentaren hatten, wurde klar, dass Sie xinput_calibratoranstelle von verwenden sollten ts_calibrate. Ich werde eine neue Antwort schreiben, aber diese für Personen aufbewahren, die ts_calibrateaus irgendeinem Grund speziell verwendet werden müssen (z. B. über den Touchscreen in SDL-Spielen).


Zunächst einmal - danke für Ihre Hilfe. Ich möchte nicht speziell "/etc/X11/xorg.conf.d/99-calibration.conf" verwenden. Ich bin sehr neu in allem, was mit Displays / Touchscreens zu tun hat. Der heruntergeladene Treiber verwendet diese Datei zur Kalibrierung. Zumindest dachte ich das. Wenn ich Ihre vorgeschlagenen Schritte verwende, funktioniert die Anzeige mit ts_test einwandfrei. Wenn ich jedoch wieder zu meinem Desktop wechsle, ist dies immer noch umgekehrt. Ich denke, ich muss einen Weg suchen, um "LCD-show" anzuweisen, die Datei ts_calibration zu verwenden.
Kevin

@ Kevin Hast du versucht neu zu starten? Und bitte nehmen Sie den Inhalt von 99-calibration.confin Ihre Frage auf. Vielleicht schaffen wir es, dass es auf Ihre Weise funktioniert.
Dmitry Grigoryev

Ja, ich starte meinen Pi nach jeder Änderung neu. Also habe ich versucht, einen Xinput-Kalibrator zu verwenden. Am Anfang steht eine Zeile mit "Aktuelle Kalibrierungswerte: ...", und diese Werte sind nicht die Werte in meiner Datei 99-kalibrierung.conf. Verwenden xinput-kalibrator und meine Desktop-Umgebung eine andere Konfigurationsdatei?
Kevin

@ Kevin Nein, xinput-calibratorsoll eine Konfiguration ausgeben, die Sie dann eingeben sollten. 99-calibration.confVersuchen Sie es also erneut und ersetzen Sie Ihre aktuelle Konfiguration durch die Ausgabe. Wenn das nicht funktioniert, kopieren Sie bitte diese Konfiguration und fügen Sie sie in Ihre Frage ein.
Dmitry Grigoryev

Entschuldigung, ich dachte es ist klar. Natürlich habe ich die Ausgabe vom xinput-Kalibrator kopiert. Ich werde meine Frage mit den Schritten aktualisieren, die ich getan habe.
Kevin

1

Wenn Sie zufällig eine Datei mit dem Namen haben /etc/X11/xorg.conf, sollten Sie wissen, dass diese Datei Vorrang /etc/X11/xorg.conf.d/99-calibration.confhat. Sie müssen sie also entweder entfernen, /etc/X11/xorg.confwenn Sie sie nicht benötigen, oder den Inhalt von /etc/X11/xorg.conf.d/99-calibration.confam Ende von hinzufügen, /etc/X11/xorg.confwenn Sie dies tun.

Eine Möglichkeit, festzustellen, ob diese Optionen wirklich effektiv sind, besteht darin, Folgendes zu verwenden xinput:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ADS7846                                   id=6    [slave  pointer  (2)]
...

$ xinput list-props 6
...
    "Evdev Axis Calibration" <Min-X> <Max-X> <Min-Y> <Max-Y>
    "Evdev Axes Swap" 1 
...

Wenn Sie alles richtig gemacht haben, sollten Sie Ihre Kalibrierungswerte in der Ausgabe sehen.

Überprüfen Sie auch die /var/log/Xorg.0.logDatei: Möglicherweise werden Meldungen angezeigt, dass einige Konfigurationsoptionen aus verschiedenen Gründen ignoriert werden.

Eine weitere Möglichkeit (wenn die Konfigurationsdatei nicht funktioniert) besteht darin, die Kalibrierungsdaten zur Laufzeit mithilfe eines Shell-Skripts festzulegen:

xinput set-prop 6 "Evdev Axis Calibration" <Min-X> <Max-X> <Min-Y> <Max-Y>
xinput set-prop 6 "Evdev Axes Swap" 1

(Stellen Sie sicher, dass Sie durch 6die ID ersetzen, die Sie in Ihrem System erhalten.)

Beachten Sie, dass diese SwapXYOption genau das tut: Vertauscht die X- und Y-Achse. Wenn Sie auch eine Achse umkehren müssen , sollten Sie Folgendes verwenden:

    Option "InvertX" 1
    Option "InvertY" 1

0

Die SwapXYFunktion in der 99-calibration.confDatei funktioniert nur dann gut, wenn das Paket xserver-xorg-input-evdevordnungsgemäß installiert wurde.

Versuchen Sie einfach, es zu installieren:

sudo apt-get update sudo apt-get install xserver-xorg-input-evdev

Und starten Sie das System neu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.