Obsah:
- Krok 1: Prototypování ovládacího panelu
- Krok 2: Stiskněte tlačítka
- Krok 3: Potenciometr
- Krok 4: Rotační kodér
- Krok 5: Dát to všechno dohromady
- Krok 6: Kód + ukázka
Video: Mini Control Pad pro Photoshop (Arduino): 6 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Zde vám ukážu, jak vytvořit malý nástroj, který vám pomůže pracovat ve Photoshopu rychleji!
Klávesnice speciálně vyrobené pro PS nejsou nové, ale nenabízejí přesně to, co potřebuji. Jako malíř trávím většinu času ve Photoshopu úpravou nastavení štětce a myslím si, že jednoduchá zkratková tlačítka mi nedávají ovládací prvky, které by odpovídaly mému pracovnímu postupu. Rozhodl jsem se tedy vytvořit vlastní klávesnici, malou, nenápadnou a s číselníky, které mi poskytnou analogovou interakci, kterou jsem vždy chtěl.
Způsob, jakým to funguje, je jednoduchý: Aby mikrokontrolér komunikoval s Photoshopem, využíváme výchozí zkratky. S deskou, kterou počítač dokáže číst jako klávesnice/myš, stačí, když použijeme několik jednoduchých řádků kódu a řekneme počítači, aby přečetl každý vstup jako kombinaci stisknutí kláves. Nyní je tlačítko zpět pouhé stisknutí tlačítka!
Začněme! Pro tento projekt budete potřebovat:
- 1 Sparkfun ProMicro (nebo Arduino Leonardo, nedoporučeno)
- 1 adaptér micro-USB
- 6 tlačítek (nebo libovolné číslo, které se vám líbí)
- Rezistory 10k Ohm (1 pro každé tlačítko)
- 1 potenciometr
- 1 rotační kodér
- dráty, breadboard, perfboard, pájka, kolíkové kolíky atd.
Pro tento projekt můžete použít Arduino Leonardo, ale ProMicro je mnohem levnější alternativou, která používá stejný čip atmega32u4, má více pinů a přichází v mnohem menší formě, takže je ideální pro klávesnici.
K naprogramování ProMicro v Arduino IDE budete možná muset nejprve nastavit některé věci. Více si o tom můžete přečíst v příručce SparkFun:
Pokud má váš počítač potíže s nalezením zařízení, ujistěte se, že používaný micro-USB není napájen a podporuje přenos dat.
Toto je můj první projekt Arduino a je vhodný pro začátečníky.
Krok 1: Prototypování ovládacího panelu
Doporučuji nejprve vyzkoušet svůj program na prkénku, než začnete pájet.
Zde můžete vidět mé schéma.
Tlačítka 1 a 2 budou Undo a Redo, 3 až 5 jsou pro nástroje Brush, Eraser a Lasso, tlačítko 6 je rychlé tlačítko Save. Kodér a potmetr ovládají velikost a opacitu.
Všimněte si, že jsem levák a navrhl jsem rozložení způsobem, který je pro mě nejpohodlnější. Podívejte se na okamžik, kdy použijete prkénko, jako příležitost přemýšlet o tom, jaké funkce by měl mít váš ovladač, co vám nejlépe vyhovuje a případně, jestli k jeho výrobě budete potřebovat další díly.
Krok 2: Stiskněte tlačítka
Tlačítka jsou nejjednodušší na implementaci. Podívejme se na kód:
#zahrnout
konstantní tlačítka = {2, 3, 4, 5, 6, 7, 8, 9}; // pole všech kolíků tlačítek char ctrlKey = KEY_LEFT_GUI; // použijte tuto možnost pro Windows a Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// sem vložte svůj instalační kód, aby se spustil jednou: Serial.begin (9600); Keyboard.begin (); // Buttons - smyčka v poli a kontrola stisknutí pro (int i = buttons [0]; i <(sizeof (buttons)/sizeof (buttons [0]))+buttons [0]; ++ i) { pinMode (i, VSTUP); }} boolean readButton (int pin) {// tlačítka pro kontrolu a odskoku if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// provádění úkolů switch (pin) {// ---- Shortcuts ---- // Undo case 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; // Znovu použít případ 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; // Pouzdro štětce 6: Keyboard.press ('b'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; // Pouzdro gumy 7: Keyboard.press ('e'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; // Pouzdro Lasso 8: Keyboard.press ('l'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; // Uložení případu 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("vstup"); Serial.println (pin); zpoždění (200); Keyboard.releaseAll (); přestávka; výchozí: Keyboard.releaseAll (); přestávka; }}
prázdná smyčka () {
// sem vložte svůj hlavní kód, aby se spustil opakovaně:
for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Obnovit modifikátory Keyboard.releaseAll ();
}
Jsou celkem přímočaré. Aby počítač rozpoznal stisknutí tlačítka jako stisknutí klávesy, jednoduše použijeme funkci Keyboard.press (). Chcete -li tedy aktivovat zkratku Zpět (ctrl+z), jednoduše použijeme Keyboard.press (ctrlKey) a poté Keyboard.press ('z'). Pro přístup k těmto funkcím budete muset zahrnout Keyboard.h a inicializovat klávesnici.
Vstupní piny jsou uloženy v poli, takže je můžete ve funkci loop () snadno procházet všemi. Jeden snadný způsob přístupu a délky pole v jazyce C ++ vydělením velikosti celého pole prvkem pole plus jedním prvkem. Procházíme všemi tlačítky, abychom zkontrolovali, zda bylo stisknuto.
Aby byly věci organizované, uložil jsem všechny akce svého tlačítka do příkazu switch funkce, která jako argument bere číslo PIN.
Pokud chcete, aby vaše tlačítka dělala různé věci, nebo chcete přidat další tlačítka, jednoduše upravte obsah funkce doAction!
Kvůli tomu, jak fungují fyzická tlačítka, je budeme muset zrušit. To má zabránit programu, aby přečetl jakékoli nežádoucí stisknutí způsobené pružností tlačítek. Existuje mnoho způsobů, jak toho dosáhnout, ale přidal jsem jednoduchou funkci readButton (), která se o to stará.
Stačí zapojit tlačítka pomocí 10k rezistorů a měli byste být zlatí!
Krok 3: Potenciometr
Nyní k potmetru:
#zahrnout
int dial0 = 0; void setup () {// sem vložte svůj instalační kód, aby se spustil jednou: Serial.begin (9600); Keyboard.begin (); // Vytáčí číselník = analogRead (0); dial0 = mapa (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Opacity case 0: delay (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int jednotka = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("maximální vytáčení 1"); } else {decim = constrain (decim, 0, 9); jednotka = omezení (jednotka, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+jednotka); }} dial0 = newVal; přestávka; výchozí: break; }} // ------------------ HLAVNÍ Smyčka ------------------------- neplatné loop () {// sem vložte svůj hlavní kód, aby se spustil opakovaně: // Opacity // delay (500); int val0 = analogRead (0); val0 = mapa (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Udělejte něco dialAction (0, val0, dial0); }}
Potmetr se řídí stejnou logikou, ale je trochu záludnější.
Nejprve se podívejme na to, jak chceme, aby fungoval: Photoshop má několik šikovných zkratek, které mění krytí štětce. Pokud stisknete libovolnou klávesu num, krytí se bude rovnat tomuto číslu*10. Pokud ale stisknete dvě čísla, druhé číslo se načte jako jednotka, což vám poskytne přesnější ovládání.
Chceme tedy, aby náš potmetr zmapoval rotaci na procenta, ale nechceme to dělat pořád, protože by to bylo hloupé. Chceme změnit opacitu pouze při otáčení potenciometrem. Uložíme tedy další hodnotu, kterou porovnáme s hodnotou analogRead (), a akční skript spustíme pouze v případě rozdílu.
Dalším problémem, na který narazíme, je to, jak otočíme analogový návrat int jako vstup. Protože neexistuje snadný způsob, jak převést int na řetězec, budeme muset použít samotný int. Pokud však jednoduše napíšete Keyboard.press (int), všimnete si, že vstup nebude takový, jaký jste chtěli, a místo toho se stiskne další klávesa.
Důvodem je, že všechny klávesy vaší klávesnice jsou kódovány jako celá čísla, přičemž každá klávesa má svůj vlastní index. Chcete -li správně použít klíč num, budete muset vyhledat jejich index v tabulce ASCII:
Jak vidíte, klávesy num začínají na indexu 48. Abychom tedy stiskli správnou klávesu, budeme muset pouze přidat hodnotu číselníku na 48. Desetinná a jednotková hodnota jsou samostatná stisknutí.
Nakonec potřebujeme způsob, jak zabránit skákání hodnoty tam a zpět. Protože když zkusíte použít číselník s mapou (val0, 0, 1023, 0, 100), zjistíte, že výsledky jsou velmi nervózní. Podobně, jako jsme odstranili tlačítka, to vyřešíme obětováním určité přesnosti. Zjistil jsem, že mapování na 1-20 a poté vynásobení hodnoty argumentů 5 je přijatelný kompromis.
Pro připojení potenciometru stačí připojit 5V vodič, zemnící vodič a analogový vstupní vodič a neměly by být žádné problémy.
Zábavný fakt: pokud tuto zkratku použijete, když je vybrán nástroj jako Lasso, místo toho změní krytí vrstvy. Něco k zapamatování.
Krok 4: Rotační kodér
Rotační kodéry jsou trochu jako potenciometry, ale bez omezení, jak moc se mohou otáčet. Namísto analogové hodnoty se podíváme na směr otáčení kodéru digitálně. Nebudu se příliš rozepisovat o tom, jak tyto funkce fungují, ale potřebujete vědět, že používá dva vstupní piny na Arduinu, aby zjistil, kterým směrem se točí. S rotačním kodérem lze pracovat obtížněji, různé kodéry mohou vyžadovat různá nastavení. Aby to bylo jednodušší, koupil jsem jeden s PCB, které jsou připraveny k zaháknutí za ženské kolíky. Nyní kód:
#zahrnout
// Rotační kodér #definovat výstupA 15 #definovat výstupB 14 int čítač = 0; int aState; int aLastState; void setup () {// sem vložte svůj instalační kód, aby se spustil jednou: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Přečte počáteční stav outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ HLAVNÍ SMYČKA ------------------------- prázdná smyčka () {// sem vložte svůj hlavní kód, aby se spustil opakovaně: // Velikost aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotační akce (1); } else {// counter -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(Counter); } aLastState = aState; }
Ve výchozím nastavení Photoshop] a [zkratky zvětšují a zmenšují velikost štětce. Stejně jako dříve je chceme zadat jako stisknutí kláves. Kodér odešle několik vstupů za otáčku (což závisí na modelu) a my chceme zvětšit/zmenšit velikost štětce pro každý z těchto vstupů, takže můžete otáčet číselníkem nahoru nebo dolů opravdu rychle, ale také můžete ovládejte to pomalu s velkou přesností.
Stejně jako u potmetru chceme akci spustit pouze při otáčení číselníku. Na rozdíl od potmetru, jak jsem vysvětlil dříve, má rotační kodér dva střídavé vstupy. Podíváme se, který z nich se změnil, abychom zjistili směr otáčení číselníku.
Poté podle směru stiskneme správnou klávesu.
Dokud nemáte problémy s kontakty, mělo by to fungovat.
Krok 5: Dát to všechno dohromady
Nyní k pájení. Nejprve do perfboardu vyvrtáme dva otvory, aby se vešly na dva ciferníky. pájíme tlačítka a jejich příslušné odpory. Vyvrtal jsem dva extra malé otvory, aby nechaly vstupní vodiče nahoře, aby se ušetřilo místo pod nimi, ale to není nutné. Vstupních vodičů není mnoho, takže vodiče GND a 5V běží paralelně, ale pokud se cítíte chytře, možná budete chtít vytvořit matici. Mikrokontrolér jsem připájel k jiné, menší perfboardové desce, která se vešla pod kodér a potmetr. Nyní připájím všechny vodiče k ProMicro. Není třeba být kreativní, jen jsem se musel řídit stejným schématem jako na prkénku, ale pájení na tak malém místě může být pochopitelně únavné. Nebuďte jako já, použijte odizolovač a dobrou pájku!
Nakonec možná budete chtít vytvořit pěkné pouzdro pro svého nového kamaráda Photoshopu. Alespoň jeden lepší než ten můj!
Pokud to ale chcete vyzkoušet, použijte karton a pásku a zapojte micro-USB.
Krok 6: Kód + ukázka
Nezapomeňte vyzkoušet program ovládacího panelu, jak se pohybujete v projektu, abyste předešli překvapením!
Zde je kompletní kód:
Děkuji moc za přečtení!
Doporučuje:
Ruční ovladač zkratek (pro Photoshop + další) [Arduino]: 4 kroky
Ruční ovladač zástupců (pro Photoshop + další) [Arduino]: Minule jsem vytvořil malou ovládací podložku pro použití ve Photoshopu. Dokázalo to zázraky a stále to používám! Ale je to také poměrně omezené, s pouhými pěti tlačítky a užitečnými knoflíky velikosti a neprůhlednosti. Stále jsem se přistihl, že hodně sahám po klávesnici … Takže
Použijte 1 analogový vstup pro 6 tlačítek pro Arduino: 6 kroků
Použijte 1 analogový vstup pro 6 tlačítek pro Arduino: Často jsem přemýšlel, jak bych mohl pro svůj Arduino získat více digitálních vstupů. Nedávno mě napadlo, že bych měl být schopen použít jeden z analogových vstupů pro zavedení více digitálních vstupů. Rychle jsem hledal a zjistil, kde jsou lidé
Nejlevnější Arduino -- Nejmenší Arduino -- Arduino Pro Mini -- Programování -- Arduino Neno: 6 kroků (s obrázky)
Nejlevnější Arduino || Nejmenší Arduino || Arduino Pro Mini || Programování || Arduino Neno: …………………………. Přihlaste se k odběru mého YouTube kanálu pro další videa ……. .Tento projekt je o tom, jak propojit nejmenší a nejlevnější arduino vůbec. Nejmenší a nejlevnější arduino je arduino pro mini. Je to podobné jako arduino
Jednoduchá tapeta používající fotografii a prolínání vrstev - návod pro Photoshop: 5 kroků
Jednoduchá tapeta využívající fotografii a prolínání vrstev - Photoshop Tutorial: Vytvořte vizuálně ohromující tapetu pomocí jednoduché techniky uvnitř photoshopu. Kdokoli může udělat tapetu tak dobrou a je mnohem jednodušší, než byste si mohli myslet! Nejprve tedy přejděte do souboru > Novinka Nastavte šířku a výšku na pixely a nastavte na
Pre-Viz a Photoshop Compositing pro sváteční kartu: 19 kroků
Pre-Viz a Photoshop Compositing pro sváteční kartu: Vrstvy a masky vrstev Photoshopu usnadňují vytváření digitálních fotografických ilustrací. Ale stále to chce trochu cviku, pokusů a omylů, pomlčku nahlédnutí do příruček nebo návodů a čas. Skutečným klíčem je však předběžná vizualizace