From 1fd62394665934e69129d6e3cc582a8ac066e004 Mon Sep 17 00:00:00 2001 From: Brett Bender Date: Thu, 9 Feb 2023 20:50:05 -0600 Subject: [PATCH] chore: initial commit --- .gitignore | 29 +++++++++++++ .vscode/settings.json | 15 +++++++ LICENSE | 21 +++++++++ README.md | 26 ++++++++++++ lib/adafruit_debouncer.mpy | Bin 0 -> 2082 bytes lib/adafruit_hid/__init__.mpy | Bin 0 -> 423 bytes lib/adafruit_hid/consumer_control.mpy | Bin 0 -> 659 bytes lib/adafruit_hid/consumer_control_code.mpy | Bin 0 -> 354 bytes lib/adafruit_hid/keyboard.mpy | Bin 0 -> 1215 bytes lib/adafruit_hid/keyboard_layout_base.mpy | Bin 0 -> 1223 bytes lib/adafruit_hid/keyboard_layout_us.mpy | Bin 0 -> 330 bytes lib/adafruit_hid/keycode.mpy | Bin 0 -> 1729 bytes lib/adafruit_hid/mouse.mpy | Bin 0 -> 843 bytes lib/adafruit_ticks.mpy | Bin 0 -> 625 bytes main.py | 47 +++++++++++++++++++++ 15 files changed, 138 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 lib/adafruit_debouncer.mpy create mode 100644 lib/adafruit_hid/__init__.mpy create mode 100644 lib/adafruit_hid/consumer_control.mpy create mode 100644 lib/adafruit_hid/consumer_control_code.mpy create mode 100644 lib/adafruit_hid/keyboard.mpy create mode 100644 lib/adafruit_hid/keyboard_layout_base.mpy create mode 100644 lib/adafruit_hid/keyboard_layout_us.mpy create mode 100644 lib/adafruit_hid/keycode.mpy create mode 100644 lib/adafruit_hid/mouse.mpy create mode 100644 lib/adafruit_ticks.mpy create mode 100644 main.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4d6cb94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,circuitpython +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,circuitpython + +### CircuitPython ### +.Trashes +.metadata_never_index +.fseventsd/ +boot_out.txt + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,circuitpython \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c2014f0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,15 @@ +{ + "python.languageServer": "Pylance", + "python.linting.pylintEnabled": false, + "python.analysis.diagnosticSeverityOverrides": { + "reportMissingModuleSource": "none" + }, + "python.analysis.extraPaths": [ + "/Users/brett/.vscode/extensions/joedevivo.vscode-circuitpython-0.1.19-darwin-arm64/boards/0x239A/0x80F4", + "/Users/brett/.vscode/extensions/joedevivo.vscode-circuitpython-0.1.19-darwin-arm64/stubs", + "/Users/brett/Library/Application Support/Code/User/globalStorage/joedevivo.vscode-circuitpython/bundle/20230209/adafruit-circuitpython-bundle-py-20230209/lib" + ], + "circuitpython.board.version": null, + "circuitpython.board.vid": "0x239A", + "circuitpython.board.pid": "0x80F4" +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0f55269 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Brett Bender + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b03245 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +

PicoPedal

+

Made with <3 by @apollo

+ +A simple script that turns a pin into a keypress + +## Built With +- Circuit Python +- Adafruit HID +- Adafruit Debouncer +- Adafruit Ticks + +## Usage +### Wiring +| Pico Pin | Audio Jack | +| ---- | ---- | +| GP1 | LEFT/RIGHT | +| GND | GROUND | + + +## Licensing + +This project is licensed under the [MIT License](https://choosealicense.com/licenses/mit/) + +## Authors + +* [Brett Bender](https://git.brettb.xyz/apollo) \ No newline at end of file diff --git a/lib/adafruit_debouncer.mpy b/lib/adafruit_debouncer.mpy new file mode 100644 index 0000000000000000000000000000000000000000..f5933a225b5965e1ce44e3276c44951131ad902a GIT binary patch literal 2082 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 TVHK?0f0@RXHqQJ2%pc0XX@G(Y literal 0 HcmV?d00001 diff --git a/lib/adafruit_hid/keyboard_layout_base.mpy b/lib/adafruit_hid/keyboard_layout_base.mpy new file mode 100644 index 0000000000000000000000000000000000000000..7d759cf8d8c436155a41593b8bae77d895475f57 GIT binary patch literal 1223 zcmbtS&2Ac36uuWizy@0bL&g?P(-8y=*a8PrT3MB9V6Y)}u#K@I`lHJLV}ndQXc+9E z$jZesQX_TMN2s#vW&poH>^?zO>B6ei7eIM~p5aHTx~*n$=KOv4`_4H@li^GLsv4`?2DaP}+kiGn;QU>QWFd z+0=HUc6RdE$l*eVVRk0%kYT1!quld3^wN%ee+dt0;WF|%KV)4 zJE?*mTSeSr8mdw`GDo{{3mu$Mi0|22eL2G@8}Hb zX^UP6A@mMkRe#4%tR}isEI!Q!{Gk=p7v`zPnw+x@MQS!Rb|HofJ&pZhC~y=k{`mI? zjWs*X8oLA;z0%Yh{TQ8`BGo0>9TDsG7%GgPn4j>P73=DW(iN_lAbM}7KTzwI-*=E* z-G7$e_4rYb?EH#uHRq##4BrjtC&5m^8T8@h`zvNcr&4!^mXmHCMlUOX3Tb+J^J_+we&^=XS`fa2ebAuoCV8-TkE zuf5jo##-d{Wgv9D__`#k;@?+L5~UZ#=eoPz=0_UWI(zsOmERu5=_y#PDr zw1Vzn1?;_Gr2{AW79_*uVMLyxu%JhB@C&Z-<1lD|Ou{lM1O0`;NQy;g`u~M=>TcIE zOMj#0&}v{AjTvfe;9jsz76Xir%KEk33uZmkJ1W!B!I?Yxi0cu=ikr(J|FrkE??9&- YyAs8p1Pkol3Ii#Fj{eczVAMAA4_5_lT>t<8 literal 0 HcmV?d00001 diff --git a/lib/adafruit_hid/keyboard_layout_us.mpy b/lib/adafruit_hid/keyboard_layout_us.mpy new file mode 100644 index 0000000000000000000000000000000000000000..7b3398c97002fdb745dab2ddc33b92b19814a973 GIT binary patch literal 330 zcmZ=}Ws+BD43LmuV0TGONlYs$%`Az}$V}1CPOVJJPb^A_&q=JzFD;2LE!HcjOi*ZG zFX)@j&?und4VCu+OFJbNr)n`uYoO~&0*cEpi!nxq7%>Papy~+?7GySI7GoA<6q7-f z2~1{StYHvg=Ir5b5K>?eWDpl)5EEb)V~|p25L0jrcJ}m)5Al!pc8zrQcX16&W@Jce zWPkxJZ4DR`Mr(o?I`g(HSh#43$+G23*O}>>Td2#)D<~={tEj4NHr}SUeaHNk*0%PJ z&aUpB-oE|`6DLicGIiSY88c_io-b`DN1ZXRAfegQ!tVG&U=aS2H& NX&Kq|8#iqA0RU^>U9SKD literal 0 HcmV?d00001 diff --git a/lib/adafruit_hid/keycode.mpy b/lib/adafruit_hid/keycode.mpy new file mode 100644 index 0000000000000000000000000000000000000000..8a5c6318459ce9f7cb95c397ca4b4d3f7c6178e2 GIT binary patch literal 1729 zcmb7_S#ujj5XV-mCqU~Z$o zvAz4^;8OR@p#R9(t;@Zg{?^=u%j-qTXhBKKPqs$6vVhc5PfOj%XRc*Z6Ibq`sfUXH z`>E`|;&4)F>>Vop>!}>7{5^BHm^_up8`)8I?2mPn-QVsvXD_$s?YDYeo6_zD4e}G9 z&AtRee;Gve6%fX&AZo9HkgtQNzX780CWz)05awGTPQDGI^$rN@Dv0*GAnf-*IPZgS zKLD}xAqejp2>&Ax!N(xNPe3ex3ZnBFh?UPltX>DPb_3FmEpI|P=r~_MHfVZMehHbn z6MA2H<0z^vb4X2tTY?V;5*3JrY*mR%$oF^A2@3V(wj;_&XYmt**`)~ z`iAbxpP*3Hjh64~hWweg(W}2eK8mWknxBpQUm@Ez?a=>?mo0_5<^K*dmaGTes>h3E zfJb1~Q~M@~`M9p7`%NrC)^$R=h6_;eW!p3y%dxQx*`?44Brd{C!_${#S2qlPPdo}) z!)dp5JO(*edZtsu<1kxyypHbGx_(sh1Qhu7{jTL0EqoO2s?XzNY)kk!+XZ}rZ5f|r zyNFM*J&IIeIfkUO97n3MoIo-lU7tUKR8u;SB$bws>M-MarX6&BgF9{`H2~OkENiqQ zHTg(-=u0FMa;EJ|FF-m8nWod`Tni>$y&=1yi)2BrCN0V5q&B1_cY$muM8h?w!=)X7 zQSWrmb2>;aOh>(q!zGwj^SW{9K|XZHfe-h!2Ov(kR_G(GBoiWlkXB(jp1@opttBA?igYTO9+8UlbW%?ti}cK1 z%50d?Rfpu>u{b2eab?jL4xr6yr<;dPEOx0qCx4 znT8&ij3R9-LOYV*@N`mOL^{$L#l!;AKxrB2Ii-t8XO%Ko=ae#8=an*A&nsoNc34Zy z)&-@^)(c9RtzD&D@1oK&4*87H_ck0mV8Zy)O~x(`H)0n2rdbc7>!=(YZbE*Mw-Pq^1A> literal 0 HcmV?d00001 diff --git a/lib/adafruit_hid/mouse.mpy b/lib/adafruit_hid/mouse.mpy new file mode 100644 index 0000000000000000000000000000000000000000..9e09cc3223993797839d18171a1925197bf8f651 GIT binary patch literal 843 zcmY*WOHUe66uy^-JSs2)<5j^ZqEQ56&6E&V4N+{-Xj=ubq-h3(t4=#S$_!Rl+(B40 zZPHDXF1qTf+rihq&ve~&6PqsF_9wJ=fG*5U&htCxJLlXbvti7CY?>VfmQb#c+pX3_ zMc5Y$H;d((jOQvxS${U0crY=aDgd(KvnpZ{Bd9WHS1c8T0zMG)I0StFjz9!62_GN~ zlf=(zxYUXFD@PTvv^Qd;Nm}l#$vb*?1Xmqkn*~#saTCd`Lhv}n1IE6tb4CmZZsY+x zo@ExG;}wcc`ss_chFWaPhGQ-F%c+(HuwW1Y#269qstBzu-$@CJTdCCjdkr+SxpFu0 z-)$oA`bs>$w%kke00EYV$X=;pS>_GMS;Z30$(T1H)H8*gB=II>&r4$dDIp|eOx`jh zYq5NQ`99%?OS5S8=6WRT6ffajq!Htd4?hH<-VS50H#| zhO^5O#uYURGa6^s)AWdx9e@|k?ytxy2ytTrWPv!sK=U}r!>#tOM`?|-QFITvQ&W_3 zNmflEZrnyzvawl;wCTtnzpq1W(y*ICHvQ9p=#XoD4g=h{g=`aNP@lEknW>|?G_I!U zdkap{a*+&A1cSkFI6OBw2^Nz?=Uodn(ic7J zIIVen9O`^Q_duG*ObOd(S07K#uRfh#TzzhnpGzO=Cse+#pHlg*-krm6XgIPz-^W-| z6T`^IlGpy}>CQek)HL0S(&$pBaB;3~-)^Ne<792*EpYc0#ZrLOsm>h+{z5Hch#2V6 Jtp!n5{sC&e^*R6m literal 0 HcmV?d00001 diff --git a/lib/adafruit_ticks.mpy b/lib/adafruit_ticks.mpy new file mode 100644 index 0000000000000000000000000000000000000000..75c902d70199db222642ddff96f1e7f49fb1bc82 GIT binary patch literal 625 zcmYk3QESss6vt1JWl4*;5>0vuBg@Hf5XAdo62;2`=G-j`+bXQ6uv+IYnlW{0 zt0JdiFTkA26iyLZrm&4sem$1al&QgCVdDk0@3HK~Ueu4$s2_TypXEy|b&34nbXCp- z*Wj_VRiDmML9YuJ%{y$Ig8rEqUSN26hP#HqFb;OIW6WWc|4G~T4H1{~!VfzgV}4rg z1xeEKxcTHsH%$l0V_kn2rrqJ&h8Okp>8|x>)1_~QvB#G09Hd>gy8Hv0y7+Sf0^9O@oGs~5b1|1 zoSa^2pD3m9hlLg=V~c*Um$pZiRxU}DS`QvF)73S4ex{8w_vLk+S6Am}jJ`3U*Yl6z VXv%Gg9$SD4C#NP)e=tX(@E2Nu!VCZa literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..250e986 --- /dev/null +++ b/main.py @@ -0,0 +1,47 @@ +from adafruit_hid.keycode import Keycode +from adafruit_hid.keyboard import Keyboard +from adafruit_debouncer import Debouncer +import usb_hid +import digitalio +import board + +############# WIRING ############# +# +# GND <-> Audio Jack Ground +# GP1 <-> Audio Jack Left/Right +# +########### END WIRING ########### + + +############# CONFIG ############# +keycodePress = Keycode.D +readPin = board.GP1 + +########### END CONFIG ########### + + +######## SYSTEM VARIABLES ######## +# Keyboard +kbd = Keyboard(usb_hid.devices) + +# Button/Switch +pin = digitalio.DigitalInOut(readPin) +pin.direction = digitalio.Direction.INPUT +pin.pull = digitalio.Pull.UP +switch = Debouncer(pin, interval=0.05) +###### END SYSTEM VARIABLES ###### + +### BEGIN PROGRAM ### +# Clean up any left over keypresses, sometimes they happen +kbd.release_all() + +print("Starting program") +print("Waiting for pedal input") +while True: + switch.update() + if switch.rose: + print("releasing button") + kbd.release(keycodePress) + if switch.fell: + print("pressing button") + kbd.press(keycodePress)