Оглавление:
- Шаг 1. Создание прототипа панели управления
- Шаг 2: нажмите кнопки
- Шаг 3: потенциометр
- Шаг 4: поворотный энкодер
- Шаг 5: Собираем все вместе
- Шаг 6: Код + демонстрация
Видео: Мини-панель управления для Photoshop (Arduino): 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Вот я покажу вам, как сделать небольшой инструмент, который поможет вам работать в Photoshop быстрее!
Клавиатуры, специально созданные для PS, не новы, но они не совсем то, что мне нужно. Как художник, я большую часть времени в Photoshop трачу на настройку кисти, и я думаю, что простые кнопки быстрого доступа не дают мне контроля, соответствующего моему рабочему процессу. Поэтому я решил сделать свою собственную клавиатуру, маленькую, ненавязчивую, с циферблатами, которые дают мне то аналоговое взаимодействие, которое я всегда хотел.
Принцип работы прост: чтобы микроконтроллер взаимодействовал с Photoshop, мы используем ярлыки по умолчанию. С платой, которую компьютер может читать как клавиатуру / мышь, все, что нам нужно сделать, это использовать несколько простых строк кода, чтобы сообщить компьютеру, что каждый ввод будет считываться комбинацией нажатий клавиш. Теперь кнопка отмены находится всего в одном нажатии кнопки!
Давайте начнем! Для этого проекта вам понадобятся:
- 1 Sparkfun ProMicro (или Arduino Leonardo, не рекомендуется)
- 1 адаптер micro-USB
- 6 кнопок (или любое количество, которое вам нравится)
- Резисторы 10 кОм (по 1 на каждую кнопку)
- 1 потенциометр
- 1 поворотный энкодер
- провода, макет, монтажная плата, припой, штыри и т. д.
Вы можете использовать Arduino Leonardo для этого проекта, но ProMicro - гораздо более дешевая альтернатива, которая использует тот же чип atmega32u4, имеет больше контактов и имеет гораздо меньшую форму, что делает его идеальным для клавиатуры.
Чтобы запрограммировать ProMicro в Arduino IDE, вам может потребоваться сначала настроить некоторые вещи. Вы можете узнать больше об этом в руководстве SparkFun:
Если вашему компьютеру не удается найти устройство, убедитесь, что используемый вами разъем micro-USB не предназначен только для питания и поддерживает передачу данных.
Это мой первый проект Arduino, он подходит для новичков.
Шаг 1. Создание прототипа панели управления
Я рекомендую вам сначала протестировать вашу программу на макетной плате, прежде чем приступить к пайке.
Здесь вы можете увидеть мою схему.
Кнопки 1 и 2 будут «Отменить» и «Вернуть», 3–5 - для инструментов «Кисть», «Ластик» и «Лассо», кнопка 6 - это кнопка быстрого сохранения. Кодировщик и потенциометр управляют размером и непрозрачностью соответственно.
Обратите внимание, что я левша и разработал макет таким образом, чтобы мне было удобнее его использовать. Воспринимайте момент, когда вы используете макетную плату, как возможность подумать о том, какие функции вы хотите, чтобы ваш контроллер имел, что лучше всего подходит для вас и, в конечном итоге, понадобятся ли вам дополнительные детали для этого.
Шаг 2: нажмите кнопки
Кнопки реализовать проще всего. Взглянем на код:
#включают
const int buttons = {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 = buttons [0]; i <(sizeof (buttons) / sizeof (buttons [0])) + buttons [0]; ++ i) { pinMode (я, ВХОД); }} boolean readButton (int pin) {// кнопки проверки и устранения ошибок if (digitalRead (pin) == HIGH) {delay (10); если (digitalRead (контакт) == ВЫСОКИЙ) {вернуть истину; }} return false; } void doAction (int pin) {// выполнение задач 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 (); перерыв; // Кисть 6: Keyboard.press ('b'); Serial.print («вход»); Serial.println (контакт); задержка (200); Keyboard.releaseAll (); перерыв; // Ластик 7: Keyboard.press ('e'); Serial.print («вход»); Serial.println (контакт); задержка (200); Keyboard.releaseAll (); перерыв; // Случай лассо 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 я = кнопки [0]; я <размер (кнопки) / размер (кнопки [0]) + кнопки [0]; ++ i) {если (readButton (i)) {doAction (i); }} // Сброс модификаторов Keyboard.releaseAll ();
}
Они довольно простые. Чтобы компьютер распознавал нажатие кнопки как нажатие клавиши, мы просто используем функцию Keyboard.press (). Итак, чтобы активировать сочетание клавиш Undo (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 (); // Набирает dial0 = analogRead (0); dial0 = map (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Непрозрачность case 0: delay (200); если (newVal! = lastVal) {int decim = ((newVal * 5) / 10); int unit = ((newVal * 5)% 10); если (newVal == 20) {Keyboard.write (48 + 0); Keyboard.write (48 + 0); Serial.println («макс. Циферблат 1»); } else {decim = ограничение (decim, 0, 9); unit = ограничить (unit, 0, 9); Serial.println (newVal * 2); Keyboard.write (48 + десятичное); Keyboard.write (48 + единица); }} dial0 = newVal; перерыв; по умолчанию: перерыв; }} // ------------------ MAIN LOOP ------------------------- void loop () {// поместите сюда ваш основной код для повторного запуска: // Opacity // delay (500); int val0 = аналоговое чтение (0); val0 = карта (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Что-нибудь делаем dialAction (0, val0, dial0); }}
Потметр следует той же логике, но немного сложнее.
Сначала давайте посмотрим, как мы хотим, чтобы это работало: в Photoshop есть несколько удобных ярлыков для изменения непрозрачности кисти. Если вы нажмете любую клавишу с цифрой, непрозрачность будет равна этому числу * 10. Но если вы нажмете две цифры, вторая цифра будет считаться как единое целое, что даст вам более точный контроль.
Итак, мы хотим, чтобы наш потметр отображал свое вращение в процентах, но мы не хотим делать это все время, поскольку это было бы глупо. Мы хотим изменить непрозрачность только при повороте потенциометра. Таким образом, мы сохраняем дополнительное значение, которое сравниваем со значением analogRead (), и запускаем сценарий действия только тогда, когда есть разница.
Еще одна проблема, с которой мы столкнемся, - это то, как мы превратим int, возвращаемый функцией analogRead, в качестве входных данных. Поскольку нет простого способа превратить int в строку, нам придется использовать само int. Однако, если вы просто напишите Keyboard.press (int), вы заметите, что ввод не будет тем, что вы хотели, и вместо этого будет нажата другая клавиша.
Это потому, что все клавиши вашей клавиатуры закодированы как целые числа, и каждая клавиша имеет свой индекс. Чтобы правильно использовать ключ num, вам нужно будет найти их индекс в таблице ASCII:
Как вы можете видеть, цифровые клавиши начинаются с индекса 48. Итак, чтобы нажать правильную клавишу, все, что нам нужно сделать, это добавить значение шкалы к 48. Десятичные значения и единицы измерения - это отдельные нажатия.
Наконец, нам нужен способ, чтобы значение не прыгало вперед и назад. Потому что, если вы попытаетесь использовать циферблат с map (val0, 0, 1023, 0, 100), вы обнаружите, что результаты будут очень нестабильными. Подобно тому, как мы отклоняли кнопки, мы исправим это, пожертвовав некоторой точностью. Я обнаружил, что сопоставление его с 1-20, а затем умножение значения аргументов на 5 является приемлемым компромиссом.
Чтобы подключить потенциометр, просто подключите провод 5 В, провод заземления и провод аналогового входа, и проблем быть не должно.
Интересный факт: если вы используете этот ярлык, когда выбран такой инструмент, как Лассо, вместо этого он изменит непрозрачность слоя. На что стоит обратить внимание.
Шаг 4: поворотный энкодер
Поворотные энкодеры немного похожи на потенциометры, но без ограничения на то, на сколько они могут поворачиваться. Вместо аналогового значения мы будем смотреть на направление вращения энкодера в цифровом виде. Я не буду вдаваться в подробности того, как они работают, но вам нужно знать, что он использует два входных контакта на Arduino, чтобы определить, в каком направлении он поворачивается. С поворотным энкодером может быть сложнее работать, для разных энкодеров могут потребоваться разные настройки. Чтобы упростить задачу, я купил одну с печатной платой, которая готова к подключению с помощью штифтов. Теперь код:
#включают
// Круговой энкодер #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) {если (каталог> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// поместите сюда ваш основной код для повторного запуска: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } else {// счетчик -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(counter); } aLastState = aState; }
По умолчанию ярлыки Photoshop] и [увеличивают и уменьшают размер кисти. Как и раньше, мы хотим вводить их как нажатия клавиш. Кодировщик отправляет несколько входов за один ход (в зависимости от модели), и мы хотим увеличивать / уменьшать размер кисти для каждого из этих входов, чтобы вы могли очень быстро поворачивать циферблат вверх или вниз, но также иметь возможность управляйте им медленно и с большой точностью.
Как и в случае с потметром, мы хотим запускать действие только при повороте шкалы. В отличие от потенциометра, как я объяснял ранее, угловой энкодер имеет два чередующихся входа. Мы смотрим, какая из них изменилась, чтобы определить направление вращения циферблата.
Затем в зависимости от направления нажимаем правильную клавишу.
Пока у вас нет проблем с контактами, он должен работать.
Шаг 5: Собираем все вместе
Теперь перейдем к пайке. Сначала мы просверливаем два отверстия в перфорированной плате, чтобы они соответствовали двум циферблатам. Припаиваем кнопки и соответствующие им резисторы. Я просверлил два дополнительных маленьких отверстия, чтобы подводящие провода проходили сверху, чтобы сэкономить место под ними, но в этом нет необходимости. Входных проводов не так много, поэтому провода GND и 5V идут параллельно, но если вы чувствуете себя хитрым, вы можете сделать матрицу. Я припаял микроконтроллер к другой плате меньшего размера, которая помещалась под ней рядом с энкодером и потенциометром. Теперь припаиваю все провода к ProMicro. Не нужно проявлять творчества, мне просто нужно было следовать той же схеме, что и на макетной плате, но пайка в таком маленьком месте, по понятным причинам, может быть утомительной. Не будь таким, как я, используйте инструмент для зачистки проводов и хороший припой!
Наконец, вы можете сделать хороший футляр для своего нового друга по Photoshop. По крайней мере, на один лучше моего!
Но если вы хотите попробовать, используйте картон и скотч и подключите свой micro-USB.
Шаг 6: Код + демонстрация
Обязательно тестируйте программу панели управления по мере продвижения по проекту, чтобы избежать сюрпризов!
Вот полный код:
Большое спасибо за чтение!
Рекомендуемые:
Использование гитары Guitar Hero для управления масштабированием (только для Windows): 9 шагов
Использование гитары Guitar Hero для управления Zoom (только для Windows): поскольку мы находимся в разгаре глобальной пандемии, многие из нас застряли в уборке дома и присоединяются к собраниям на Zoom. Через некоторое время это может стать очень утомительным и утомительным. Убирая свой дом, я обнаружил старую гитару Guitar Hero, которую бросили в
IRduino: Пульт дистанционного управления Arduino - имитация утерянного пульта дистанционного управления: 6 шагов
IRduino: Пульт дистанционного управления Arduino - имитируйте потерянный пульт: если вы когда-либо теряли пульт дистанционного управления для своего телевизора или DVD-плеера, вы знаете, как неприятно ходить, находить и использовать кнопки на самом устройстве. Иногда эти кнопки даже не обладают той же функциональностью, что и пульт. Rece
Симулятор игры для смартфона - играйте в игры для Windows, используя IMU для управления жестами, акселерометр, гироскоп, магнитометр: 5 шагов
SmartPhone Game Simulator - играйте в игры для Windows, используя IMU управления жестами, акселерометр, гироскоп, магнитометр: поддержите этот проект: https://www.paypal.me/vslcreations, сделав пожертвование на программы с открытым исходным кодом & поддержка дальнейшего развития
Цифровой контроллер для пневматической подвески с использованием Arduino и пульта дистанционного управления для смартфона: 7 шагов (с изображениями)
Цифровой контроллер для пневматической подвески с использованием Arduino и пульта дистанционного управления для смартфона: Привет всем. В этой инструкции я попытаюсь показать вам, как создать контроллер для вашей автомобильной пневматической подвески, используя один модуль arduino + bluetooth и для удаленного любого смартфона с android +4.4, это также мой самый первый инструктаж, так что медведь ж
Отпуск кабеля дистанционного управления Olympus Evolt E510 (версия 2 с автофокусом на пульте дистанционного управления): 6 шагов (с изображениями)
Отпуск кабеля дистанционного управления Olympus Evolt E510 (версия 2 с автофокусом на пульте дистанционного управления): Вчера я построил простой пульт с одной кнопкой для своего Olympus E510. У большинства камер есть кнопка спуска затвора (та, которую вы нажимаете, чтобы сделать снимок), которая имеет два режима. Если слегка нажать кнопку, камера автоматически сфокусируется и измерит свет