PDA

Просмотр полной версии : Контроллер панели на GT911 с боковыми кнопками на Arduino


ABCh
18.08.2021, 10:21
Попала в руки панель, подобная этой (http://pccar.ru/attachment.php?attachmentid=44617&d=1472798284) с 4-мя боковыми кнопками. (Привет ymka-66 (http://www.pccar.ru/member.php?u=10477) :bye:) Поскольку мой вопрос (http://www.pccar.ru/showpost.php?p=417811&postcount=572) остался без ответа, пришлось делать своими силами. Изучив решение (http://www.pccar.ru/showthread.php?t=27845), попытался повторить его в виде Arduino (https://duino.ru/category/arduino/)-проекта, дополнительно задействовав боковые сенсорные кнопки. Начал с установки библиотеки (https://github.com/nik-sharky/arduino-goodix) и развертывания имеющегося в ней примера GT911_avr_touch.ino. Подключив панель и запустив программу, увидел, что при касании экрана координата X изменяется от 0 до 1023 при движении справа налево. При касании в области кнопок координата X меняется от 1024 до 1055. Координата Y меняется от 0 до 599 сверху вниз в зоне экрана и от 0 до 390 в зоне кнопок. С панелью оказалось все просто и понятно.
С передачей информации в компьютер тоже нашлось подходящее решении в виде форка (https://github.com/ilufang/HID) библиотеки NicoHood/HID, в который была включена поддержка сенсорных экранов. Первый вариант программы прилагается.
Продолжение следует...

ABCh
18.08.2021, 21:23
Панель подключаем по схемам (https://4pda.to/forum/index.php?showtopic=871043&view=findpost&p=66990391), соответствующим используемому устройству, и убеждаемся в наличии реакции на касание экрана и нажатие кнопок.
Далее нужно масштабировать значения координат в соответствии с описанием функции
/**
* Set contact status for a finger in the internal data structure. You must
* call send manually after setting all fingers to flush them through USB.
*
* @param id Finger id. Must be in the range of 0-MAXFINGERS. Same finger
* must have same id throughout contact. Allocations does not need
* to be continuous.
* @param x, y Coordinates. Range 0-10000. (0,0) is top-left on Windows.
* @param pressure Contact pressure. Range 0-127. When set to 0, the touch
* is reported as hovering (in-range)
* @return 1 if success. 0 if id is out-of-bounds
*/
inline int setFinger(uint8_t id, uint16_t x, uint16_t y, uint8_t pressure=100);
Готовая программа прилагается.
Остается разобраться с программированием кнопок. Подробная инструкция для андроида здесь (https://4pda.to/forum/index.php?showtopic=627766). В моем примере кнопки кодируются в буквы a,b,c,d,e, которые затем в андроиде перекодируются в кнопки POWER, HOME, BACK, VOLUME_DOWN, VOLUME_UP с помощью файла Vendor_2341_Product_8036.kl

key 30 POWER
key 48 HOME
key 46 BACK
key 32 VOLUME_DOWN
key 18 VOLUME_UP

Кнопку POWER можно также использовать для подачи сигнала на плату компьютера через выход ардуино.

DizzJK
19.08.2021, 16:53
Как работает по сравнению с Юриным контроллером?

DizzJK
19.08.2021, 17:55
Панель подключаем по схемам (https://4pda.to/forum/index.php?showtopic=871043&view=findpost&p=66990391), соответствующим используемому устройству, и убеждаемся в наличии реакции на касание экрана и нажатие кнопок.
Далее нужно масштабировать значения координат в соответствии с описанием функции
/**
* Set contact status for a finger in the internal data structure. You must
* call send manually after setting all fingers to flush them through USB.
*
* @param id Finger id. Must be in the range of 0-MAXFINGERS. Same finger
* must have same id throughout contact. Allocations does not need
* to be continuous.
* @param x, y Coordinates. Range 0-10000. (0,0) is top-left on Windows.
* @param pressure Contact pressure. Range 0-127. When set to 0, the touch
* is reported as hovering (in-range)
* @return 1 if success. 0 if id is out-of-bounds
*/
inline int setFinger(uint8_t id, uint16_t x, uint16_t y, uint8_t pressure=100);
Готовая программа прилагается.
Остается разобраться с программированием кнопок. Подробная инструкция для андроида здесь (https://4pda.to/forum/index.php?showtopic=627766). В моем примере кнопки кодируются в буквы a,b,c,d,e, которые затем в андроиде перекодируются в кнопки POWER, HOME, BACK, VOLUME_DOWN, VOLUME_UP с помощью файла Vendor_2341_Product_8036.kl

key 30 POWER
key 48 HOME
key 46 BACK
key 32 VOLUME_DOWN
key 18 VOLUME_UP

Кнопку POWER можно также использовать для подачи сигнала на плату компьютера через выход ардуино.

А разве андройд не подхватывает ММ кнопки? Просто когда на ардуине делал контроллер резистивных кнопок, они прекрасно работали как на андройде, так и в винде

ABCh
20.08.2021, 08:15
По умолчанию в андроиде реакция на кнопки задается файлом /system/usr/keylayout/Generic.kl. В разных прошивках эти файлы могут отличаться. Поэтому надо или проверять работу кнопок для каждой конкретной прошивки, или создавать файл .kl для своего устройства.
Как работает по сравнению с Юриным контроллером?
Реагирует на боковые кнопки :)

DizzJK
30.08.2021, 21:39
По умолчанию в андроиде реакция на кнопки задается файлом /system/usr/keylayout/Generic.kl. В разных прошивках эти файлы могут отличаться. Поэтому надо или проверять работу кнопок для каждой конкретной прошивки, или создавать файл .kl для своего устройства.

Реагирует на боковые кнопки :)

В общем тач работает отлично! Спасибо большое за поддержку!

DizzJK
03.09.2021, 10:34
Реагирует на боковые кнопки :)

Вопрос про боковые кнопки, как их замедлить при нажатии, а то при нажатии mute она меняет свое положение раз 10, какую команду знаю (delay) замедляет все кнопки

ABCh
03.09.2021, 11:11
delay использовать нельзя, это замедлит работу. В последнем скетче я использовал функции Keyboard.press и Keyboard.release. В этом случае скорость повторения определяется не устройством, а операционной системой. Если получается очень быстро, то можно посылать одиночные нажатия на кнопки через Keyboard.write, самостоятельно запрограммировав частоту повторения.

Alex15BV
28.03.2022, 17:42
Попала в руки панель, подобная этой (http://pccar.ru/attachment.php?attachmentid=44617&d=1472798284) с 4-мя боковыми кнопками. (Привет ymka-66 (http://www.pccar.ru/member.php?u=10477) :bye:) Поскольку мой вопрос (http://www.pccar.ru/showpost.php?p=417811&postcount=572) остался без ответа, пришлось делать своими силами.
Добрый день.
Подскажите, пожалуйста, что не так делаю? Пробую компилить оба скетча - и в обоих случаях получаю ошибку. Библиотеки скачал/подключил... Куда копать? Спасибо за ответ, с уважением

ABCh
28.03.2022, 19:30
Добрый день,
судя по картинке, не подключена библиотека HID.

Alex15BV
28.03.2022, 21:34
Добрый день,
судя по картинке, не подключена библиотека HID.
Спасибо! Да, разобрался - что-то криво пошло с библиотеками...