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

Photoshop -ийн мини хяналтын самбар (Arduino): 6 алхам
Photoshop -ийн мини хяналтын самбар (Arduino): 6 алхам

Видео: Photoshop -ийн мини хяналтын самбар (Arduino): 6 алхам

Видео: Photoshop -ийн мини хяналтын самбар (Arduino): 6 алхам
Видео: 포토샵 강좌 - 고급 #49. 신선한 오렌지 만들기 2024, Арваннэгдүгээр
Anonim
Photoshop -ийн мини хяналтын самбар (Arduino)
Photoshop -ийн мини хяналтын самбар (Arduino)

Энд би танд Photoshop дээр хурдан ажиллахад туслах жижиг хэрэгсэл хэрхэн хийхийг зааж өгөх болно.

PS -д тусгайлан зориулж хийсэн гарууд шинэ зүйл биш боловч яг надад хэрэгтэй зүйлийг санал болгодоггүй. Зураач хүний хувьд Photoshop -т ажиллах ихэнх цагаа сойзны тохиргоог хийхэд зориулдаг бөгөөд энгийн товчлуурууд нь миний ажлын урсгалд тохирох хяналтыг өгдөггүй гэж би боддог. Тиймээс би өөрийн хүсдэг аналог харилцан үйлчлэлийг өгөхийн тулд товчлуургүй, товчлуурыг өөрийн гараар хийхээр шийдсэн.

Ажлын арга нь маш энгийн: микроконтроллерийг Photoshop -той харьцуулахын тулд бид анхдагч товчлолуудын давуу талыг ашигладаг. Компьютер гар/хулгана хэлбэрээр унших боломжтой самбартай бол бидний хийх ёстой зүйл бол кодын энгийн мөрүүдийг ашиглан компьютерт оролт бүрийг товчлуур даралтын хослолоор уншихыг хэлнэ үү. Одоо буцаах товчлуур бол зүгээр л нэг товчлуур дарахад л болно!

Эхэлцгээе! Энэ төслийн хувьд танд хэрэгтэй болно:

  • 1 Sparkfun ProMicro (эсвэл Arduino Leonardo, зөвлөдөггүй)
  • 1 микро USB адаптер
  • 6 товчлуур (эсвэл таны дуртай тоо)
  • 10к Ом эсэргүүцэл (товчлуур бүрт 1)
  • 1 потенциометр
  • 1 эргэдэг кодлогч
  • утас, талх, перфорд, гагнуур, толгойн зүү гэх мэт.

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

Arduino IDE дээр ProMicro програмчлахын тулд та эхлээд зарим зүйлийг тохируулах хэрэгтэй болж магадгүй юм. Та энэ талаар илүү ихийг SparkFun-ийн гарын авлагаас уншиж болно:

Хэрэв таны компьютер төхөөрөмжийг олоход асуудалтай байгаа бол таны ашиглаж буй микро USB зөвхөн тэжээлээр хангагдаагүй бөгөөд өгөгдөл дамжуулах боломжтой эсэхийг шалгаарай.

Энэ бол миний анхны Arduino төсөл бөгөөд эхлэгчдэд тохиромжтой.

Алхам 1: Хяналтын самбарыг загварчлах

Хяналтын самбарыг загварчлах
Хяналтын самбарыг загварчлах

Гагнахаасаа өмнө програмаа талхны самбар дээр туршиж үзэхийг зөвлөж байна.

Эндээс та миний схемийг харж болно.

1 ба 2 товчлуурууд нь буцаах, дахин хийх, 3 -аас 5 хүртэл нь Brush, Eraser, Lasso хэрэгсэлд зориулагдсан бол 6 -р товчлуур нь хурдан хадгалах товчлуур юм. Кодлогч ба потметр нь тус тусдаа хэмжээ ба тунгалаг байдлыг хянадаг.

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

Алхам 2: Товчлуурыг дарна уу

Товчлуур дарах
Товчлуур дарах

Товчнууд нь хэрэгжүүлэхэд хамгийн хялбар байдаг. Кодыг харцгаая:

#оруулах

const int товчлуурууд = {2, 3, 4, 5, 6, 7, 8, 9}; // бүх товчлуурын голын массив char ctrlKey = KEY_LEFT_GUI; // энэ сонголтыг Windows болон Linux -д ашиглах: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// нэг удаа ажиллуулахын тулд тохиргооны кодоо энд оруулна уу: Serial.begin (9600); Keyboard.begin (); // Товчнууд - массивыг тойрч, дарах эсэхийг шалгана уу (int i = button [0]; i <(sizeof (button)/sizeof (button [0]))+button [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// хэрэв (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {буцах үнэн; }} худал буцаах; } void doAction (int pin) {// task switch (pin) гүйцэтгэх {// ---- Товчлолууд ---- // Тохиолдлыг буцаах 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; // хэргийг 5 дахин хийх: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; // Brush case 6: Keyboard.press ('b'); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; // Eraser case 7: Keyboard.press ('e'); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; // Lasso кейс 8: Keyboard.press ('l'); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; // Case 9 -ийг хадгалах: Keyboard.press (ctrlKey); Keyboard.print ('s); Serial.print ("оролт"); Serial.println (зүү); саатал (200); Keyboard.releaseAll (); завсарлага; анхдагч: Keyboard.releaseAll (); завсарлага; }}

void loop () {

// давтан ажиллуулахын тулд үндсэн кодоо энд оруулна уу.

for (int i = button [0]; i <sizeof (button)/sizeof (button [0])+button [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Өөрчлөгчдийг дахин тохируулах Keyboard.releaseAll ();

}

Тэд харьцангуй шулуун юм. Компьютерийг товчлуурыг товчлуур гэж танихын тулд бид Keyboard.press () функцийг ашигладаг. Тиймээс, буцаах товчлолыг (ctrl+z) идэвхжүүлэхийн тулд бид Keyboard.press (ctrlKey), дараа нь Keyboard.press ('z') -ийг ашигладаг. Эдгээр функцэд хандахын тулд та Keyboard.h -ийг оруулах ёстой бөгөөд гарыг эхлүүлэх хэрэгтэй болно гэдгийг санаарай.

Оролтын зүү нь массивт хадгалагддаг тул та бүгдийг loop () функцээр хялбархан давтаж болно. Массивын массивын хэмжээг массивын элемент дээр хувааж, массивын уртыг c ++ дээр ашиглах нэг хялбар арга. Бид нэг товчлуур дарагдсан эсэхийг шалгахын тулд бүх товчлуурыг эргэлдүүлдэг.

Аливаа зүйлийг эмх цэгцтэй байлгахын тулд би товчлуурынхаа бүх үйлдлийг пин дугаарыг аргумент болгон ашигладаг функцын switch мэдэгдэлд хадгалсан.

Хэрэв та товчлууруудаа өөр өөр зүйл хийхийг хүсч байвал эсвэл өөр товчлуур нэмэхийг хүсч байвал doAction функцийн агуулгыг засаарай!

Физик товчлуурууд хэрхэн ажилладаг тул бид тэдгээрийг хасах хэрэгтэй болно. Энэ нь товчлуурууд хаваржсаны улмаас хүсээгүй даралтыг уншихаас урьдчилан сэргийлэх зорилготой юм. Үүнийг хийх олон арга бий, гэхдээ би үүнийг анхаарч үздэг энгийн readButton () функцийг нэмсэн.

Зүгээр л товчлууруудаа 10к резистороор залгаарай, тэгвэл та алтан өнгөтэй болно!

Алхам 3: Потенциометр

Потенциометр
Потенциометр

Одоо потметр дээр:

#оруулах

int dial0 = 0; void setup () {// нэг удаа ажиллуулахын тулд тохиргооны кодоо энд оруулна уу: Serial.begin (9600); Keyboard.begin (); // Dials dial0 = analogRead (0); залгах0 = газрын зураг (залгах0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {шилжүүлэгч (залгах) {// Ил тод байдлын тохиолдол 0: саатал (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int нэгж = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("хамгийн их залгах 1"); } else {decim = constrain (decim, 0, 9); нэгж = хязгаарлах (нэгж, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+нэгж); }} залгах0 = шинэВал; завсарлага; анхдагч: завсарлага; }} // ------------------ MAIN LOOP ------------------------- хүчингүй байна loop () {// давтан ажиллуулахын тулд үндсэн кодоо энд оруулна уу: // Opacity // delay (500); int val0 = analogRead (0); val0 = газрын зураг (val0, 0, 1023, 1, 20); //Serial.print ("залгах0:"); //Serial.println(val0); if (val0! = dial0) {// dialAction (0, val0, dial0) хийх; }}

Потметр нь ижил логикийг баримталдаг боловч арай илүү зальтай байдаг.

Эхлээд бид үүнийг хэрхэн ажиллуулахыг хүсч байгаагаа харцгаая: Photoshop нь сойзны тунгалаг байдлыг өөрчлөх хэд хэдэн товчлолуудтай. Хэрэв та ямар нэгэн тоон товчлуур дарвал тунгалаг байдал нь*10 гэсэн тоотой тэнцэнэ. Гэхдээ хэрэв та хоёр тоог дарвал энэ нь хоёр дахь дугаарыг нэгж болгон уншиж, танд илүү нарийн хяналт өгөх болно.

Тиймээс бид потметрийг эргэлтийг хэдэн хувьтай харьцуулахыг хүсч байна, гэхдээ үүнийг үргэлж хиймээргүй байна. Бид потметрийг эргүүлэх үед л тунгалаг байдлыг өөрчлөхийг хүсч байна. Тиймээс бид analogRead () утгатай харьцуулах нэмэлт утгыг хадгалдаг бөгөөд ялгаа гарсан тохиолдолд л үйлдлийн скриптийг ажиллуулдаг.

Бидний анзаарах өөр нэг асуудал бол analogRead -ийн өгөөжийг хэрхэн оролт болгон хувиргах явдал юм. Int -ийг мөр болгон хувиргах хялбар арга байхгүй тул бид int -ийг өөрөө ашиглах хэрэгтэй болно. Гэсэн хэдий ч, хэрэв та Keyboard.press (int) гэж бичвэл оролт таны хүссэнээр биш харин өөр түлхүүр дарагдах болно.

Учир нь таны гарын товчлуурууд бүхэл тоогоор кодлогдсон бөгөөд түлхүүр бүр өөрийн гэсэн индекстэй байдаг. Num товчлуурыг зөв ашиглахын тулд та тэдний индексийг ASCII хүснэгтээс хайх хэрэгтэй болно:

Таны харж байгаагаар num товчлуурууд 48 -р индексээс эхэлдэг. Тиймээс зөв товчлуурыг дарахын тулд бид 48 -ийн залгах утгыг нэмэх л үлдэх болно. Аравтын орон, нэгжийн утга нь тусдаа даралт юм.

Эцэст нь үнэ цэнийг нааш цааш харайлгахгүй байх арга бидэнд хэрэгтэй байна. Учир нь хэрэв та газрын зураг бүхий залгах товчийг ашиглахыг оролдвол (val0, 0, 1023, 0, 100) үр дүн нь маш аймшигтай байх болно. Бид товчлууруудыг хэрхэн салгасантай адил нарийвчлалыг золиослох замаар үүнийг засах болно. Үүнийг 1-20 болгож, дараа нь аргументын утгыг 5-аар үржүүлэх нь хүлээн зөвшөөрөгдөх буулт болохыг олж мэдсэн.

Потенциометрийг холбохын тулд 5V утас, газардуулгын утас, аналог оролтын утсыг холбоход л ямар ч асуудал гарах ёсгүй.

Хөгжилтэй баримт: Хэрэв та Lasso гэх мэт хэрэгслийг сонгохдоо энэ товчлолыг ашиглавал энэ нь давхаргын тунгалаг байдлыг өөрчлөх болно. Анхаарах зүйл.

Алхам 4: Ротари кодлогч

Ротари кодлогч
Ротари кодлогч

Ротари кодлогч нь бага зэрэг потенциометртэй төстэй боловч хичнээн их эргүүлж болохыг хязгаарладаггүй. Аналог утгын оронд бид кодлогчын эргэх чиглэлийг тоон хэлбэрээр харах болно. Эдгээр нь хэрхэн ажилладаг талаар би нарийвчлан ярихгүй, гэхдээ таны мэдэх ёстой зүйл бол arduino дээрх хоёр оролтын зүүг ашиглан аль чиглэл рүү эргүүлж байгааг хэлж өгөх явдал юм. Эргэдэг кодлогч нь ажиллахад илүү төвөгтэй байж болох бөгөөд өөр өөр кодлогчдод өөр тохиргоо шаардлагатай байж магадгүй юм. Үүнийг хөнгөвчлөхийн тулд би эмэгтэй зүүгээр зүүхэд бэлэн болсон ПХБ -тай нэгийг худалдаж авлаа. Одоо код:

#оруулах

// Ротари кодлогч #гаралтыг тодорхойлохA 15 #гаралтыг тодорхойлохB 14 int тоолуур = 0; int aState; int aLastState; void setup () {// нэг удаа ажиллуулахын тулд тохиргооны кодоо энд оруулна уу: // Rotary pinMode (outputA, INPUT); pinMode (гаралтB, INPUT); // outputA aLastState = digitalRead (outputA) -ийн анхны төлөвийг уншдаг; } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } өөр {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// давтан ажиллуулахын тулд үндсэн кодоо энд оруулна уу: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// тоолуур ++; rotaryAction (1); } өөр {// тоолуур -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(тоолуур); } aLastState = aState; }

Анхдагч байдлаар, Photoshop -ийн] ба [товчлолууд нь сойзны хэмжээг ихэсгэж, багасгадаг. Яг л өмнөх шигээ бид тэдгээрийг түлхүүр дарагч хэлбэрээр оруулахыг хүсч байна. Кодлогч нь нэг ээлжинд хэд хэдэн оролт илгээдэг (энэ нь загвараас хамаарна), бид эдгээр оролт бүрийн сойзны хэмжээг нэмэгдүүлэх/багасгахыг хүсч байгаа тул та залгуурыг дээш, доош нь хурдан эргүүлж чадна, гэхдээ бас боломжтой. үүнийг маш нарийвчлалтай аажмаар хянах.

Потметрийн нэгэн адил бид зөвхөн эргэлтийг эргүүлэх үед л энэ үйлдлийг хийхийг хүсч байна. Потметрээс ялгаатай нь миний өмнө тайлбарласнаар эргэдэг кодлогч нь хоёр ээлжит оролттой байдаг. Эдгээрийн аль нь өөрчлөгдсөнийг эргүүлэх чиглэлийг тогтоохын тулд бид харж байна.

Дараа нь чиглэлээс хамааран бид зөв товчлуурыг дарна.

Хэрэв танд холбоо барих асуудал байхгүй бол энэ нь ажиллах ёстой.

Алхам 5: Бүгдийг нэгтгэх

Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах

Одоо гагнуур руу орно. Нэгдүгээрт, бид хоёр товчлуурыг тааруулахын тулд perfboard дээр хоёр цооног өрөмддөг. бид товчлуурууд ба тэдгээрийн харгалзах резисторыг гагнана. Доорх орон зайг хэмнэхийн тулд оролтын утсыг дээд талд нь дамжуулахын тулд би хоёр нэмэлт жижиг цооног өрөмдсөн боловч энэ нь шаардлагагүй юм. Оролтын утас тийм ч их байдаггүй тул GND ба 5V утаснууд зэрэгцэн ажилладаг боловч хэрэв та зальтай мэт санагдаж байвал матриц хийхийг хүсч магадгүй юм. Би микроконтроллерийг кодлогч ба потметрийн хажууд байрладаг өөр жижиг перфоронд гагнав. Одоо би бүх утсыг ProMicro руу гагнаж байна. Бүтээлч байх шаардлагагүй, би зүгээр л талхны самбар дээрх схемийг дагаж мөрдөх ёстой байсан, гэхдээ ийм жижиг газарт гагнах нь уйтгартай байдаг. Над шиг байж болохгүй, утас тайлагч, сайн гагнуур ашиглаарай!

Эцэст нь та Photoshop -ийн шинэ найздаа зориулж сайхан хайрцаг хийлгэхийг хүсч магадгүй юм. Надаас нэг сайн, ядаж!

Гэхдээ хэрэв та үүнийг туршиж үзэхийг хүсч байвал картон, соронзон хальс ашиглаад микро USB-ээ залгаарай.

Алхам 6: Код + жагсаал

Image
Image

Гэнэтийн зүйлээс зайлсхийхийн тулд төсөл дээр явж байхдаа хяналтын самбарын програмыг туршиж үзээрэй.

Бүрэн код энд байна:

Уншсанд маш их баярлалаа!

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