Јунак наше приче је опет Вии Нунцхук контролер. Чим програмер
Тод Е. Курт написао библиотеку за
Ардуино, омогућавајући вам да радите са њим, пријатељи су почели да стижу са њим много различитих апликација. Или је играчка чаробног екрана контролисана, или виртуелни хеликоптер у игри за МСКС ... Па, аутор Упутства под надимком Криегвесен смислио је како да користи такав контролер као обичан рачунарски миш са УСБ интерфејсом. Као да је трацкбалл - није потребан тепих. Не, ово је боље него трацкбалл - не треба вам ни сто.
Обично се за повезивање Ардуино-а са Нунцхуком користе импровизовани конектори. Мајстор одлучи да уради без њега, отвори случај и тамо постави врло мали клон Ардуина. Али он нема одвијач са убодом троугластог пресека. Мајстор то наређује, али треба предуго чекати. Ништа, корисно за друге пројекте. Овде отвара кабл и из њега извлачи четири проводника:
За
домаће свака Ардуино компатибилна плоча која може да опонаша УСБ ХИД уређаје, као и пинови посебно намењени за СДА и СЦЛ линије интерфејса И, је погодна
2Ц. Плоча Ардуино Леонардо одговара оба критеријума. Проводници у Нунцхук каблу обично имају следеће кодирање боја: бела - уобичајена, црвена - плус снага (правилно примените 3,3 В, али из рецензија и од 5 В ништа не успева), зелена - СДА, жута - СЦЛ . Али такође се дешава да су боје нестандардне, тако да је боље да узмете комад кабла који након угриза који је остао са конектором и звони у складу са његовим изрезом.
Комбинујући све што је горе описано, мајстор пише скицу:
// Виицхуцк Моусе
// Бриан Крукоски
// Април 2012
// ред- + 5, вхите-гнд, греен-сда, иллв-цлцк
#инцлуде <Вире.х>
#инцлуде "нунцхуцк_фунцс.х"
инт лооп_цнт = 0;
// параметри за читање џојстика:
инт распон = 40; // излазни распон кретања Кс или И
инт праг = распон / 10; // праг мировања
инт центар = распон / 2; // вредност положаја одмарања
бооле моусеИсАцтиве = лажно; // да ли управљати мишем или не
инт ластСвитцхСтате = ЛОВ; // претходно стање прекидача
воид сетуп () {
// иницијализација за Виицхуцк
нунцхуцк_инит ();
// преузми контролу над мишем:
Моусе.бегин ();
Сериал.бегин (9600);
}
воид лооп () {
ако (лооп_цнт> 10) {// сваких 10 мсец добија нове податке
лооп_цнт = 0;
нунцхуцк_гет_дата ();
// контрола десног и левог клика
инт лефтСтате = нунцхуцк_цбуттон ();
ако (лефтСтате) Моусе.пресс (МОУСЕ_ЛЕФТ); елсе Моусе.релеасе (МОУСЕ_ЛЕФТ);
инт ригхтСтате = нунцхуцк_збуттон ();
иф (ригхтСтате) Моусе.пресс (МОУСЕ_РИГХТ); елсе Моусе.релеасе (МОУСЕ_РИГХТ);
// прочитајте ос к
инт кРеадинг = нунцхуцк_јоик (); // позива у библиотеку нунцхуцк_фунцс за читање оси к
кРеадинг = мапа (кРеадинг, 38, 232, 0, распон); // 38 и 232 произвољно одређени експериментисањем, пресликавањем на 0 и унапред постављеним опсегом
инт кДистанце = кРеадинг - центар;
иф (абс (кДистанце) <праг) // ако је апсолутна вредност кДистанце мања од унапред дефинисаног прага ....
{
кДистанце = 0;
}
// прочитајте оси и
инт иРеадинг = нунцхуцк_јоии (); // позива библиотеку нунцхуцк_фунцс за читање оси
иРеадинг = мапа (иРеадинг, 38, 232, 0, распон); // 38 и 232 произвољно одређени експериментисањем, пресликавањем на 0 и унапред постављеним опсегом
инт иДистанце = иРеадинг - центар;
иф (абс (иДистанце) <праг) // ако је апсолутна вриједност иДистанце мања од унапријед дефинираног прага ....
{
иДистанце = 0;
}
// померите миш ако су очитања изнад 0
иф ((кДистанце! = 0) || (иДистанце! = 0)) {
Моусе.мове (кДистанце, -иДистанце, 0); // -иДистанце осигурава обрнути стил џојстика
}
}
нунцхуцк_принт_дата (); // исписује нунцхуцк податке на серијски монитор у сврху уклањања погрешака
лооп_цнт ++;
кашњење (1);
}
Програму је потребна постављена датотека заглавља
овде. Након преузимања преименујте га у нунцхуцк_фунцс.х
Мајстор стави сву пеглу у кутију која изгледа попут лемилне кутије и фиксира каблове унутра Сугру. Можете узети праву спојну кутију и поправити каблове на други начин.
У тренутној верзији софтвера све функционише стабилно, али функција помицања није имплементирана. У будућности, мастер планира да се увери да када притиснете један од тастера, помицање ће се десити у складу са сигналима Нунцхук акцелерометра.