Мазмуну:
- 1 -кадам: Башкаруу тактасын прототиптөө
- 2 -кадам: баскычтарды басыңыз
- 3 -кадам: Потенциометр
- 4 -кадам: Rotary Encoder
- 5 -кадам: Бардыгын бириктирүү
- 6 -кадам: Код + Демонстрация
Video: Photoshop үчүн Mini Control Pad (Arduino): 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Мына мен сизге 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 -кадам: Башкаруу тактасын прототиптөө
Программаңызды ширетүүнү баштоодон мурун нан табакчасында сынап көрүүнү сунуштайм.
Бул жерде сиз менин схемамды көрө аласыз.
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
Ротари коддогучтар бир аз потенциометрге окшош, бирок канчалык бурула аларына чек жок. Аналогдук маанинин ордуна, биз коддогучтун бурулушун санарип түрдө карайбыз. Мен булардын кантип иштээри жөнүндө майда -чүйдөсүнө чейин айтпайм, бирок сиз билишиңиз керек, бул анын кайсы багытта бурулганын айтуу үчүн 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 -кадам: Код + Демонстрация
Сюрприздерди болтурбоо үчүн, долбоордун ичинде жүрүп жатканда, контролдоочу блоктун программасын текшерүүнү унутпаңыз!
Бул жерде толук код:
окуу үчүн абдан ыраазымын!
Сунушталууда:
[2020] RC Унаасын башкаруу үчүн IPhone же IPad жана Micro: bit Game Pad тиркемесин колдонуу: 23 кадам
[2020] RC унаасын башкаруу үчүн IPhone же iPad жана Micro: bit Game Pad тиркемесин колдонуу: Сиз микро: битти башкаруу үчүн iPhone же iPad колдонууну ойлонуп көрдүңүз беле? Micro: bit Билим берүү Фонду iOS колдонмосун камсыз кылат Колдонмо дүкөнү? Издөө " микро: бит " Колдонмолор дүкөнүндө жана акысыз колдонмону жүктөп алсаңыз болот. The
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн Arduino жана 3D басып чыгаруу үчүн жакшыртылган автобус тажрыйбасы: 7 кадам
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн жакшыртылган автобус тажрыйбасы Arduino жана 3D басып чыгаруу: Көрүүсү начар адамдар үчүн коомдук транспортту кантип жөнөкөйлөтсө болот? көрүүсү начар адамдар. Т
ESP8266 RGB LED STRIP WIFI Control - NODEMCU Wifi аркылуу башкарылган LED тилкеси үчүн IR алыстан башкаруу пулу катары - RGB LED STRIP Smartphone Control: 4 кадам
ESP8266 RGB LED STRIP WIFI Control | NODEMCU Wifi аркылуу башкарылган LED тилкеси үчүн IR алыстан башкаруу пулу катары | RGB LED STRIP смартфонду көзөмөлдөө: Салам балдар бул окуу куралында биз nodemcu же esp8266ды IR пульту катары RGB LED тилкесин башкаруу үчүн колдонууну үйрөнөбүз жана Nodemcu смартфону WiFi аркылуу башкарылат. Ошентип, негизинен сиз RGB LED STRIPти смартфонуңуз менен башкара аласыз
Handheld Shortcut Controller (Photoshop + More үчүн) [Arduino]: 4 кадам
Handheld Shortcut Controller (Photoshop + More үчүн) [Arduino]: Акыркы жолу мен Photoshopто колдонуу үчүн кичинекей көзөмөлдөө тактасын түздүм. Бул кереметтерди жараткан, мен дагы деле колдонуп жатам! Бирок бул дагы чектелген, болгону беш баскыч жана пайдалуу өлчөмү жана тунук эмес терүүлөрү. Мен дагы эле клавиатурага көп жетип жүргөнүмдү таптым … Ошентип
Arduino үчүн 6 баскыч үчүн 1 аналогдук киргизүүнү колдонуңуз: 6 кадам
Arduino үчүн 6 баскыч үчүн 1 аналогдук кирүүнү колдонуңуз: Мен Arduino үчүн кантип көбүрөөк санариптик кирүүлөрдү алсам болот деп көп ойлондум. Жакында мен бир нече санариптик кирүүлөрдү киргизүү үчүн аналогдук кирүүлөрдүн бирин колдоно алам деп ойлодум. Мен тез издеп, адамдардын кайда экенин таптым