Màn hình cảm ứng GPIO đảo ngược (Sử dụng 99-hiệu chuẩn.conf)


8

Tôi đã mua chiếc màn hình cảm ứng 3,5 "đầu tiên cho Raspberry Pi của tôi ngày hôm qua (Màn hình cảm ứng LCD LCD LCD Elegoo 3,5 inch) Trên Raspberry của tôi chạy một hình ảnh OctoPrint (dựa trên Raspbian).

Màn hình đang hoạt động. Vấn đề của tôi là chức năng cảm ứng; nó là loại đảo ngược. Nếu tôi chạm vào phía trên bên phải. Con trỏ của tôi ở phía dưới bên phải. Nếu tôi kéo từ trái sang phải, khóa học của tôi chỉ đi lên và xuống.

Tôi đã tải xuống trình điều khiển / chương trình này .

Tôi cũng đã thử kiểm tra hiệu chuẩn với

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

Và nó hoạt động tốt. Sau khi tôi sử dụng xinput_calibrator để đọc dữ liệu hiệu chuẩn mới và chèn nó vào /etc/X11/xorg.conf.d/99-calibration.conf. Sau khi khởi động lại hoặc khởi động lại trình điều khiển "LCD-Show", không có gì thay đổi.

Thông thường, chương trình được sử dụng (LCD-show) sẽ ghi đè mọi cấu hình. Nhưng tôi đã vô hiệu hóa nó để gỡ lỗi và tìm lỗi của tôi.

Hiện tại, tôi không biết phải làm gì. Tôi đã thay đổi các giá trị khác nhau (SwapAxes) nhưng nó luôn bị đảo ngược.

Chỉnh sửa - Các bước tôi đã thực hiện với bộ hiệu chuẩn xinput:

DISPLAY=:0.0 xinput_calibrator

Đầu ra là: nhập mô tả hình ảnh ở đây

Tôi đã sao chép phần Mục vào EndSection vào:

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

Sau khi khởi động lại, không có gì thay đổi. Tôi cũng đã cố gắng thay đổi Giá trị "SwapXY" thành 0. Một lần nữa không có thay đổi.


Xin chào Kevin, vấn đề của bạn đã được giải quyết chưa?
Dmitry Grigoryev

Bạn đã thử thêm lcd_rotate=2vào config.txt chưa? Tôi nhận ra rằng việc lật màn hình không phải là đầu vào, nhưng nếu màn hình xoay được căn chỉnh đúng đầu vào thì đó có thể là một sửa chữa nhanh cho đến khi bạn có thể sắp xếp lớp đầu vào.
Sandor Dosa

Câu trả lời:


6

Tải xuống

Đầu tiên, tải tập tin từ liên kết này waveshare-dtoverlays

Cài đặt

Màn hình cảm ứng của tôi là Waveshare 3.5 "LCD. Tôi đã sao chép" waveshare35a-overlay.dtb "sang" / boot / lớp phủ "

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

sau đó chỉnh sửa cấu hình khởi động với root

sudo nano /boot/config.txt

sau đó thêm:

dtoverlay=waveshare35a:rotate=270,swapxy=1

"Xoay" có thể là 0,90,180 hoặc 270. Tùy thuộc vào bạn, nó sẽ xoay màn hình của bạn (đầu ra) chứ không phải màn hình cảm ứng (đầu vào) của bạn.

Sau đó khởi động lại.

Màn hình cảm ứng hiệu chuẩn

Để xoay màn hình cảm ứng (đầu vào) của bạn, chúng tôi cần sửa đổi tệp này.

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

hoặc là

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

Tôi đã sử dụng cái thứ hai. sau đó đặt cài đặt chuyển đổi tùy chọn bằng cách thêm

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

Ma trận biến đổi này dành cho 90 độ bên phải (ngược chiều kim đồng hồ) vì tôi đã xoay màn hình thành 270 độ, bạn cũng có thể thấy các cài đặt Ma trận chuyển đổi khác trong liên kết đã cho. Đừng quên, nó phải phù hợp với cài đặt xoay. Sau đó chèn dòng trên vào Phần bên dưới trong tệp "40-libinput.conf"

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

Sau đó lưu nó và khởi động lại.

Cuối cùng, màn hình cảm ứng của tôi hoạt động đúng.

Để biết chi tiết bước, bạn có thể theo liên kết này


2

Tương tự như câu trả lời của Dmitry, đây là thứ đã làm việc cho tôi trên màn hình cảm ứng 4 "và hiệu chỉnh xinput, khi không có chỉnh sửa nào của tôi trong 99-hiệu chuẩn. Dường như không làm gì cả.

   $ 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)]
...

Tất cả nên hoạt động, nhưng tôi xinput list-props 6đã cho tôi ba thuộc tính khác nhau:

  • Ma trận chuyển đổi tọa độ
  • Ma trận hiệu chuẩn libinput
  • Ma trận hiệu chuẩn libinput Mặc định

Mỗi trong số này đi kèm với một ma trận 3x3 được trình bày như vậy:

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

trong đó mỗi cái có thể lên tới 6 chữ số thập phân.

Sử dụng một chút google-fu tôi đã tìm thấy liên kết này giải thích các biến đổi mà bạn có thể sử dụng để chỉnh sửa đầu vào của màn hình bằng cách sử dụng

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

Trên màn hình cụ thể của tôi, tôi đã cố gắng sửa cả đảo ngược và hoán đổi trục bằng cách thực hiện:

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

Nhưng của bạn có thể khác, sử dụng liên kết wiki ở trên cung cấp một số biến đổi hữu ích. Điều này không may cũng trở lại khi bạn khởi động lại.


Điều này làm việc cho tôi,xinput set-prop 6 "Coordinate Transformation Matrix" 0 -1 1 -1 - 1 0 0 1
chiến thắng_joiner

1

tslib(thư viện bạn dường như sử dụng) nên lưu trữ cấu hình của nó /etc/pointercal. Vị trí này có thể được thay đổi thông qua TSLIB_CALIBFILEbiến môi trường, nhưng hiếm khi có một lý do chính đáng để làm như vậy. Vì vậy, hãy đảm bảo bạn đang sử dụng tệp này trong khi hiệu chỉnh, mở bảng điều khiển gốc và gõ:

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

Khi bạn hoàn thành hiệu chuẩn, kiểm tra xem đã /etc/pointercalđược cập nhật.

Một tập tin quan trọng khác bạn nên biết là /etc/ts.conf.

Tái bút Sau khi trao đổi, chúng tôi đã có ý kiến, rõ ràng là bạn nên sử dụng xinput_calibratorthay vì ts_calibrate. Tôi sẽ viết một câu trả lời mới, nhưng hãy giữ câu trả lời này cho những người phải sử dụng cụ thể ts_calibratevì một số lý do (ví dụ: sử dụng màn hình cảm ứng trong các trò chơi SDL).


Đầu tiên - cảm ơn sự giúp đỡ của bạn. Tôi không muốn sử dụng cụ thể "/etc/X11/xorg.conf.d/99-calibr.conf". Tôi rất mới trong mọi thứ về hiển thị màn hình / màn hình cảm ứng. Trình điều khiển tôi đã tải xuống sử dụng tệp này để hiệu chuẩn. Ít nhất đó là những gì tôi nghĩ. Nếu tôi sử dụng các bước được đề xuất của bạn, màn hình sẽ hoạt động tốt với ts_test. Nhưng nếu tôi quay trở lại Máy tính để bàn của mình, nó vẫn nghịch đảo. Tôi nghĩ rằng tôi phải tìm kiếm một cách, để nói với "LCD-show" để sử dụng tệp ts_calibr.
Kevin

@Kevin Bạn đã thử khởi động lại chưa? Và vui lòng bao gồm các nội dung 99-calibration.conftrong câu hỏi của bạn, có thể chúng tôi quản lý để làm cho nó hoạt động theo cách của bạn.
Dmitry Grigoryev

Có, tôi khởi động lại Pi của mình sau mỗi thay đổi. Vì vậy, tôi đã cố gắng sử dụng hiệu chuẩn xinput. Khi bắt đầu, có một dòng với "các giá trị hiệu chuẩn hiện tại: ..." và các giá trị này không phải là các giá trị trong tệp 99-hiệu chuẩn của tôi. Bộ hiệu chuẩn xinput và môi trường Desktop của tôi có sử dụng tệp cấu hình khác không?
Kevin

@Kevin Không, xinput-calibratorđược cho là cấu hình đầu ra mà sau đó bạn nên đặt 99-calibration.conf, vì vậy hãy thử chạy lại và thay thế cấu hình hiện tại của bạn bằng đầu ra. Nếu điều đó không làm việc, xin vui lòng sao chép cấu hình đó và dán nó vào câu hỏi của bạn.
Dmitry Grigoryev

Xin lỗi, tôi nghĩ rằng nó rõ ràng. Tất nhiên, tôi đã sao chép đầu ra từ bộ hiệu chuẩn xinput. Tôi sẽ cập nhật Câu hỏi của mình, với các Bước tôi đã làm.
Kevin

1

Nếu bạn tình cờ có một tệp có tên /etc/X11/xorg.conf, bạn nên biết rằng tệp này được ưu tiên hơn /etc/X11/xorg.conf.d/99-calibration.conf, vì vậy bạn cần phải xóa /etc/X11/xorg.confnếu bạn không cần hoặc thêm nội dung /etc/X11/xorg.conf.d/99-calibration.confvào cuối /etc/X11/xorg.confnếu bạn làm như vậy.

Một cách để biết những lựa chọn đó có thực sự hiệu quả hay không là sử dụng 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 
...

Nếu bạn đã làm mọi thứ đúng, bạn sẽ thấy các giá trị hiệu chuẩn của mình ở đầu ra.

Đồng thời kiểm tra /var/log/Xorg.0.logtệp: có thể có thông báo về một số tùy chọn cấu hình bị bỏ qua vì nhiều lý do.

Một cách khác (nếu bạn không thể làm cho tệp cấu hình hoạt động) là đặt dữ liệu hiệu chuẩn khi chạy, sử dụng tập lệnh shell:

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

(đảm bảo bạn thay thế 6bằng ID bạn nhận được trong hệ thống của mình)

Lưu ý rằng SwapXYtùy chọn thực hiện điều đó: hoán đổi trục X và Y. Nếu bạn cũng cần đảo ngược một trục, bạn nên sử dụng:

    Option "InvertX" 1
    Option "InvertY" 1

0

Các SwapXYchức năng trong 99-calibration.conftập tin chỉ hoạt động tốt nếu gói xserver-xorg-input-evdevđược cài đặt đúng.

Chỉ cần cố gắng cài đặt nó:

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

Và khởi động lại hệ thống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.