Агуулгын хүснэгт:

Гар товчлол хянагч (Photoshop + Бусад) [Arduino]: 4 алхам
Гар товчлол хянагч (Photoshop + Бусад) [Arduino]: 4 алхам

Видео: Гар товчлол хянагч (Photoshop + Бусад) [Arduino]: 4 алхам

Видео: Гар товчлол хянагч (Photoshop + Бусад) [Arduino]: 4 алхам
Видео: Galzuu shulam 2024, Арваннэгдүгээр
Anonim
Гар товчлол хянагч (Photoshop + Бусад) [Arduino]
Гар товчлол хянагч (Photoshop + Бусад) [Arduino]

Хамгийн сүүлд би Photoshop дээр ашиглах жижигхэн хяналтын самбар үүсгэсэн. Энэ нь гайхамшигтай ажилласан, би одоо ч ашиглаж байна! Гэхдээ энэ нь нэлээд хязгаарлагдмал бөгөөд ердөө таван товчлуур, ашигтай хэмжээ, тунгалаг бус залгууртай. Би гар руу маш их хүрч байгааг олж харсан хэвээр байна …

Тиймээс би хяналтын товчлуурын дараагийн давталт дээр ажиллаж эхлэв. Бүгдийг удирдах нэг хяналтын самбар.

Энэ бол хяналтын самбар биш юм. ГЭХДЭЭ нэг талаараа илүү дээр байж магадгүй.

Хэрэв та маш олон товчлолтой байж болох ч супер тохь тухтай, хөнгөн жинтэй бол тасалдалгүй зурахдаа гараараа чөлөөтэй барьж болно. … За, мэдээллийн сурталчилгаанд хангалттай.

Энэхүү хянагчийг зөвхөн 4 товчлуураар 32 хүртэлх товчлолоор зураглах боломжтой байдлаар програмчилсан болно! Нэмэлт 5-р товчлуур нь олон програмд хэрэгтэй тохируулагч товчлууруудыг ямар ч хослолоор ашиглах боломжийг надад олгодог (та Alt-RMB хослолыг PS дээр туршиж үзсэн үү? Хэрэв тийм биш бол үүнийг хийгээрэй. Энэ бол аврагч). Би системийг дараа нь тайлбарлах болно.

Энэ бүгдийг хийхийн тулд танд дараахь зүйлс хэрэгтэй болно.

  • 1 Микроконтроллер (би Adafruit ItsyBitsy 32u4 ашигладаг байсан, гэхдээ atmega32u4 чиптэй л бол үүнийг хийх ёстой)
  • 1 микро USB адаптер (өгөгдөл, зөвхөн тэжээлээр биш)
  • 5 товчлуур (би зөөлөн товчлууруудыг ашигладаг байсан)
  • 10к Ом эсэргүүцэл (нэг товчлуур тутамд 1 ширхэг)
  • Утас, талхны хавтан, гагнуурын материал гэх мэт.
  • Суултын яндан хийх зүйл (3D принтер гэх мэт)

Энэ бол дунд түвшний Arduino төсөл бөгөөд юу болж байгааг илүү сайн ойлгохын тулд би өмнөх хичээлээ үзэхийг санал болгож байна, учир нь ихэнх нь миний тайлбарласан зүйлийг давтах болно.

За, эхэлцгээе!

Алхам 1: Төлөвлөлт

Төлөвлөлт
Төлөвлөлт

Энэ бол миний хянагчийн зурсан үндсэн схем юм. Хэрэв та үүнийг миний өмнөх төсөлтэй харьцуулж үзвэл схем нь үнэхээр энгийн юм! Гэхдээ бид хэдхэн товчлуураар хослуулсан даралтын хүчээр илүү ихийг хийх боломжтой болно!

Хяналтын схемийн цаадах санаа бол товчлуур бүрийг чөлөөтэй, дарж, суллах эсвэл дарж, барьж болно. Хэвлэх, суллах нь товчлолыг идэвхжүүлдэг бөгөөд товчлуурыг дарахад бидэнд янз бүрийн товчлол руу нэвтрэх боломжийг олгодог. Хэрэв та зүгээр л А товчлуурыг дарвал А товчлолыг идэвхжүүлэх болно, гэхдээ хэрэв та А товчлуурыг дарахад B дарвал өөр товчлол гарч ирэх болно. Та дарж байхдаа 3 товчлуурыг нэгэн зэрэг дарах боломжтой тул та хэд хэдэн үндсэн комбинаторыг ашиглахдаа энэ системд хичнээн олон хослол хийх боломжтойг харах болно.

Нэмэлт тав дахь товчлуур нь миний бодож олсон гар утасны хэлбэрийг харгалзан үзэхэд байгалийн нэмэлт зүйл мэт санагдсан. Би үүнийг ашиглан Photoshop дахь өөрчлөх товчлууруудыг ашиглахаар шийдсэн. Ажиллах арга нь бусад товчлууруудаас арай өөр юм: эрхий хурууны товчлуурыг дарах бүрт зөвхөн өөрчлөх төхөөрөмжүүдийг ашиглах болно. Эдгээрийг барьж байх үед идэвхжүүлж, олон дарах боломжтой болно. Хэрэв A товчлуур нь Shift, B товчлуур нь Ctrl бол A ба B товчлуурыг дарахад Shift болон Ctrl хоёуланг нь дарахтай адил байх болно, гэхдээ зөвхөн эрхий хурууны товчлуурыг дарж байхад л болно!

Бүрхүүл нь эргономик ба хоёр талт байдлаар хийгдсэн. Жижиг хуруугаа ашиглах нь тийм ч их ядаргаатай биш бөгөөд надаас том гартай хүмүүст ч бас тохирохуйц байхын тулд би үүнийг маш сайн тохируулсан.

Алхам 2: Прототип + код

Прототип + код
Прототип + код

Талхны самбар дээрх товчлууруудыг туршиж үзэх нь сайн практик юм. Энэ нь маш энгийн, товчлуур ба резисторыг зураг дээрх шиг холбоно уу. Та үүнийг кодоор энд туршиж үзэх боломжтой (pastebin линкийн өөр хувилбар):

#оруулах

// MacOS -д vthisv сонголтыг ашиглана уу:

// char ctrlKey = KEY_LEFT_GUI;

// Windows болон Linux -д зориулсан vthisv сонголтыг ашиглана уу:

char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;

// Функцийн түлхүүрүүд энд байна

char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;

const int pins = {9, 10, 11, 12, 13}; // бүх товчлуурын голын массив

// Мэдрэмж

const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;

const int BUTTON_NUM = 5;

// Хүрээг хөлдөөх

const int DELAY = 0;

enum мужууд {чөлөөлөгдсөн, дарагдсан, баригдсан, чөлөөлөгдсөн};

бүтэц товчлуур {

int pin; Муж улс; int timeHeld; }; // эрхий хуруу, индекс, дунд, бөгж, бага;

товчлуурын товчлуурууд [BUTTON_NUM] = {};

initButton товчлуур (int p) {

товчлуур b; pinMode (p, INPUT); b.pin = p; b.state = Улсууд:: чөлөөлөгдсөн; b.timeHeld = 0; буцах b; }

хүчингүй тохиргоо () {

// нэг удаа ажиллуулахын тулд тохиргооны кодоо энд оруулна уу: Serial.begin (9600); Keyboard.begin ();

while (! Цуваа) {};

// (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("товчлуурыг тохируулах") товчлуурууд; Цуваа.хэвлэх (i); Serial.print ("pin дээр:"); Serial.println (тээглүүр ); // товчлуурууд ii.pin = 1; товчлуурууд = initButton (голууд ); Serial.println ( товчлуурууд); }

}

bool readButton (int pin) {

// шалгах, унтраах товчлуурууд байвал (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {буцах үнэн; }} худал буцаах; }

int pintobin (int pin) {

if (pin == pins [0]) 1 буцаана; if (pin == pins [1]) 10 буцаана; if (pin == pins [2]) 100 буцаана; if (pin == pins [3]) 1000 буцаана; if (pin == pins [4]) 10000 буцаана; } button buttonStateUpdate (button b) {

bool press = readButton (b.pin);

switch (b.state) {тохиолдол муж:: суллагдсан: b.timeHeld = 0; if (press) b.state = State:: дарагдсан; завсарлага; тохиолдолд дарагдсан: b.timeHeld+= 1; if (дарна уу) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = State:: hold; }} өөр {// if (b.timeHeld

int getButtonStateCode (товчлуур b)

{буцах b.state*pintobin (b.pin); }

int getCodeByButton (int код, int индекс) {

int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+индекс);

// анхны ажиллагаа

if (opStep == 0) буцах код/10000; r1 = код%10000;

хэрэв (opStep == 1)

буцах r1/1000; r2 = r1%1000; хэрэв (opStep == 2) r2/100 буцаана; r3 = r2%100; хэрэв (opStep == 3) r3/10 буцаана; r4 = r3%10; хэрэв (opStep == 4) r4/1 буцаана; r5 = r4%1; }

void completePress (int pin) {

// Serial.print ("оролт"); // Serial.println (зүү); саатал (THRESH_3); Keyboard.releaseAll (); }

void doAction (int code) {

// Өөрчлөгч бол if (getCodeByButton (код, 0) == 2) {// Serial.println ("--- хувиргагчид ----"); if (getCodeByButton (код, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (код, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (код, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (код, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ ээлжийн ------"); } else Keyboard.release (shiftKey); } өөр {

// даалгавар гүйцэтгэх

шилжүүлэгч (код) {тохиолдол 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); дуусгах (код); завсарлага; тохиолдол 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); дуусгах (код); завсарлага; тохиолдол 3000: // --- | Шанага гар. Press (shiftKey); Keyboard.print ('g'); дуусгах (код); завсарлага; тохиолдол 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); дуусгах (код); завсарлага; тохиолдол 320: //-| o Гарыг буцаах.press (ctrlKey); Keyboard.print ('z'); дуусгах (код); завсарлага; тохиолдол 3020: //-| -o Дахин хийх Keyboard.press (ctrlKey); Keyboard.print ('y'); дуусгах (код); завсарлага; кейс 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); дуусгах (код); завсарлага; тохиолдол 230: //-o | Keyboard.press хадгалах (ctrlKey); Keyboard.print ('s); дуусгах (код); завсарлага; кейс 3200: //- | o- Түргэн-p.webp

int buttonCode = 0;

for (int i = 0; i <BUTTON_NUM; ++ i) {товчлуур = buttonStateUpdate (товчлуурууд ); buttonCode+= getButtonStateCode (товчлуурууд ); }

if (buttonCode! = 0) {

Serial.print ("товчлуурын код:"); Serial.println (buttonCode); }

doAction (buttonCode);

// давтан ажиллуулахын тулд үндсэн кодоо энд оруулна уу: // for (int i = button [0]; i <sizeof (button)/sizeof (button [0])+button [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

if (getCodeByButton (buttonCode, 0)! = 2)

Keyboard.releaseAll ();

саатал (хойшлуулах);

}

Логикийн талаар хэлэх зүйл алга байна, учир нь энэ нь миний сүүлийн хянагчийнхтай төстэй бөгөөд хоёр мэдэгдэхүйц ялгаатай байна.

  1. Товчлуурууд нь өөрсдийн улсын машинтай бүтэцтэй
  2. Мужуудыг нэгтгэн үйлдлийг тодорхойлдог код гаргадаг

Энэ зарчим нь бит шилжүүлэхтэй төстэй боловч товчлуурууд нь олон төлөвтэй бөгөөд хоёртын дүрсээр илэрхийлэгдэх боломжгүй тул оронд нь арван тоогоор үржүүлдэг. Дараа нь би товчлуурын бүх төлөвийг нэг тоогоор нэмж doAction () шилжүүлэгчийн мэдэгдлийг дамжуулж, бүх товчлолуудын кодыг оруулна.

Таны харж байгаагаар би боломжит бүх хослолыг зураглаагүй байна. Би хэдхэн дуртай товчлолуудаа л оруулсан бөгөөд үлдсэн хэсгийг нь таны хүссэнээр бөглөхийг би танд үлдээж байна;)

Алхам 3: Бүрхүүл

Бүрхүүл
Бүрхүүл
Бүрхүүл
Бүрхүүл
Бүрхүүл
Бүрхүүл

Би бүрхүүлд 3D принтер ашигласан. Таны харж байгаагаар дизайн нь зарим сул талуудтай тул MacGyver -ийг хаах арга байсан. Тиймээс би одоогоор загвар файлыг нийтлэхгүй байна.

Товчлуурууд нь "вандан сандал" дээр халуун наасан бөгөөд ингэснээр тагийг байрандаа байлгадаг. Зөөлөн товчлуурууд нь үүнийг сайн хийдэг тул хэрэв та минийхтэй төстэй хэрэг хийхээр төлөвлөж байгаа бол заримыг нь авахаа мартуузай.

Түүнчлэн, энэ нь маш хөнгөн тул хайрцган дотор жаахан жин нэмэхийг санал болгож байна. Нэмэлт грамм нь түүнийг барихад илүү байгалийн мэдрэмж төрүүлэх болно.

Зурагт үзүүлсэн шиг бүх зүйлийг гагнана уу, USB кабелийг холбоно уу, бүх зүйл байрандаа байх ёстой (цавуугаар)!

Алхам 4: Үр дүн ба боломжит сайжруулалтууд

Үр дүн ба боломжит сайжруулалт
Үр дүн ба боломжит сайжруулалт
Үр дүн ба боломжит сайжруулалт
Үр дүн ба боломжит сайжруулалт
Үр дүн ба боломжит сайжруулалт
Үр дүн ба боломжит сайжруулалт

Тэнд байна! Та бүх чухал товчлолуудаа ганц гараараа ашиглахын тулд ашиглаж болох гар хянагч!

Булчингийн санах ойг ашиглах шаардлагатай боловч энэ нь үнэхээр уян хатан юм!

Мэдээжийн хэрэг энэ нь төгс биш бөгөөд яг одоо би үүнийг сайжруулах зарим аргуудын талаар бодож байна. Суултын хайрцгийг сайжруулах, товчлол нэмэхээс гадна өөр өөр товчлол бүхий олон програмыг дэмжих нь сонирхолтой байх болно гэж бодож байна. Photoshop-ийн богино холболтын сангийн хооронд Майя-д зориулагдсан нэг захиалагч руу шилжихийн тулд 4 товчлуурыг нэгэн зэрэг дарах гэх мэт хяналтын схем хооронд шилжихийн тулд товчлуурын хослолтой болох талаар бодож байна.

Зүгээр л хэдэн санаа.

Уншсанд баярлалаа, дараагийн удаа хүртэл!

Зөвлөмж болгож буй: