Подключение тачпада к ардуино
Когда ты уже не начинающий ардуинщик и погодных информеров у тебя уже несколько штук, хочется чего-то более «оригинального» и «полезного».
Предположим у нас имеется: Arduino Leonardo – 1 штука, Bluetooth модуль – 1 штука, Android смартфон – 1 штука. Ключевое отличие Leonardo от остальных ардуин заключается в том, что она поддерживает протоколы HID, а по-простому может притворятся мышкой или клавиатурой. Выглядит это примерно следующим образом:
Как видим все крайне просто. Метод Mouse.move(X, Y, WHEEL) принимает три относительных параметра:
X – величина смещения в пикселях по оси X (отрицательные значения сдвигают влево)
Y – величина смещения в пикселях по оси Y (отрицательные значения сдвигают вверх)
WHEEL – величина смещения колеса прокрутки (отрицательные значения сдвигают в другую сторону)
Но сама по себе идея двигать курсор ничего не стоит, если не мы его контролируем, а значит нам нужно непосредственно HID (Human Interface Device), или по-простому устройство ввода. В нашем случае мы его сделаем из смартфона, «написав программу» в среде AppInventor, но, предварительно, разберемся с железной частью и напишем скетч для Arduino. Данные в Leonardo со смартфона мы будем отсылать по bluetooth. Модуль bluetooth можно использовать любой подходящий, наиболее популярным решением является HC-05(06). Подключаем по следующей схеме:
Если ваш модуль еще не настроен для управления с arduino здесь имеется хороший мануал по его настройке.
Итак, модуль подключили и настроили. Теперь необходимо определиться с функционалом. Тут все стандартно, нам необходимо получать смещение по двум координатам, левый и правый клик мыши и обороты колеса. Для начала необходимо импортировать библиотеку для работы с мышью:
И создать переменные с которыми будем работать:
В настройках Setup мы указываем порт, к которому подключен модуль bluetooth. Здесь все несколько отличается от стандартных arduino-плат. Leonardo реализован на чипе Atmega32u4 и имеет встроенную поддержку USB-соединения. Соответственно нулевой Serial-порт реализован непосредственно внутри чипа, а стандартные цифровые выводы 0 и 1 реализуют Serial1. Это означает, что для инициализации UART соединения с модулем bluetooth, нам необходимо использовать следующую конструкцию в блоке Setup:
Обратите внимание, что мы используем не Serial1, а Serial.
В цикле Loop постоянно опрашиваем буфер Serial1 и в случае поступления данных, производим их обработку:
Далее работаем с конструкцией if (Serial1.available()) < здесь будет наш основной код >. Принятый в буфер байт мы присваиваем переменной «mess» при помощи следующей конструкции:
Парсинг всего этого дела выглядит следующим образом:
После присвоения переменной «mess» пришедшего значения, мы определяем в условных операторах что это за число. Если это просто клик, то мы сразу реализуем клик мыши. Если это прокрутка или смещение, то мы присваиваем соответствующей булевской переменной значение true и следующее пришедшее число кладем в соответствующий параметр конструкции Mouse.move(смещение по X, смещение по Y, прокрутка колеса). Полный код выглядит так:
Теперь займемся реализацией приложения для смартфона. Не забываем, что мы только-только закончили делать погодные информеры и котопоилки, а значит Andriod Studio пойло для лохов изучать пока рано, посему нальем себе кефирчика используем среду AppInventor. На базовых навыках по работе с этой средой я останавливаться не стану, можно почитать здесь, а еще лучше просто открыть и потыкаться самому, там все очень просто. Сразу перейду к блокам. Полный ээээ…. ну пусть будет код программы выглядит так:
Совсем просто, правда? А так выглядит интерфейс:
Вверху, там, где надпись: «ПОДКЛЮЧЕНО», это кнопка (список) для выбора и подключения bluetooth устройства (BTN_connect). Ползунок чуть ниже (Multipiller), регулирует скорость перемещения указателя, число справа указывает во сколько раз(TXT_mult). Серая область ниже, это непосредственно зона тачпада (Touch). Под ней три области слева-направо: левая кнопка мыши (L_click), ползунок колесика (Scroll), правая кнопка мыши (R_click).
Инициализация экрана и переменных:
Переменная «mult» (по умолчанию 2) – множитель смещения указателя. X_shift и Y_shift переменные смещения указателя. При открытии приложения, цвет панели «Touch» устанавливаем в черный.
Далее нам необходимо подключиться к bluetooth устройству (предполагается, что смартфон уже с ним спарен):
При инициализации (Перед Выбором) кнопки подключения (BTN_connect) в ее список добавятся все спаренные со смартфоном устройства и при клике по ней, откроется окно этого списка. По клику по соответствующему устройству (После Выбора), смартфон пытается подключится к выбранному устройству и в случае успеха, изменяет цвет фона «Touch» на серый, и надпись на кнопке выбора на «ПОДКЛЮЧЕНО».
Реализация смещения указателя:
Этот метод срабатывает при движении пальца по панели типа Canvas (Холст). Глобальным переменным X_shift и Y_shift присваиваются округленные (без точки) значения смещения по обоим осям. Затем, в случае если у нас установлено bluetooth соединение, программа отсылает четыре восьмибитных числа где первое число – префикс оси X (120), второе – смещение по Х, третье – префикс оси Y (121), четвертое – смещение по Y. Число смещения по обоим осям умножается на глобальную переменную «mult».
Реализация колесика схожа:
Здесь мы объявляем локальную переменную W_shift, которой точно так же присваиваем смещение по оси Y и отправляем через bluetooth два восьмибитных числа, предваряя префиксом 122.
Реализация кнопок совсем примитивна:
При клике по соответствующей кнопке происходит отправка одного восьмибитного числа.
При изменении значения, происходит перезапись соответствующей переменной «mult» и текстовому полю (TXT_mult) присваивается новое значение «Текст».
Как видим, реализация крайне проста. На все про все потребуется один вечер времени одна Arduino Leonardo, один bluetooth модуль и смартфон, тоже одна штука. Зато теперь, можно управлять компьютером или телевизором не вставая с дивана.
При желании можно добавить двойной клик и перетаскивание мышью.
Аренда облачного сервера с быстрыми NVMе-дисками и посуточной оплатой у хостинга Маклауд.
В предыдущей статье «Работа с TFT дисплеем на ARDUINO DUE» мы подробно рассмотрели команды базовой библиотеки UTFT, предназначенной для работы с TFT дисплеями на Arduino. В этой статье мы рассмотрим Utouch – дополнение к базовой библиотеке, позволяющее работать с сенсорным экраном.
1. Общие сведения
Итак, рассмотрим более подробно дополнение Utouch, предназначенное для работы с сенсорным экраном, которым оборудовано большинство TFT дисплеев.
2. Начало работы с сенсорным экраном
Теперь подгружаем дополнение и создаем объект – сенсорный экран с именем myTouch. В качестве параметров команде инициализации передаются номера пинов, к которым подключены сигналы TCLK, TCS, TDIN, TDOUT и IRQ. Эти параметры следует выяснить у производителя дисплея или шильда, посредством которого дисплей подключен к контроллеру.
Далее необходимо проинициализировать в процедуре void setup() дисплей и сенсорный экран:
void setup() <
myGLCD.InitLCD();
myTouch.InitTouch();
>
Команда InitTouch также, как и команда InitLCD базовой библиотеки, задает вертикальную или горизонтальную ориентацию дисплея. По умолчанию задается горизонтальная ориентация. Все, теперь можно работать с нашим сенсорным экраном. Рассмотрим совсем простой пример, при помощи которого мы сможем убедиться, что сенсорный экран заработал. Скомпилируем следующую программу и загрузим ее в память контроллера:
При старте программы дисплей закрашивается красным цветом. Теперь коснемся экрана в любой точке – и дисплей окрасится в зеленый цвет.
3. Калибровка сенсорного экрана
Прежде чем продолжить работу необходимо выполнить еще одну важную процедуру – калибровку сенсорного экрана. В примерах программ, поставляемых с дополнением Utouch есть один очень важный пример, который называется UTouch_Calibration.
Для выполнения калибровки необходимо открыть этот пример через меню:
«Файл->Примеры->UTouch->Arduino->UTouch_Calibration».
ВНИМАНИЕ! Перед компиляцией не забудьте заменить строки UTFT myGLCD(….) и UTouch myTouch(….) на те, что нужны для нашего дисплея.
Также при калибровке необходимо правильно выбрать параметр TOUCH_ORIENTATION. Информацию о значении этого параметра для используемой модели дисплея можно найти в файле UTouch_Supported_display_modules.pdf, который поставляется вместе с библиотекой Utouch и размещается в ее корневой папке. Для нашего дисплея, например, должно быть установлено значение PORTRAIT, несмотря на то, что сам дисплей ориентирован горизонтально.
ВНИМАНИЕ! Это значение необходимо устанавливать только при калибровке сенсорного экрана, в дальнейшем ориентация экрана должна совпадать с ориентацией дисплейного модуля.
CAL_X 0xBD95ECC8UL
CAL_Y 0x5EBC8000UL
CAL_S 0x0013F1DFUL
Эти три значения необходимо поместить в файл UTouch_CD.h, находящийся в корневой папке дополнения UTouch вместо тех значений CAL_X, CAL_Y и CAL_S, которые там указаны изначально. После этого дисплей будет работать правильно.
Теперь рассмотрим более подробно команды дополнения UTouch:
UTouch – создает базовый класс сенсорного экрана с заданным именем, в качесте параметров указывается способ подключения.
Команда имеет следующий вид:
Utouch _NAME_ (TCLK, TCS, TDIN, TDOUT, IRQ);
где _NAME_ — произвольное имя объекта «сенсорный экран», которое будет использоваться в качестве префикса при любом обращении к нему, а TCLK, TCS, TDIN, TDOUT и IRQ – номера пинов, которым подключаются соответствующие сигналы сенсорного дисплея.
Строка с этой командой размещается в области определений и должна предшествовать любым другим командам UTouch. Заданное имя объекта должно использоваться в качестве префикса ко всем последующим командам UTouch.
InitTouch – инициализирует сенсорный экран и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации.
Если в этой команде указать PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная. Обратите внимание, что ориентация сенсорного экрана должна совпадать с ориентацией дисплея. По умолчанию (без параметров) команда устанавливает горизонтальную ориентацию.
setPrecision – задает точность определения координат точки прикосновения к сенсорному дисплею. В качестве параметра передается идентификатор точности.
Всего определено четыре уровня точности, кодируемые числами от 1 до 4:
PREC_LOW – низкая точность;
PREC_MEDIUM – средняя точность;
PREC_HI – высокая точность;
PREC_EXTREME – очень высокая точность.
Естественно, уровень точности обратно пропорционален времени, затрачиваемому на определение координат. Оптимальным для большинства задач является уровень PREC_MEDIUM. Разработчики не рекомендуют использовать высокую и очень высокую точность для операций, требующих быстрого реагирования.
Разница между уровнями точности может быть проиллюстрирована примером UTouch_QuickDraw, поставляемым вместе с библиотекой UTouch. Эта программа позволяет рисовать на дисплее при помощи сенсорного экрана:
Попробуйте скомпилировать этот пример с различными значениями параметра команды setPrecision и вы сразу же почувствуете разницу.
dataAvailable – функция, возвращающая логическое значение true, eсли в момент ее вызова зафиксировано касание сенсорного экрана. В остальное время – возвращает значение false.
Эта функция может быть использована как для определения момента касания, так и его продолжительности. В нашем первом примере, который мы приводили в разделе 2, конструкция:
if (myTouch.dataAvailable()) <
myGLCD.fillScr(0,255,0);
>else
содержала вызов функции dataAvailable, по срабатыванию которой происходило изменение цвета дисплея, которое сохранялось на все время касания. Рассмотрим еще один пример – измерение времени касания в миллисекундах:
в момент касания сенсорного дисплея программа сохраняет текущее значение функции millis в переменной timeOld. Далее, до тех пор, пока касание сохраняется, программа постоянно обновляет текущее значение millis в переменной timeNew. Как только касание прекратилось – на дисплей выводится разность между этими двумя переменными, которая и будет равна времени касания в миллисекундах.
Итак, теперь мы умеем работать с событием «касание сенсорного экрана», можем определить момент касания, его продолжительность и момент отпускания. Осталось совсем немного – получить координаты точки касания. Для этого предназначены следующие команды:
read – запускает процедуру определения координат точки касания.
Эта команда не передает никаких параметров и не возвращает никакого значения. Ее следует запускать, когда функция dataAvailable принимает значение true. Полученные координаты в «сыром» виде сохраняются во внутренних переменных TP_X и TP_Y. Однако, эти данные не приведены к размерам дисплея и его разрешающей способности, поэтому для получения координат точки касания используются специальные функции getX и getY.
getX – возвращает значение X-координаты точки касания в пикселях относительно левого края дисплея.
getY – возвращает значение Y-координаты точки касания в пикселях относительно верхнего края дисплея.
При условии правильно выполненной калибровки и достаточной точности сенсорного экрана, координаты точки касания должны совпадать с координатами конкретного пикселя. Тип возвращаемых значений для этих двух функций – int.
Следующий пример при касании сенсорного экрана выводит на дисплей координаты точки касания в пикселях и в «сыром» формате:
Теперь для того, чтобы обработать, например, нажатие экранной кнопки достаточно убедиться, что полученные координаты точки касания находятся внутри области, занимаемой на дисплее данной кнопкой. Вот еще один пример:
Программа рисует на дисплее прямоугольник-кнопку. При касании сенсорного экрана в области кнопки на дисплей выводится надпись «PRESSED», при касании за пределами прямоугольника надпись гаснет.
Еще один интересный пример. Эта программа рисует на дисплее прямоугольное «окно» и позволяет изменять его размеры путем перетаскивания нижнего правого угла. Конечно, это не полноценный Drag&Drop но очень похоже:
4. Заключение
Итак, теперь мы умеем пользоваться сенсорным экраном, можем определять момент касания и определять координаты точки касания, работать с простыми элементами управления, отображаемыми на дисплее. В следующей статье мы планируем рассмотреть еще одно дополнение к библиотеке UTFT – UTFT_Buttons, которое позволяет организовать работу с текстовыми и графическими экранными кнопками.
Yes, this is more or less your average touchpad that one can find from inside a laptop. This model, like majority of touchpads out there operates with PS/2 standard. This means that it can be directly plugged in to a PS/2 connector and with proper drivers, function as a mouse.
As it happens the PS/2 communication is not that difficult to achieve with an Arduino board. Kristopher has written an Arduino/Wiring library that offers all the functionality that we need at this point.
I will be using the MAX7219 Led Controller too and for this one can use LedControl library , written by Eberhard Fahle.
Step 3: Coding - Part II
Second test - iPod style gesture
I adapted the code a bit so it could react to a iPod style circular gesture. This could be use to speed up a motor, increase volume, turn a servo etc. hmm. a game of safe cracker perhaps. ;)
The code may not be the highest quality but it should give you the idea what is happening.
LedControl lc=LedControl(12,11,10,1); // forum pin outs
PS2Mouse mouse_one(MCLK, MDATA, REMOTE);
int value;
int i;
int l;
int dir; // indicates where user is "turning" the dial
void setup()
lc.setIntensity(0,8);
lc.shutdown(0,false); // need to take MAX out of shutdown
lc.clearDisplay(0);
delay(10);
Serial.begin(115200);
mouse_one.initialize();
mouse_one.set_scaling_1_1();
void loop()
int data[2];
// handle the leds. Made this way to combat flickering.
for(i=7;i>=0;i--)
if(value <=i)
for(l=0;l <=7;l++)
lc.setLed(0,l,i,true);
>
else
for(l=0;l <=7;l++)
lc.setLed(0,l,i,false);
>
>
// Moving to the right
if(data[1]>SENSITIVITY)
if(dir==0) // direction is counter clockwise
dir=-1; // dec
>
// Moving to the left
if(data[1] <-SENSITIVITY)
if(dir==0) // direction is clockwise
dir=1; // incrementation
>
// top of the "turn"
if(data[2]>SENSITIVITY)
dir=0; // we got the start indication (top part of the circle)
>
// bottom of the "turn"
if(data[2] <-SENSITIVITY)
if(dir==-1) // we got counter clockwise turn
if(value>0)
value=value-1;
dir=-2; // reset the value to something non-valid
>
>
if(dir==1)
if(value <7)
value=value+1;
dir=-2; // reset the value to something non-valid
>
>
>
// some delay so one can see the leds properl
delay(100);
Step 2: Coding - Part I
Here are both the TouchPad and the 8x8 Ledmatrix hooked up to Arduino. Touchpad uses the 5 and 6 pins on Arduino and the MAX7219 utilizes the pins 10, 11 and 12. What goes were can be easy seen inside the code.
First test - Direction and buttons
TouchPad reports the movement of the finger. One gets a pair of coordinates that indicated the amount of movement and the direction from the last position. For example -12, 2 would mean a swipe towards 10 o'clock and the X-axis movement being faster.
As it turns out, even the tap functionality works perfectly.
The code:
LedControl lc=LedControl(12,11,10,1); // forum pin outs
PS2Mouse mouse_one(MCLK, MDATA, REMOTE);
void setup()
lc.setIntensity(0,8);
lc.shutdown(0,false); // need to take MAX out of shutdown
lc.clearDisplay(0);
delay(10);
Serial.begin(115200);
mouse_one.initialize();
mouse_one.set_scaling_1_1();
>
void loop()
int data[2];
mouse_one.report(data);
Serial.print(data[0]); // Status Byte
Serial.print(":");
Serial.print(data[1]); // X Movement Data
Serial.print(",");
Serial.print(data[2]); // Y Movement Data
Serial.println();
// draw the initial box to the center
lc.clearDisplay(0);
// if no movement, light up the center block
if(data[1]==0 && data[2]==0)
lc.setLed(0,3,3,true);
lc.setLed(0,3,4,true);
lc.setLed(0,4,3,true);
lc.setLed(0,4,4,true);
>
// X-movement
if(data[1]>SENSITIVITY)
lc.setLed(0,1,3,true);
lc.setLed(0,1,4,true);
lc.setLed(0,2,3,true);
lc.setLed(0,2,4,true);
>
if(data[1] <-SENSITIVITY)
lc.setLed(0,5,3,true);
lc.setLed(0,5,4,true);
lc.setLed(0,6,3,true);
lc.setLed(0,6,4,true);
>
// Y-movement
if(data[2]>SENSITIVITY)
lc.setLed(0,3,1,true);
lc.setLed(0,3,2,true);
lc.setLed(0,4,1,true);
lc.setLed(0,4,2,true);
>
if(data[2] <-SENSITIVITY)
lc.setLed(0,3,5,true);
lc.setLed(0,3,6,true);
lc.setLed(0,4,5,true);
lc.setLed(0,4,6,true);
>
// Left button
if(data[0]==10)
lc.setLed(0,0,6,true);
lc.setLed(0,0,7,true);
lc.setLed(0,1,6,true);
lc.setLed(0,1,7,true);
>
// Middle button
if(data[0]==12)
lc.setLed(0,3,6,true);
lc.setLed(0,3,7,true);
lc.setLed(0,4,6,true);
lc.setLed(0,4,7,true);
>
// Right button
if(data[0]==9)
lc.setLed(0,6,6,true);
lc.setLed(0,6,7,true);
lc.setLed(0,7,6,true);
lc.setLed(0,7,7,true);
>
// some delay so one can see the leds properly
delay(100);
Recommendations
Step 1: Materials
This project does not require many materials:
5 male to male wires
5 female to female wires (to connect to joystick module and to add extension length for joystick.
1 Joystick (I used the SainSmart PS2 joystick module and would recommend it)
Stick It Challenge
Step 3: Upload the Joystick Program to Arduino
Connect the Uno to your PC and upload the joystick code seen here (please note I did not create this code originally):
Introduction: PC Mouse Made With Arduino Uno and Joystick
Hi! Welcome to my first Instructable.
I recently began tinkering with my new Arduino Uno and decided to find an application for a PS2 joystick module. I thought it would be nifty to turn my Arduino into a joystick controlled mouse for my PC.
I must confess: I thought the task would be easy using the "mouse" library I found online, little did I realize that this class only works with Arduino Leonard and Micro (and perhaps a few others), but not the ubiquitous Uno. I was discouraged, but I decided to use the Uno's serial communication as well as my rudimentary Java abilities to "hack" the Uno into a functional mouse for Windows. It surprisingly worked! Here's how:
Step 6: Conclusion
I hope this project works for you and that you can improve upon it. Ultimately, the easiest solution is to use an Arduino Leonard or Mini that can function as a system device for mouse inputs, but I found it fun to make the Uno function in a way it was not designed--a mouse--by using my limited Java knowledge.
-Right Click button. The joystick has one button which I reserved for the left click.
-Real device driver for this project. I'm not sure if this is possible, maybe someone can enlighten me on the subject!
Thanks for reading!
Step 4: Setting Up Java Program
Now that the Uno is set up, we need to connect it to my Java program which is capable of taking the Uno's serial output values with the special library RxTx and moving the mouse with the library collection JNA. Both of these libraries are included for download at the end of this step. Please note that the only part of the code I changed from the example RxTx was adding the method that moves the mouse in a way that I calibrated for my joystick. It's a bit crude, but it served my purposes.
I used BlueJ as my IDE, but whichever Java IDE you use, install RxTx and JNA libraries for this project, which I named "Mouse". Once that's done, created a project and include this code:
Electronics Contest
Step 2: Setting Up the Arduino Uno
The setup of the Uno can be seen in the materials picture, and here's the instructions:
Connect the five female to female wires to the pins of the joystick module. Now, connect five male to male wires into the ends of the female wires and connect them to the Arduino in this way:
1. The Ground on the joystick to Arduino Gnd
2. The +5V on the joystick to Arduino 5V
3. The UPx on the joystick to A0 on the Arduino
4. The UPy on the joystick to A1
5. The SW pin (the digital click switch) to digital pin 7 on the Arduino
Step 5: Troubleshooting
Getting the Java program to work may be difficult. I've got some tips if you're stuck:
-Change the "Com4" string in the PORT_NAMES[] to the port your arduino Uno is connected to. (I changed to Com4 from the default Com3 in my Java program)
-Comment out the line relating to Raspberry Pi (if you copied my program, I already did this)
-Click "Rebuild Package" or your IDEs equivalent
-Reset the Java Virtual Machine in your IDE. Maybe even reset the program before using the mouse the first time.
Attachments
54 Comments
I dont understand what the problem is. I followed downloading the different RXTX files from SeanY25 however I could not evade the RXTX mismatch, I don't even know if that is the issue or if it is something else. for prior knowledge I am using a windows computer on IntelliJ IDE.
Please let me know anything
Thank you.
Reply 4 months ago
It seems that your version of Java environment already has its own RXTX version 2.2pre2, and you downloaded a Jar version RXTX-2.2pre1, which is why you are getting a mismatch. Maybe delete the version you added, since it might be included. The new version may not be compatible, but it probably is.
Reply 4 months ago
Do you mean delete the RXTXcomm file from the IDE? Because when I do that it only seems to create a lot of compilation errors (due to the fact that it doesn't recognize the imports from "gnu. ")
what is the problem here?
Hello there, I was trying to make this project and I faced a single problem at last step after compiling blue j program and uploading Arduino code.
This was written on terminal window after running the program.
Please provide solution for this problem plzzz.
Question 2 years ago
I have finished the Java and Arduino Programs, but somethings not working. I've checked the serial monitor and it is outputting the correct data, but it seems that the java program isn't picking it up. I've created my JAR file and everything. Please help.
Thanks
Question 3 years ago on Step 6
Hi,
You did a great job.
I want to do quite the same with a useless raspberry pi.
I want to make a minecraft gaming station and use two ps2 joysticks :
one for arrows and another for mouse view.
For the action buttons, i'll make a ATMEGA328p standalone board with V-USB library recognised as a HID keyboard which send keyboard shortcuts while key pressed.
For the mouse view, i'd like to use your methode but my 2nd standalone chip will be connected on raspberry GPIO by I2C or serial (whatever). I would like to have your advices for this. I can also use the same library (V-USB) and it will be recognize as a HID mouse by the raspberry.
Question 3 years ago on Introduction
Can I make it on a arduino nano
Answer 3 years ago
Question 3 years ago
Im still having a bit of trouble running the program How do you run it in Blue J I am on the final stage and are getting these errors
java.lang.ClassNotFoundException: gnu.io.RXTXCommDriver thrown while loading gnu.io.RXTXCommDriver
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
Answer 3 years ago
I had the same problem, here's what I did to make it work. I am on MacOS.
I think the reason is because BlueJ is unable to find the two Java library files required for the code to work, "RXTXcomm.jar" and "librxtxSerial.jnilib". You can get the 2 files from (http://rxtx.qbang.org/wiki/index.php/Download). I downloaded binary "rxtx 2.2pre2 (prerelease)" because I was faced with RXTXcom files mismatched, which requires both your Arduino and Java IDE (BlueJ) having the same version (2.2) of RXTX. Now, you have to move the 2 files into your Java directory (which is hidden by default, can be open with Terminal by the following code).
Move the 2 files into the Extension folder. (Admin password will be required)
Next, make sure you have directed BlueJ towards 2 libraries, RXTXcom.jar (which is the one you just installed in the Java directory) and the jna-3.2.7-sources.zip (from the tutorial above). You do so by -> BlueJ -> Preferences -> Library -> add files. Now BlueJ should know where to find those correct 2 libraries for the code to work. Restart BlueJ, compile the code, and right click on the "mouse" module -> void main (string[] args) -> "OK". It should work by now. Good luck! (took me 8 hours to figure this all out!)
Пытаюсь найти модули сенсорных слайдеров, но пока безрезультатно.
Хочется примерно такое, как на рисунке слева:
Удалось найти:
но лишние кнопки, следовательно, не подходит по габаритам.
но есть слишком много непонятных вещей:
- 2.4 ГГц - не тот интерфейс, который обычно используется Ардуино,
- для меня не очевидно, что, если снять корпус, запитать от сети и поместить в свой корпус, при этом сохранится работоспособность.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А если использовать обычный тачпад от ноута? Он легко цепляется к ардуине, можно за счет накладки из одного двумерного сенсора сделать несколько линейных.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо, очень интересное предложение. Настолько интересное, что я даже решил не отвечать сразу, а немного погуглить по этому поводу.
Насколько я понял, тачпад прикидывается обычной ps/2 мышью, т.е. взаимодействие с ним, действительно, не должно составить проблем.
А вот с идеей организовать на одном тачпаде несколько слайдеров - она, конечно, тоже очень интересная, но в рамках "мышиного" интерфейса я не очень представляю, как это можно сделать.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Видимо - имелись в виду поочередно используемые области (виртуальные полоски) тачпада, например:
1) X = 0..200 , Y = 0..10
2) X = 0..200 , Y = 20..30
..
N) X = 0..200 , Y = 190..200
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Насколько я понял, речь идет не о пассивном резистивном тачпаде, а об активном с интерфейсом мыши ps/2. Насколько я понимаю, мышь в принципе не выдает абсолютных координат, а только перемещение. Т.е. никаких X и Y нет, есть только dX и dY, а по ним невозможно определить, в какой части тачпада было касание.
Но использование резистивной сенсорной накладки на экран (без самого экрана) - другая хорошая идея.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Т.е. никаких X и Y нет, есть только dX и dY, а по ним невозможно определить, в какой части тачпада было касание.
Вопрос конечно интересный. Насколько я понимаю, можно и абсолютные координаты получить. Видел несколько вариантов подключения тачпада к ардуине, но тонкостей не помню. А сколько нужно всего слайдеров? Вообще (некоторые) тачпады поддерживают распознавание нескольких пальцев, например можно различать движение до трех пальцев одновременно. У других есть выделенная зона для вертикального скороллинга, а у некоторых и для горизонтального. Если тачпад поддерживает мультитач, то можно, например распознавать отдельно три различных движения по вертикали, и три по горизонтали (а то и по диагоналям), в итоге можно, если повезет, до 12 линейный слайдеров сэмулировать.
Trash to Treasure Contest
Step 1: Putting the Touchpad Together
I happened to find this TouchPad from inside a dead Fujitsu Siemens laptop. Model number for the pad is ALPS JCI-S1S. These kind of modules are easy to source also from ebay etc.
Ground and supply voltage pins are usually easy to guess just by looking at the circuit board but the data and clock pins were found by just pure trial and error method.
As the flexible cable is not the best suited for use with Arduino, I soldered better wires for the pins. Hot glue was used to make the connection more secure.
Be the First to Share
Did you make this project? Share it with us!
Читайте также: