Мазмуну:

Photoshop үчүн Mini Control Pad (Arduino): 6 кадам
Photoshop үчүн Mini Control Pad (Arduino): 6 кадам

Video: Photoshop үчүн Mini Control Pad (Arduino): 6 кадам

Video: Photoshop үчүн Mini Control Pad (Arduino): 6 кадам
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Ноябрь
Anonim
Photoshop үчүн Mini Control Pad (Arduino)
Photoshop үчүн Mini Control Pad (Arduino)

Мына мен сизге Photoshopто тезирээк иштөөгө жардам берүү үчүн кичинекей куралды кантип жасоону көрсөтөм!

Атайын PS үчүн жасалган клавиатуралар жаңы эмес, бирок алар мага керектүү нерселерди так сунушташпайт. Сүрөтчү катары, Photoshop менен өткөргөн убактымдын көбү щетка жөндөөсүн жөндөө менен өтөт жана менимче, жөнөкөй жарлыктар менин иш процессиме дал келүү үчүн көзөмөлдү бербейт. Ошентип, мен өзүм каалагандай аналогдук өз ара аракеттенүүнү берүү үчүн чакан, көрүнбөгөн жана терүүлөрү бар, өзүмдүн клавиатурамды жасоону чечтим.

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

Кел, баштайлы! Бул долбоор үчүн сизге керек болот:

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

Сиз бул долбоор үчүн Arduino Leonardo колдоно аласыз, бирок ProMicro бирдей арзан atmega32u4 чипин колдонот, көп казыктарга ээ жана алда канча кичине формада келет, бул клавиатура үчүн идеалдуу кылат.

ProMicroну Arduino IDEде программалоо үчүн, адегенде кээ бир нерселерди орнотушуңуз керек болот. Бул тууралуу көбүрөөк маалыматты SparkFun жетегинен окуй аласыз:

Эгерде компьютериңизде аппаратты табууда кыйынчылыктар болуп жатса, колдонгон микро-USB кубаттуулук менен гана иштебей турганын жана берилиштерди колдоону текшериңиз.

Бул менин биринчи Arduino долбоорум жана башталгычтарга ылайыктуу.

1 -кадам: Башкаруу тактасын прототиптөө

Control Padтин прототиби
Control Padтин прототиби

Программаңызды ширетүүнү баштоодон мурун нан табакчасында сынап көрүүнү сунуштайм.

Бул жерде сиз менин схемамды көрө аласыз.

1 жана 2 баскычтар Undo and Redo болот, 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 = түймөлөр [0]; i <(sizeof (түймөлөр)/sizeof (баскычтар [0]))+баскычтар [0]; ++ i) { pinMode (i, INPUT); }} логикалык readButton (int pin) {// текшерүү жана чыгаруу баскычтары эгерде (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} false; } void doAction (int pin) {// тапшырмаларды аткарууну аткарыңыз (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 (); тыныгуу; // Өчүргүч иши 7: Keyboard.press ('e'); Serial.print ("киргизүү"); Serial.println (пин); кечигүү (200); Keyboard.releaseAll (); тыныгуу; // Lasso иши 8: Keyboard.press ('l'); Serial.print ("киргизүү"); Serial.println (пин); кечигүү (200); Keyboard.releaseAll (); тыныгуу; // 9 -ишти сактоо: Keyboard.press (ctrlKey); Keyboard.print ('s); Serial.print ("киргизүү"); Serial.println (пин); кечигүү (200); Keyboard.releaseAll (); тыныгуу; демейки: Keyboard.releaseAll (); тыныгуу; }}

void loop () {

// кайра иштетүү үчүн негизги кодуңузду бул жерге коюңуз:

for (int i = түймөлөр [0]; i <sizeof (баскычтар)/sizeof (түймөлөр [0])+баскычтар [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 (); // Терүү терүү0 = analogRead (0); dial0 = карта (терүү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+бирдик); }} dial0 = newVal; тыныгуу; демейки: тыныгуу; }} // ------------------ Негизги цикл ------------------------- жараксыз loop () {// негизги кодуңузду бул жерге коюп, кайра -кайра иштетүү үчүн: // Opacity // delay (500); int val0 = analogRead (0); val0 = карта (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// dialAction бир нерсе кыл (0, val0, dial0); }}

Потметр ошол эле логикага ылайык келет, бирок бул бир аз татаалыраак.

Биринчиден, биз анын кантип иштешин каалайбыз: Photoshopтун щетканын тунуктугун өзгөртүү үчүн колдо болгон кыска жолдору бар. Эгер кандайдыр бир сан баскычын бассаңыз, тунуктугу ошол санга барабар болот*10. Бирок эгер сиз эки цифраны бассаңыз, анда ал экинчи номерди бирдик катары окуйт жана сизге так көзөмөлдү берет.

Ошентип, биз өзүбүздүн потметрибиздин айлануусун пайызга чейин көрсөтүшүн каалайбыз, бирок биз муну дайыма жасоону каалабайбыз, анткени бул акылсыздык. Биз тунуктуулукту потметр бурулуп жатканда гана өзгөрткүбүз келет. Ошентип, биз analogRead () маанисине салыштырган кошумча маанини сактайбыз жана айырмачылык болгондо гана аракет скриптин иштетебиз.

Биз кире турган дагы бир маселе - бул analogReadдин кайтуусун int катары кантип киргизүү. Intти сапка айлантуунун оңой жолу жок болгондуктан, intдын өзүн колдонууга туура келет. Бирок, эгерде сиз жөн гана Keyboard.press (int) деп жазсаңыз, анда киргизүү сиз каалагандай болбой турганын байкайсыз, анын ордуна башка баскыч басылат.

Себеби клавиатураңыздын баскычтары бүтүндөй сандар катары коддолгон, ар бир ачкычтын өзүнүн индекси бар. Нум баскычын туура колдонуу үчүн, алардын индексин ASCII таблицасынан издөөгө туура келет:

Көрүнүп тургандай, num баскычтары 48 -индекстен башталат. Ошентип, туура баскычты басуу үчүн биз терүүнүн маанисин 48ге кошуубуз керек. Ондук жана бирдиктүү маанилер өзүнчө басуулар.

Акыр -аягы, биз бааны алдыга жана артка секирүүдөн сактап калуунун жолуна муктажбыз. Себеби, эгер сиз терүүнү карта менен колдонууга аракет кылсаңыз (val0, 0, 1023, 0, 100), жыйынтыгын абдан коркунучтуу деп табасыз. Кнопкаларды кантип жок кылганыбызга окшоп, биз дагы кээ бир тактыкты курмандыкка чалуу менен оңдойбуз. Мен аны 1-20га картага түшүрүү жана аргументтердин маанисин 5ке көбөйтүү алгылыктуу компромисс деп таптым.

Потенциометрди туташтыруу үчүн жөн эле 5В зым, жерге зым жана аналогдук киргизүү зымын туташтырыңыз жана эч кандай көйгөй болбошу керек.

Кызыктуу факт: эгерде сиз лассо сыяктуу курал тандалганда бул жарлыкты колдонсоңуз, ал анын ордуна катмардын тунуктугун өзгөртөт. Эске алчу нерсе.

4 -кадам: Rotary Encoder

Rotary Encoder
Rotary Encoder

Ротари коддогучтар бир аз потенциометрге окшош, бирок канчалык бурула аларына чек жок. Аналогдук маанинин ордуна, биз коддогучтун бурулушун санарип түрдө карайбыз. Мен булардын кантип иштээри жөнүндө майда -чүйдөсүнө чейин айтпайм, бирок сиз билишиңиз керек, бул анын кайсы багытта бурулганын айтуу үчүн arduinoдо эки киргизүү казыгын колдонот. Ротари коддогуч менен иштөө татаалыраак болушу мүмкүн, ар кандай коддогучтар ар кандай орнотууларды талап кылышы мүмкүн. Баарын жеңилдетүү үчүн, мен ПКБ менен бирөөнү сатып алдым, алар ургаачы казыктарга илинүүгө даяр. Эми код:

#кошуу

// Rotary encoder #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// орнотуу кодуңузду бул жерге коюңуз, бир жолу иштетүү үчүн: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // outputA aLastState = digitalRead (outputA) баштапкы абалын окуйт; } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ Негизги цикл ------------------------- боштук цикл () {// негизги кодуңузду бул жерге коюп, кайра -кайра иштетүү үчүн: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } else {// counter -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(эсептегич); } aLastState = aState; }

Демейки боюнча, Photoshopтун] жана [кыска жолдору щетканын көлөмүн көбөйтөт жана кичирейтет. Мурдагыдай эле, биз аларды баскычтар катары киргизгибиз келет. Кодер бир кезекте бир катар маалыматтарды жөнөтөт (бул моделге жараша болот) жана биз бул кирүүлөрдүн ар биринин щеткасынын көлөмүн көбөйтүүнү/кичирейтүүнү каалайбыз, андыктан тергичти чындап тез же ылдый бурсаңыз болот, бирок ошондой эле аны өтө тактык менен жай көзөмөлдөңүз.

Потметр сыяктуу эле, биз аракетти тергич бурулганда гана иштеткибиз келет. Потметрден айырмаланып, мен мурда түшүндүргөндөй, айлануучу кодердин эки алмашма кириши бар. Биз терүү бурулуп жаткан багытты аныктоо үчүн булардын кайсынысы өзгөргөнүн карайбыз.

Андан кийин багытка жараша туура баскычты басабыз.

Байланыш маселелери жок болсо, ал иштеши керек.

5 -кадам: Бардыгын бириктирүү

Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу

Эми ширетүүгө өтүңүз. Биринчиден, биз эки тергичке туура келиши үчүн, перформаттын тактайына эки тешик бурабыз. биз баскычтарды жана алардын тиешелүү резисторлорун ширетебиз. Мен астындагы мейкиндикти үнөмдөө үчүн кирүүчү зымдардын үстүнөн өтүшүнө кошумча эки кичинекей тешик бургуладым, бирок бул кереги жок. Кирүүчү зымдар көп эмес, ошондуктан GND жана 5V зымдары параллелдүү иштейт, бирок эгер сиз өзүңүздү куулук сезип жатсаңыз, анда матрицаны жасоону каалашыңыз мүмкүн. Мен микроконтроллерди коддогуч менен потметрдин жанына туура келген башка, кичинекей перформатка чаптадым. Азыр мен бардык зымдарды ProMicroго ширетем. Чыгармачылыктын кереги жок, мен жөн эле нан тактасындагы схеманы карманышым керек болчу, бирок ушунчалык кичинекей жерде ширетүү түшүнүксүз түрдө тажатма болушу мүмкүн. Мага окшобогула, зым чечүүчү жана жакшы ширетүүчү колдон!

Акыр -аягы, сиз жаңы Photoshop досуңуз үчүн жакшы корпус жасоону каалашыңыз мүмкүн. Жок дегенде меникинен жакшы!

Бирок, эгер сиз аны сынап көргүңүз келсе, бир аз картонду жана скотчту колдонуңуз жана микро-USBңизди сайыңыз.

6 -кадам: Код + Демонстрация

Image
Image

Сюрприздерди болтурбоо үчүн, долбоордун ичинде жүрүп жатканда, контролдоочу блоктун программасын текшерүүнү унутпаңыз!

Бул жерде толук код:

окуу үчүн абдан ыраазымын!

Сунушталууда: