From 28714a3ead09607b0ed5c9dde0e384576f47adee Mon Sep 17 00:00:00 2001 From: Tropicananass Date: Sat, 11 Apr 2020 16:14:35 +0200 Subject: [PATCH] Control surface lib portage --- .gitignore | 68 +++- .pioenvs/.sconsign.dblite | Bin 93492 -> 0 bytes .pioenvs/micro/firmware.elf | Bin 27092 -> 0 bytes .pioenvs/micro/firmware.hex | 587 ------------------------------ .pioenvs/structure.hash | 1 - platformio.ini | 14 + res/doc/MidiKeyboard.fzz | Bin 0 -> 62849 bytes res/doc/{Midi.fzz => MidiUno.fzz} | Bin {lib => src}/Keyboard.cpp | 0 {lib => src}/Keyboard.h | 0 src/main.cpp | 76 ++-- src/main.cpp.bak3 | 211 +++++++++++ 12 files changed, 330 insertions(+), 627 deletions(-) delete mode 100644 .pioenvs/.sconsign.dblite delete mode 100755 .pioenvs/micro/firmware.elf delete mode 100644 .pioenvs/micro/firmware.hex delete mode 100644 .pioenvs/structure.hash create mode 100644 res/doc/MidiKeyboard.fzz rename res/doc/{Midi.fzz => MidiUno.fzz} (100%) rename {lib => src}/Keyboard.cpp (100%) rename {lib => src}/Keyboard.h (100%) create mode 100644 src/main.cpp.bak3 diff --git a/.gitignore b/.gitignore index 14b117c..3060fee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,66 @@ -# ---> C++ -# Compiled Object files -*.slo -*.lo +# ---> C +# Prerequisites +*.d + +# Object files *.o +*.ko *.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp # Precompiled Headers *.gch *.pch -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a +# Libraries *.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib # Executables *.exe *.out *.app +*.i*86 +*.x86_64 +*.hex +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +# Platformio +.pio +.pioenvs +.piolibdeps + +# VSCode +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch +.vscode +*.code-workspace diff --git a/.pioenvs/.sconsign.dblite b/.pioenvs/.sconsign.dblite deleted file mode 100644 index 18b001ecf72aef34d5e682d684a3e39ed5b0cee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93492 zcmeHw2YejYalULx7DchCH%g)?N`l0K?L|~0!6H%wNs%~p7~aZ-2m*WyPn8 z$=Kui8XNkPiG5N3xHpw}e1x z-+22}G#*Cbmht@urgj{d!spQEjy&RsjKrPTJiBA#ShO!1pIVay!NmSMM$%}{e0)II z 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 S752HB>=QL?@xL_(*8D#r$Fx=e diff --git a/.pioenvs/micro/firmware.elf b/.pioenvs/micro/firmware.elf deleted file mode 100755 index cc5844f73df2687880e9e97c9d495a6126f3beac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27092 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 z zR~F|Kng1JA-XvS4RSC;mX&PY~o9b%{%F7EM$df4%lath(G!s*1t+H&CE!fiFGsrD8 z)z@QG7B^ZNn`Cxmk{ig}q1{YvQ=@$SFH`f)X1p{s8%-HLzG(F*t0Wzcor zGzXYIQw=$-n@5M%e=BlUt+;8X ziW3!?KMpQ^u+hXKGSo;K+){(n(-@q;kRJ?9qJsCu>(7Rb)$rPQHr9*JN+~25wLw_X z8Q?z|*iAJZqA-RUEaVIoHBAP51ZF4`Hj*~@cPzxMB~2A(OTDG0!ioeUydkOtJJoek z46RG0FiNGvuK%Y?__u?Q6wcCc{`Ip&oO9v~OS+^Wj<$r;!V$p;daoqCPa=xW&FGqj zAD!V*eso?s<2LdCrw35Dr2J+AQP?Qbf*g*_hAxVuAAOgCWBj4(F65Ungocj1h4)}m z-V|+zoKGf4b)xH0{N!>Ox8qzNXW7yv#n}{c_~#YOQJf!3mn64dAvYc$<;)k9DN0Im zPK8`yCc`{_6FJg>jAq7FFwAx_E8#BXM^8!T6!Bg*!_?snm71~^KRTzSBUY-iJiqjn LXopPEQhxsze3BWr diff --git a/.pioenvs/micro/firmware.hex b/.pioenvs/micro/firmware.hex deleted file mode 100644 index ab8bbcf..0000000 --- a/.pioenvs/micro/firmware.hex +++ /dev/null @@ -1,587 +0,0 @@ -:100000000C94EA000C9412010C9412010C9412014D -:100010000C9412010C9412010C9412010C94120114 -:100020000C9412010C9412010C94D00B0C941D062C -:100030000C9412010C9412010C9412010C941201F4 -:100040000C9412010C9412010C9412010C941201E4 -:100050000C9412010C9412010C9412010C94A9043A -:100060000C9412010C9412010C9412010C941201C4 -:100070000C9412010C9412010C9412010C941201B4 -:100080000C9412010C9412010C9412010C941201A4 -:100090000C9412010C9412010C9412010C94120194 -:1000A0000C9412010C9412010C9412015109540980 -:1000B000430947094D0975097509750958095C090E -:1000C000600966096A0975097009000000002400CA -:1000D00027002A002D003000000000002300260029 -:1000E00029002C002F00070605040100080A0B0C4C -:1000F0000D0900000000250028002B002E00310013 -:1001000004040404040304050202020204030202BC -:10011000020206060606060604040202020404049D -:1001200008020110408040102040804080080204F6 -:10013000018040201002011080102040402000006B -:10014000000200090F0000030401000C0000000081 -:1001500000000000000000000000000000080B008C -:10016000020202010009040000010202000005244D -:1001700000100105240101010424020605240600E3 -:10018000010705810310004009040100020A000074 -:10019000000705020240000007058302400000043A -:1001A00003090412010002EF02014041233700005D -:1001B000010102030141726475696E6F204C4C436A -:1001C0000041726475696E6F204D6963726F000043 -:1001D000190F810C11241FBECFEFDAE0DEBFCDBFB7 -:1001E00012E0A0E0B1E0EEE1F3E202C005900D9272 -:1001F000A837B107D9F725E0A8E7B2E001C01D9202 -:10020000A636B207E1F710E0C9EED0E004C02197AE -:10021000FE010E944F10C83ED107C9F70E94D60CBC -:100220000C9482110C9400000F931F93CF93DF93D3 -:10023000EC012B8988E0289F9001112421153105BC -:1002400029F0C90107976817790728F0295F3F4F00 -:100250002617370730F483E0769567958A95E1F79E -:100260006B8B1B8988898117F9F03C81E0910E0422 -:10027000F0910F04828193814A8941502A81329FF3 -:10028000400D1124012F0F775B812989359F200DA7 -:1002900011242F774F70DC01ED91FC910480F581E2 -:1002A000E02D60EB0995188BDF91CF911F910F9195 -:1002B0000895FC0175876487089580E00895089586 -:1002C00008950F93DC01ED91FC910480F581E02D00 -:1002D00000E009950F910895FC01928183896917C7 -:1002E00010F0982F04C0962F96959695969589179D -:1002F000A9F00188F289E02DE90FF11D97FDFA952B -:10030000677081E090E001C0880F6A95EAF720816C -:10031000282381E090E021F480E0089580E090E0DF -:100320000895DC0112963C91129753962C91631715 -:1003300010F0E22F04C0E62FE695E695E6952E171D -:1003400019F10E2E000CFF0BDC0151962D913C9102 -:1003500052976770E20FF31F21E030E002C0220FD6 -:10036000331F6A95E2F7442319F03081232B04C030 -:1003700020953095308123232083DC01ED91FC9181 -:100380000484F585E02D09940895E0917A02F091B6 -:100390007B02309741F09381891740F0948189174F -:1003A00028F4CF01089580E090E008950580F6815B -:1003B000E02DEFCFCF93C82F8B3258F5823108F064 -:1003C000C251EC2FF0E0EA51FF4FE49180917B00A5 -:1003D000E3FB222720F930E095E0220F331F9A95A6 -:1003E000E1F78F7D282B20937B00E770E064E0939A -:1003F0007C0080917A00806480937A0080917A00FA -:1004000086FDFCCF809178002091790090E0922BBE -:1004100013C00E94C501009769F0DC0113962C916E -:1004200013976C2F621BED91FC910680F781E02DF4 -:10043000CF91099480E090E0CF910895CF93DF931E -:10044000EC0189850E94DA012E853F8544E0880F02 -:10045000991F4A95E1F7821B930B95958795959582 -:100460008795280F391F3F872E87285F3F4FC90187 -:1004700064E0959587956A95E1F7EC85FD85309761 -:1004800009F00995E881F9810680F781E02DBC012A -:10049000CE01DF91CF910994CF93DF938B3208F097 -:1004A00039C090E0FC01E15EFE4F2491FC01E05078 -:1004B000FF4F8491882309F442C090E0880F991F70 -:1004C000FC01E653FF4FC591D491FC01EE50FF4F64 -:1004D000A591B491611109C09FB7F89488812095C6 -:1004E00082238883EC912E230BC0623061F49FB786 -:1004F000F8948881322F309583238883EC912E2BBA -:100500002C939FBF1CC08FB7F894E8812E2B2883B3 -:100510008FBF15C0D62FC82F0E94C501009779F054 -:10052000DC0113962C9113976C2F621BED91FC91BB -:100530000190F081E02D4D2FDF91CF910994DF9153 -:10054000CF910895CF93DF93EC0161E08C850E94F9 -:100550004C0261E08D850E944C0261E08E850E9414 -:100560004C02E881F9810684F785E02DCE01DF9108 -:10057000CF910994642FFC0181850C944C020F9358 -:100580001F93CF938C01C0E08C2F90E0F80126855B -:1005900037858217930758F422853385F901E80FD0 -:1005A000F91F61E080810E944C02CF5FEDCFCF91B7 -:1005B0001F910F91089508950895089508950E9438 -:1005C000761180910A0490910B040C94ED100F9316 -:1005D0001F93CF93DF9300D000D0CDB7DEB7862F27 -:1005E00090E034E0959587953A95E1F78983462B1D -:1005F0004A832B830C830EEF13E0F801838144E0E0 -:1006000050E0BE016F5F7F4F8F5F0E946C08F80162 -:1006100083818F5F0E94BA050F900F900F900F900B -:10062000DF91CF911F910F910895CF92DF92EF92BA -:10063000FF92CF93DF9300D000D0CDB7DEB780918B -:100640007C0390917D03A0917E03B0917F03409144 -:100650008003509181036091820370918303841B16 -:10066000950BA60BB70B8F739927AA27BB27892B4E -:100670008A2B8B2B09F055C0809101040E94300910 -:10068000882309F45FC0C0907C03D0907D03E09084 -:100690007E03F0907F038FEFC81AD80AE80AF80AA1 -:1006A0008FE3C822DD24EE24FF2480918003909103 -:1006B0008103A0918203B09183038C159D05AE0543 -:1006C000BF0579F1809101040E94300944E050E0B7 -:1006D000BE016F5F7F4F809101040E940109049762 -:1006E00004F180917C0390917D03A0917E03B091F1 -:1006F0007F03880F991F880F991FFC01E458FD4F55 -:1007000049815A816B817C814083518362837383E9 -:10071000C0927C03D0927D03E0927E03F0927F032F -:10072000BACF8091800390918103A0918203B09110 -:100730008303880F991F880F991FFC01E458FD4F10 -:10074000208101C020E040917C0350917D036091A5 -:100750007E0370917F038091800390918103A0912B -:100760008203B0918303481759076A077B07B9F0E2 -:100770008091800390918103A0918203B0918303C3 -:100780000196A11DB11D8F739927AA27BB278093BE -:10079000800390938103A0938203B093830381E04D -:1007A000211101C080E00F900F900F900F90DF910A -:1007B000CF91FF90EF90DF90CF900895CF93DF938C -:1007C000EC01488950E060E070E089899A890E94D4 -:1007D0007B11E881F9810484F585E02DCE01DF915C -:1007E000CF910994CF93DF93C82F8B3210F5682FE8 -:1007F00070E0FB01E25CFE4F8491FB01E15EFE4F85 -:10080000D491FB01E050FF4FC491CC2321F1811121 -:100810000E943909EC2FF0E0EE0FFF1FE852FF4F66 -:10082000A591B491EC91ED2381E090E0B1F480E0EA -:1008300014C00E94C501009771F0DC0113962C9141 -:1008400013976C2F621BED91FC910480F581E02DD4 -:10085000DF91CF91099480E090E0DF91CF910895EE -:100860000F931F93CF93DF93EC018B01FB018081EA -:100870000E94F20321E0892B09F420E0F801818134 -:10088000F22FF81BFF3F69F53FB7F8948091E8031A -:100890009091E903A091EA03B091EB033FBF4E852D -:1008A0005F8568897989841B950BA60BB70B4E89E8 -:1008B0005F89688D798D481759076A077B0710F59E -:1008C0003FB7F8948091E8039091E903A091EA037F -:1008D000B091EB033FBF8E879F87A88BB98B81E0D8 -:1008E00012C0F13079F43FB7F8948091E803909109 -:1008F000E903A091EA03B091EB033FBF8E879F8786 -:10090000A88BB98B80E0F8012183DF91CF911F91F3 -:100910000F910895CF93DF93EC018889815068236C -:10092000CE010E94760B89850E94DA018985DF91CC -:10093000CF910C94DA01CF93DF93EC018889815039 -:100940006823CE010E94760B8985DF91CF910C94AC -:10095000F2031F920F920FB60F9211242F933F9321 -:100960008F939F93AF93BF938091E8039091E90396 -:10097000A091EA03B091EB033091E70323E0230F4A -:100980002D3720F40196A11DB11D05C026E8230FC7 -:100990000296A11DB11D2093E7038093E803909375 -:1009A000E903A093EA03B093EB038091EC039091E9 -:1009B000ED03A091EE03B091EF030196A11DB11DCF -:1009C0008093EC039093ED03A093EE03B093EF03B9 -:1009D000BF91AF919F918F913F912F910F900FBE3B -:1009E0000F901F901895CF93DF938B3220F4DF91F7 -:1009F000CF910C947609D62FC82F0E94C50100977D -:100A000079F0DC0113962C9113976C2F621BED91FA -:100A1000FC910280F381E02D4D2FDF91CF9109945D -:100A2000DF91CF910895BF92CF92DF92EF92FF9224 -:100A30000F931F93CF93DF93C82ED62EB42EC7E00B -:100A4000D0E0022F10E087E0E82EF12CB11005C0B5 -:100A5000C7018C1B9D0BB80102C0B8018C2F02C0CE -:100A6000759567958A95E2F761708C2D0E94F30465 -:100A700061E08D2D0E94F30460E08D2D0E94F3044F -:100A8000219720F7DF91CF911F910F91FF90EF9069 -:100A9000DF90CF90BF9008951F93CF93DF93EC0129 -:100AA00060E08E850E94F3048F85811110C010E0F4 -:100AB00088891817E8F4E989FA89E10FF11D208186 -:100AC00040E06D858C850E9413051F5FF1CF18896A -:100AD000115017FD0DC0E989FA89E10FF11D17FDCD -:100AE000FA95208141E06D858C850E941305F0CF39 -:100AF00061E08E85DF91CF911F910C94F3044091BA -:100B0000F3035091F4032091F1033091F203421763 -:100B10005307B4F49091E8009570E1F39091E800E8 -:100B200092FD19C08093F1008091F3039091F4033A -:100B300001968F739927892B19F48EEF8093E80023 -:100B40008091F3039091F40301969093F4038093C2 -:100B5000F30381E0089580E00895615030F0209122 -:100B6000F100FC0120830196F8CF289A84E6809357 -:100B7000F70308958093E9008091F200882319F02B -:100B80008AE38093E8000895DF92EF92FF920F933B -:100B90001F93CF93DF93D82E8A017B01E40EF51EBD -:100BA000EB01CE15DF0571F0D7FE03C0FE01849185 -:100BB00001C088810E947F0521968111F2CF8FEFBD -:100BC0009FEF01C0C801DF91CF911F910F91FF905E -:100BD000EF90DF9008950F931F93CF93DF931F92B1 -:100BE000CDB7DEB782E0898342E450E06DE571E085 -:100BF00080E80E94C4050E94BC0BDC0112960D9196 -:100C00001C9113970115110589F0D801ED91FC9104 -:100C10000280F381E02DBE016F5F7F4FC80109950F -:100C200097FD04C0F80100851185ECCF89810F90F4 -:100C3000DF91CF911F910F9108951F920F920FB6E0 -:100C40000F921124CF92DF92EF92FF920F931F9396 -:100C50002F933F934F935F936F937F938F939F93C4 -:100C6000AF93BF93EF93FF93CF93DF93CDB7DEB7EF -:100C70006C97DEBFCDBF1092E9008091E80083FF42 -:100C8000FBC168E0CE0145960E94AD0582EF8093DE -:100C9000E8008D8987FF05C09091E80090FFFCCFA8 -:100CA00003C09EEF9093E800982F907609F0C6C09D -:100CB0009E894F89588D2F89F88C91110CC08038EE -:100CC00029F48091F0038093F10002C01092F100AA -:100CD0001092F10045C1913051F4811141C1413070 -:100CE000510509F03DC18091F0038D7F0BC0933019 -:100CF00061F4811135C14130510509F031C1809154 -:100D0000F00382608093F0032BC1953049F4809109 -:100D1000E80080FFFCCF822F80688093E30020C131 -:100D2000963009F05EC00B8D1C8D22E01092E90018 -:100D30001092F4031092F303F21232C01092F203F5 -:100D40001092F1030E94EB0599E0BE016F5F7F4FA7 -:100D5000DB01E92F1D92EA95E9F79983FA8291E088 -:100D60009E8390EA98879AEF99872091F3033091B8 -:100D7000F403275F3F4F3C832B838D831092E90060 -:100D80001092F4031092F3031093F2030093F10313 -:100D900049E050E080E00E94C4050E94EB05E0C0FD -:100DA0001093F2030093F1030E94BC0BDC01129636 -:100DB0000D911C9113970115110509F4BBC0D801C1 -:100DC000ED91FC910480F581E02DBE016B5E7F4FBB -:100DD000C8010995009709F0C7C0F8010085118581 -:100DE000EACF973009F445C1983021F481E080932F -:100DF000F100B6C0993009F0B3C0837009F039C171 -:100E0000EEE0F1E081E031E096E32081211109C0BC -:100E10008EE78093EA001092EA008F898093F903AD -:100E20009FC08093E9003093EB0021912093EC0068 -:100E30009093ED008F5F873041F7EACF8B8D9C8DCB -:100E40001092E9001092F4031092F3039093F203CE -:100E50008093F103898D811153C08E899D89913AC8 -:100E600049F4813209F005C147E050E065E071E0E6 -:100E700080E0BBC0913209F0FCC0833269F48F89F5 -:100E8000988DA0E0B0E08093010190930201A093BF -:100E90000301B093040164C0803269F48091E800DA -:100EA00082FFFCCF67E085E091E00E94AD058BEF0B -:100EB0008093E80055C0823209F052C08F89809338 -:100EC0000C01EEEFFFE7859194918B3F9C4D19F05B -:100ED000E0E0F8E002C0EEEFFAE0809105019091C9 -:100EE0000601A0910701B0910801803B9440A10543 -:100EF000B10509F09EC080910C0180FF79C099C0B6 -:100F00000E94BC0BFC01028113810115110509F43B -:100F1000B0C0D801ED91FC910190F081E02DBE01AF -:100F20006B5E7F4FC801099581111AC0F8010085D9 -:100F30001185EBCFF1E0FF1609F44EC0F3E0FF128C -:100F400098C08F89882309F44AC0823089F440E828 -:100F50006DE081EC91E00E94AB0E882309F489C01A -:100F60008EEF8093E80088C018161906CCF381C074 -:100F7000813029F440E86BE085EB91E0ECCF8330E1 -:100F800009F077C00E94BC0BDC011296ED90FC903A -:100F900013978E010F5F1F4F6801E114F10479F080 -:100FA000D701ED91FC910680F781E02DB801C701D2 -:100FB0000995080F111DF701E084F184EECFD801E7 -:100FC0001C92F60101900020E9F73197BF016C19DE -:100FD0007D0940E0C601BFCF63EA71E002C06FE95E -:100FE00071E0FB01449150E080E80E94C405B8CF55 -:100FF000EE3F2AE0F20751F0808191818737A7E721 -:101000009A0721F09093FF0A8093FE0A87E797E7FB -:1010100091838083809160008093F5039BE088E159 -:101020000FB6F894A895809360000FBE909360006F -:1010300097CF808191818737974709F091CFA89505 -:10104000809160008861809360008091F5038093B7 -:101050006000EE3FBAE0FB0739F08091FE0A909104 -:10106000FF0A918380837CCF1092FF0A1092FE0AC0 -:1010700077CF81E28093EB006C960FB6F894DEBFD9 -:101080000FBECDBFDF91CF91FF91EF91BF91AF9197 -:101090009F918F917F916F915F914F913F912F9190 -:1010A0001F910F91FF90EF90DF90CF900F900FBEA8 -:1010B0000F901F9018952FB7F89487708093E900D0 -:1010C0009091E800892F807295FF04C09091F20002 -:1010D00080E4891B2FBF08957F928F929F92AF92D9 -:1010E000BF92CF92DF92EF92FF920F931F93CF9315 -:1010F000DF93C82E8B017A018091F903811103C01F -:101100008FEF9FEF70C08091F60380FF05C0809144 -:10111000E00082608093E000CE2DDF2DD12C8AEF9D -:10112000B82E8C2D8770982E8C2D8072882E8C2D49 -:101130008074782E9AE3A92E209719F4DD2009F403 -:101140004DC08C2D0E945B08811106C0BA94BB2053 -:10115000B9F20E94A20BF0CF282F30E0C217D307BC -:101160000CF48C2F9FB7F8949092E9002091E8003E -:1011700025FF32C0282F30E0C21BD30B882029F076 -:101180008150A0F01092F100FBCFF801C7FE0AC019 -:10119000815050F044914093F1003196F9CF419144 -:1011A0004093F1008150D8F7020F131FDD2019F092 -:1011B000A092E8000AC08091E80085FD08C0A092D6 -:1011C000E800DD24D394209739F0D12C05C0209776 -:1011D00019F47110A092E8009FBFAECF5D9A84E62B -:1011E0008093F803C701DF91CF911F910F91FF907A -:1011F000EF90DF90CF90BF90AF909F908F907F90B7 -:1012000008959091F903992311F057FF03C08FEFD0 -:101210009FEF08959FB7F89487708093E90020911D -:10122000F20030E0421753070CF49A01822FFB01C1 -:1012300044E6815038F0289A4093F7035091F1002A -:101240005193F7CF2115310521F08091F2008823C9 -:1012500019F09FBFC90108958BE68093E800F9CF8C -:101260009FB7F89487708093E9008091F2009FBF48 -:10127000089590E0FC013197EF30F105B0F5EA5A9E -:10128000FF4F0C944F10809180008F7703C08091A6 -:1012900080008F7D80938000089580918000877FFB -:1012A000F9CF84B58F7702C084B58F7D84BD089552 -:1012B000809190008F7707C0809190008F7D03C050 -:1012C00080919000877F8093900008958091C00066 -:1012D0008F7703C08091C0008F7D8093C0000895F8 -:1012E0008091C200877F8093C20008951F93CF939F -:1012F000DF93282F30E0F901E25CFE4F8491F90181 -:10130000E15EFE4FD491F901E050FF4FC491CC2330 -:10131000C1F0162F81110E943909EC2FF0E0EE0F79 -:10132000FF1FEE50FF4FA591B4919FB7F894111194 -:1013300004C08C91D095D82302C0EC91DE2BDC93B5 -:101340009FBFDF91CF911F9108953FB7F89480918F -:10135000EC039091ED03A091EE03B091EF0326B55D -:10136000A89B05C02F3F19F00196A11DB11D3FBFDD -:10137000BA2FA92F982F8827820F911DA11DB11D6B -:10138000BC01CD0142E0660F771F881F991F4A9567 -:10139000D1F7089580E090E0089580E00895CF921D -:1013A000DF92EF92FF920F931F93CF93DF936C0125 -:1013B0007A018B01C0E0D0E0CE15DF0581F0D801C5 -:1013C0006D918D01D601ED91FC910190F081E02DA0 -:1013D000C6010995892B11F02196EECF7E01C70138 -:1013E000DF91CF911F910F91FF90EF90DF90CF9001 -:1013F0000895FC0182818F5BFB01808381E0089569 -:10140000CF93DF931F92CDB7DEB76983DC01ED91F7 -:10141000FC910280F381E02D41E050E0BE016F5F5E -:101420007F4F09950F90DF91CF910895089580E047 -:1014300090E0089584E0E3E7F2E0DB0101900D9293 -:101440008A95E1F784E00895CF92DF92EF92FF92C0 -:101450000F931F93CF93DF93CDB7DEB7C456D10957 -:101460000FB6F894DEBF0FBECDBF6C01DB019C91BF -:101470009E5F9C93FE01319684E6DF011D928A9562 -:10148000E9F788E089838BE08A8322E02C8391E06E -:101490009D839E8339E0398774E07A879E879F8792 -:1014A0003A8B44E24B8B9C8B00E011E01E8B0D8B42 -:1014B00089E0E82EF12CF88EEF8A998F3B8F7C8F94 -:1014C0002F8F98A353E059A387E08CA34DA39EA32D -:1014D00018A70FA301E410E01AA709A786E08BA7BD -:1014E0004CA72DA79EA79FA789AB4AAB2BAB2CABD4 -:1014F0002DAB3FAB48AF59AF9AAF5BAF9CAF2DAFB1 -:101500009EAF21963FAF219722964FAF2297239609 -:101510005FAF239724962FAF249725967FAF25970B -:1015200026969FAF269727969FAF279728969FAF1F -:1015300028972A963FAF2A9745E02B964FAF2B97D7 -:101540002D962FAF2D9760E470E02F967FAF6EAF92 -:101550002F9763964FAF639785E264968FAF64973A -:1015600065969FAF659766969FAF669767969FAFA4 -:10157000679768963FAF689769964FAF69976B9684 -:101580002FAF6B976D967FAF6EAF6D97A1964FAFF4 -:10159000A197A2968FAFA297A3969FAFA397A49669 -:1015A0009FAFA497A5965FAFA597D60112969C9181 -:1015B00012979B839B879F5F9A8F9D8F13968C9129 -:1015C0002C968FAF2C978F5F80686A968FAF6A9743 -:1015D00044E650E0BF0180E00E94C405CC59DF4FD3 -:1015E0000FB6F894DEBF0FBECDBFDF91CF911F9134 -:1015F0000F91FF90EF90DF90CF900895CF93DF93FE -:10160000EC0180910C01882331F083E00E946C088A -:101610001816190634F081E090E09B838A8380E0FD -:1016200090E0DF91CF91089583E00C94BA0583E0B8 -:101630000E945B0890E008950F931F93CF93DF9370 -:101640001F92CDB7DEB78C01FC018485958597FF8D -:1016500012C041E050E0BE016F5F7F4F82E00E9408 -:101660000109019719F4898190E002C08FEF9FEF83 -:10167000F80195878487F801848595850F90DF911F -:10168000CF911F910F910895CF93DF931F92CDB704 -:10169000DEB7FC018485958597FD05C02FEF3FEFF0 -:1016A000358724870FC041E050E0BE016F5F7F4F58 -:1016B00082E00E940109019719F4898190E002C03B -:1016C0008FEF9FEF0F90DF91CF910895FC018485FC -:1016D000958597FD06C082E00E94300990E0019652 -:1016E000089582E00E94300990E00895EF92FF9201 -:1016F0000F931F93CF93DF938C01D62FC0E0EE247E -:10170000E394F12C8C2F90E0F80126853785821721 -:10171000930788F4B7010C2E01C0660F0A94EAF70C -:101720006D2322853385F901E80FF91F80810E941E -:10173000F304CF5FE7CFDF91CF911F910F91FF901F -:10174000EF900895CF92DF92EF92FF920E94A50949 -:101750006B017C010E94A509DC01CB018C199D095C -:10176000AE09BF09883E9340A105B10598F3FF90EB -:10177000EF90DF90CF9008958091020581110DC008 -:1017800082E08093FE0484E08093FF0410920105C0 -:101790001092000581E0809302058EEF94E0089599 -:1017A0001F920F920FB60F9211242F933F934F93D6 -:1017B0005F936F937F938F939F93AF93BF93CF93D9 -:1017C000EF93FF93C091E1008091E100837F8093CC -:1017D000E100C3FF0FC01092E90081E08093EB00AD -:1017E0001092EC0082E38093ED001092F90388E000 -:1017F0008093F000C2FF19C083E00E94BA05809177 -:10180000F803882339F08091F80381508093F8031E -:10181000882389F18091F703882339F08091F703B9 -:1018200081508093F703882341F1C4FF10C0809159 -:10183000E2008E7E81608093E2008091E1008F7EE5 -:101840008093E1008091F6038E7E806111C0C0FF1D -:1018500016C08091E2008E7E80618093E2008091CC -:10186000E1008E7E8093E1008091F6038E7E8160A0 -:101870008093F60304C05D98CDCF2898D6CFFF9112 -:10188000EF91CF91BF91AF919F918F917F916F9188 -:101890005F914F913F912F910F900FBE0F901F902E -:1018A0001895CF93DF93FC018EE191E091838083C3 -:1018B000A781B085109731F08581968116969C930B -:1018C0008E9315978091780290917902E817F90725 -:1018D00021F4B0937902A0937802C581D681209734 -:1018E00011F0B887AF8380917A0290917B02E8175C -:1018F000F90721F4D0937B02C0937A02DF91CF9154 -:101900000895CF93DF93E8EDF4E086E092E07497DA -:1019100091838083A781B085109731F0258136812E -:1019200016963C932E9315972091FA033091FB0362 -:10193000E217F30721F4B093FB03A093FA03C581E8 -:10194000D681209711F0B887AF832091FC033091A6 -:10195000FD03E217F30721F4D093FD03C093FC03CA -:1019600024E0E031F20799F686E492E09093D904FE -:101970008093D8048091E9049091EA040E94ED10CC -:1019800088ED94E00E94510C8CE592E09093ED0478 -:101990008093EC048091F8049091F9040E94ED107A -:1019A0008CEE94E0DF91CF910C94510C789484B537 -:1019B000826084BD84B5816084BD85B5826085BD4B -:1019C00085B5816085BD80916E00816080936E00D9 -:1019D00010928100809181008260809381008091CB -:1019E000810081608093810080918000816080937C -:1019F000800080919100826080939100809191009D -:101A0000816080939100809190008160809390002C -:101A10008091C10084608093C1008091C100826088 -:101A20008093C1008091C10081608093C10080914A -:101A3000C30081608093C3008091C0008260809366 -:101A4000C0008091C20081608093C20080917A00C2 -:101A5000846080937A0080917A00826080937A001B -:101A600080917A00816080937A0080917A0080680A -:101A700080937A001092F9031092F0031092F6030B -:101A80008091D70081608093D70080EA8093D8004E -:101A900089B5806189BD89B5826089BD09B400FEC0 -:101AA000FDCF0E94A20B8091D8008F7C8061809333 -:101AB000D8008091E000807F8093E0008091E10079 -:101AC0008E7E8093E1008DE08093E200559A209A0B -:101AD0005D982898CCEFD1E060E089910E944C029B -:101AE00082E0C230D807C1F787EE93E0E7E8F3E081 -:101AF00011928E179F07E1F788ED94E00E94A202F1 -:101B000011E03CEF232E31E0332E44E3442E41E03C -:101B1000542E50E0652E50E0752E60E080E10E946A -:101B2000760920E041E061E08EE00E94130521E0AB -:101B300041E061E08EE00E94130561E080E10E94D7 -:101B400076099CE3C92E91E0D92E27E8A22E23E046 -:101B5000B22EE60175018CEF882E81E0982ED4011B -:101B60008D914D010E94F203F701813099F580813A -:101B700081114EC0888129818130B1F4E0910E0439 -:101B8000F0910F04A281B38190918603290F2F77E2 -:101B9000ED91FC9111970480F581E02D0FE74FE066 -:101BA00060E9CD01099513C0823089F4211106C086 -:101BB000809186038C3058F08C5007C0213039F466 -:101BC00080918603853C18F4845F80938603D70157 -:101BD0001C931EC080818823D9F088818130B1F4A4 -:101BE000E0910E04F0910F04A281B38129819091BC -:101BF0008603290F2F77ED91FC9111970480F581D1 -:101C0000E02D0FE74FE060E8CD010995D7011C9268 -:101C1000B0E1EB0EF11C2296E2E08E16E2E09E06A9 -:101C200009F09DCF60E08EE00E94760960E080E1DF -:101C30000E94760961E081E00E94760960E081E01F -:101C40000E94760961E080E10E947609FFEFAF1AF9 -:101C5000BF0A8CE0C80ED11C2C143D0409F079CFCA -:101C6000C0910E04D0910F048A819B81892B01F5CC -:101C700080918403909185039B838A83892B79F4D7 -:101C800082E090E00E945510909385038093840336 -:101C9000DC014D925C92998388839B838A838A813D -:101CA0009B81DC01ED91FC910190F081E02D099583 -:101CB000E090FC03F090FD03E114F10461F0D70122 -:101CC000ED91FC910480F581E02DC7010995F701A4 -:101CD000E580F680F1CF8A819B81DC01ED91FC915A -:101CE0000280F381E02D09958111F5CF6114710413 -:101CF00009F413CF0E94000010CFFC018EE191E0A7 -:101D00009183808362831682158210861782809168 -:101D10007A0290917B02892B21F4F0937B02E0936D -:101D20007A02A0917802B0917902B087A7831097C8 -:101D300021F01696FC93EE931597F0937902E093B9 -:101D4000780216821582809100018383680F648374 -:101D5000609300010895DF92EF92FF920F931F931B -:101D6000CF93DF93D82EF92EE42E062F10E0C80172 -:101D70000196880F0E947F0583E00E947F05CD2D8C -:101D8000DF2D0C0F1D1FC017D10789F0E7FE03C020 -:101D9000FE01849101C088810E947F05F82E80E0B9 -:101DA0000E947F058F2121968111EDCF01C081E036 -:101DB000DF91CF911F910F91FF90EF90DF900895E9 -:101DC000FC0186E092E0918380831282138281E09D -:101DD000848316821582108617828091FC0390916D -:101DE000FD03892B21F4F093FD03E093FC03A09104 -:101DF000FA03B091FB03B087A783109721F01696E2 -:101E0000FC93EE931597F093FB03E093FA0316828D -:101E10001582618715861486178616868AE392E0F6 -:101E2000918380838FEF808B87E0818B428B138A35 -:101E3000089582E0809302048093030488E094E094 -:101E400090930504809304041092070410920604F2 -:101E500080E192E09093FF038093FE0380E88093FB -:101E6000080481E8809309040E94BC0BFC012181D5 -:101E70008091020490E0820F911D0897C4F5A28121 -:101E8000B381109729F48EEF93E0938382830EC081 -:101E900018968D919C911997009711F0DC01F8CF5D -:101EA0008EEF93E019969C938E9318978081809380 -:101EB0000004818180930104908180910304890F43 -:101EC000808380E090910204891788F4A091040433 -:101ED000B0910504A80FB11D9C91A181B0E0A35F52 -:101EE000BE4F9C9391819F5F91838F5FEBCF109248 -:101EF0000D0510920C0588EE93E0A0E0B0E0809311 -:101F00000E0590930F05A0931005B09311058CE179 -:101F100092E090930B0580930A058FEF9FEF9093CB -:101F200017058093160580915A0581110BC01092F8 -:101F30000B0410920A0410920D0410920C0481E01C -:101F400080935A058AE094E090930F0480930E04E6 -:101F500060E28CEE94E00E947D0E8CE592E090931E -:101F6000ED048093EC048CE18093F5048EE692E01E -:101F70009093F7048093F6041092F9041092F804F9 -:101F800085E090E09093FB048093FA0480E290E077 -:101F90009093FD048093FC048CEE94E00E94BF02B9 -:101FA00060E188ED94E00E947D0E86E492E09093DB -:101FB000D9048093D8041092E10481E08093E20474 -:101FC00092E09093E3042EE02093E4048093E504F0 -:101FD00020E12093E6048093E7048FEF8093EB04E5 -:101FE0002093DA049093E80482E090E00E94551078 -:101FF0009093EA048093E90488ED94E00E94A202A1 -:1020000041E06091EF0480E194E00E94E00E609175 -:10201000EF046F5F42E084E294E00E94E00E609182 -:10202000EF046E5F43E088E394E00E94E00E60916D -:10203000EF046D5F44E08CE494E00E94E00E609158 -:10204000EF046C5F45E080E694E00E94E00E609152 -:10205000EF046B5F46E084E794E00E94E00E60913D -:10206000EF046A5F47E088E894E00E94E00E609128 -:10207000EF04695F48E08CE994E00E94E00E609113 -:10208000EF04685F49E080EB94E00E94E00E60910D -:10209000EF04675F4AE084EC94E00C94E00EEE0FEE -:1020A000FF1F0590F491E02D09940F931F93CF9398 -:1020B000DF938230910510F482E090E0E0916405B6 -:1020C000F091650520E030E0A0E0B0E0309719F134 -:1020D000408151810281138148175907C8F0841744 -:1020E000950769F4109731F012960C931297139696 -:1020F0001C9327C0009364051093650522C0211529 -:10210000310519F04217530718F49A01BD01EF0188 -:10211000DF01F801DBCF21153105F9F0281B390B60 -:102120002430310580F48A819B816115710521F08D -:10213000FB019383828304C09093650580936405BB -:10214000FE01329644C0FE01E20FF31F819391938A -:1021500022503109398328833AC020916205309199 -:102160006305232B41F42091160130911701309320 -:10217000630520936205209114013091150121150A -:10218000310541F42DB73EB7409118015091190126 -:10219000241B350BE0916205F0916305E217F3070C -:1021A000A0F42E1B3F0B2817390778F0AC014E5FC7 -:1021B0005F4F2417350748F04E0F5F1F509363059C -:1021C000409362058193919302C0E0E0F0E0CF017B -:1021D000DF91CF911F910F910895CF93DF930097D7 -:1021E00009F481C0FC01329713821282A091640528 -:1021F000B0916505109781F420813181820F931F82 -:1022000020916205309163052817390751F5F09345 -:102210006305E093620567C0ED0120E030E0CE1772 -:10222000DF0740F44A815B819E0141155105F1F0C1 -:10223000EA01F5CFD383C28340815181840F951F7A -:10224000C817D90759F488819981840F951F029680 -:10225000918380838A819B819383828321153105B9 -:1022600029F4F0936505E09364053DC0E901FB8323 -:10227000EA8349915991C40FD51FEC17FD0761F40A -:1022800080819181840F951F0296E901998388834B -:10229000828193819B838A83E0E0F0E012968D91A6 -:1022A0009C911397009719F0FD01DC01F7CF8D91F8 -:1022B0009C9111979D012E5F3F4F820F931F20919C -:1022C0006205309163052817390769F4309729F4BE -:1022D000109265051092640502C013821282B093B9 -:1022E0006305A0936205DF91CF91089581E090E0AE -:1022F000F8940C948211DC0101C06D934150504060 -:10230000E0F7089510E0C9EED0E004C0FE010E949D -:0E2310004F102196CA3ED107C9F7F894FFCFAF -:10231E002BFFFFFFFF00E100000000000000C18066 -:10232E008100000000006605800000000000DD0254 -:10233E00DD02DC02DC02DB02160A160A160A160A97 -:10234E0000000000160A1503E702610100000000FC -:10235E000000000000000000010001010102010365 -:10236E00010401050106010701080109010A010B1B -:10237E00011201130114011501160117012F00009E -:10238E0000000000000000000129012A012B012C91 -:10239E00012D012E012401250126012701280128E6 -:1023AE00011E011F01200121012201230000000056 -:1023BE00000000000000000001180119011A011BA5 -:1023CE00011C011D010C010D010E010F0110011167 -:1023DE0000000000000000000000000002000000ED -:1023EE0000000000000000000000000000000000DF -:1023FE0000000000000000000000000000000000CF -:10240E0002010000000000000000000004050607A5 -:10241E00080900000000DE02160A160A000000007D -:10242E00CD09240ACA091A0A00000000000AFE0A91 -:10243E00170B140B660B440B1C0B0000000059010C -:10244E00160A1E02DF02000000005901160A1E02C3 -:10245E00140100000000DD0291016C01DC02DB02C0 -:10246E00A2024C05DE03160A00000000BA02DD02CD -:10247E009B048A04DB02BF02160A160A160A1213FE -:08248E0014150F4D49444900EB -:00000001FF diff --git a/.pioenvs/structure.hash b/.pioenvs/structure.hash deleted file mode 100644 index d647d10..0000000 --- a/.pioenvs/structure.hash +++ /dev/null @@ -1 +0,0 @@ -ff40efac42d76dcfb6ef5cb24bb1f872944d1abf \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index edd3068..6a12cbd 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,7 +8,21 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +[platformio] +default_envs = micro_debug + +[env] +build_flags = -Wall +lib_deps = + Control Surface + MIDIUSB + [env:micro] platform = atmelavr board = micro framework = arduino + +[env:micro_debug] +build_type = debug +extends = env:micro +build_flags = -D DEBUG_MAIN \ No newline at end of file diff --git a/res/doc/MidiKeyboard.fzz b/res/doc/MidiKeyboard.fzz new file mode 100644 index 0000000000000000000000000000000000000000..31ea7ef2e6c0e328a06883c9f527a66adf2cbddf GIT binary patch literal 62849 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 XMIQEzR1X3I{_RKl<|ay)fByYHzrxit literal 0 HcmV?d00001 diff --git a/res/doc/Midi.fzz b/res/doc/MidiUno.fzz similarity index 100% rename from res/doc/Midi.fzz rename to res/doc/MidiUno.fzz diff --git a/lib/Keyboard.cpp b/src/Keyboard.cpp similarity index 100% rename from lib/Keyboard.cpp rename to src/Keyboard.cpp diff --git a/lib/Keyboard.h b/src/Keyboard.h similarity index 100% rename from lib/Keyboard.h rename to src/Keyboard.h diff --git a/src/main.cpp b/src/main.cpp index 9cf2aa9..35197c8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,11 +1,18 @@ #include -#include + +#define s * 1000 +#ifndef DEBUG_MAIN +#include #define NOTE_ON_CMD 0x90 #define NOTE_OFF_CMD 0x80 #define NOTE_VELOCITY 127 -#define s * 1000 + +// Instantiate a MIDI Interface to use +// USBMIDI_Interface midi; +// Instantiate a MIDI Interface to use +USBDebugMIDI_Interface midi{115200}; /* Pins */ /* GPIO (I2C) */ @@ -13,9 +20,9 @@ const uint8_t gpio_int{0}; const uint8_t sda{2}; const uint8_t scl{3}; /* Multiplexer */ -#define MUX_ADDRSIZE 5 -const uint8_t mux_sig{A10}; -const uint8_t mux_addr[MUX_ADDRSIZE]{18, 19, 20, 21, 15}; +const pin_t mux_sig{A10}; +const Array mux_addr{18, 19, 20, 21}; +const pin_t mux_en{15}; /* ShiftRegister (OUT) */ #define SHIFT_OUTPUTSIZE 16 const uint8_t shift_data{14}; @@ -28,25 +35,25 @@ const uint8_t keyboard_in[KEYBOARD_INSIZE]{4, 5, 6, 7, 8, 9}; /* Components */ /* GPIO (I2C) */ /* Multiplexer */ -AnalogMultiplex multiplexer(mux_sig, mux_addr); +CD74HC4067 multiplexer{mux_sig, mux_addr, mux_en}; /* ShiftRegister (OUT) */ -ShiftRegisterOut shiftRegister(shift_data, shift_clock, shift_latch, MSBFIRST, SHIFT_OUTPUTSIZE); +ShiftRegisterOut<2> shiftRegister(shift_data, shift_clock, shift_latch, MSBFIRST); /* keyboard (IN) */ /* Midi links */ // USBDebugMIDI_Interface midiInterface(115200); -Analog potentiometers[] = { - {multiplexer.pin(0), MIDI_CC::Channel_Volume, 1}, - {multiplexer.pin(1), MIDI_CC::Channel_Volume, 2}, - {multiplexer.pin(2), MIDI_CC::Channel_Volume, 3}, - {multiplexer.pin(3), MIDI_CC::Channel_Volume, 4}, - {multiplexer.pin(4), MIDI_CC::Channel_Volume, 5}, - {multiplexer.pin(5), MIDI_CC::Channel_Volume, 6}, - {multiplexer.pin(6), MIDI_CC::Channel_Volume, 7}, - {multiplexer.pin(7), MIDI_CC::Channel_Volume, 8}, - {multiplexer.pin(8), MIDI_CC::Channel_Volume, 9}, - {multiplexer.pin(9), MIDI_CC::Channel_Volume, 10} +CCPotentiometer potentiometers[] = { + {multiplexer.pin(0), {MIDI_CC::Channel_Volume, CHANNEL_1}}, + {multiplexer.pin(1), {MIDI_CC::Channel_Volume, CHANNEL_2}}, + {multiplexer.pin(2), {MIDI_CC::Channel_Volume, CHANNEL_3}}, + {multiplexer.pin(3), {MIDI_CC::Channel_Volume, CHANNEL_4}}, + {multiplexer.pin(4), {MIDI_CC::Channel_Volume, CHANNEL_5}}, + {multiplexer.pin(5), {MIDI_CC::Channel_Volume, CHANNEL_6}}, + {multiplexer.pin(6), {MIDI_CC::Channel_Volume, CHANNEL_7}}, + {multiplexer.pin(7), {MIDI_CC::Channel_Volume, CHANNEL_8}}, + {multiplexer.pin(8), {MIDI_CC::Channel_Volume, CHANNEL_9}}, + {multiplexer.pin(9), {MIDI_CC::Channel_Volume, CHANNEL_10}}, }; byte matrix[16][6][2] = { @@ -80,6 +87,8 @@ void setup() { // Serial.print("Serial OK"); + midi.begin(); + for (size_t i = 0; i < KEYBOARD_INSIZE; ++i) { ExtIO::pinMode(keyboard_in[i], INPUT); } @@ -187,9 +196,8 @@ void loop() { // analogWrite(9, val[0] * 256 / 1024); - - - MIDI_Controller.refresh(); + midi.update(); + // MIDI_Controller.refresh(); // lastLoop = millis() - start; // loopAverage = (loopAverage + lastLoop) / 2; //delay(.5 s); @@ -197,15 +205,37 @@ void loop() { void noteOn(byte note) { - MIDI_Controller.MIDI()->send(NOTE_ON_CMD, 0, note + shift, NOTE_VELOCITY); + // MIDI_Controller.MIDI()->send(NOTE_ON_CMD, 0, note + shift, NOTE_VELOCITY); // Serial.write(NOTE_ON_CMD); // Serial.write(note + shift); // Serial.write(NOTE_VELOCITY); + midi.sendNoteOn(note, NOTE_VELOCITY); } void noteOff(byte note) { - MIDI_Controller.MIDI()->send(NOTE_OFF_CMD, 0, note + shift, NOTE_VELOCITY); + // MIDI_Controller.MIDI()->send(NOTE_OFF_CMD, 0, note + shift, NOTE_VELOCITY); // Serial.write(NOTE_OFF_CMD); // Serial.write(note + shift); // Serial.write(NOTE_VELOCITY); + midi.sendNoteOff(note, NOTE_VELOCITY); } + +#else /* DEBUG_MAIN */ + +void setup() +{ + Serial.begin(115200); + while (Serial.available() == 0){ + delay(.5 s); + } + + Serial.print("Serial OK"); +} + +void loop() { + while (Serial.available() != 0) { + char c = Serial.read(); + Serial.print(c); + } +} +#endif /* DEBUG_MAIN */ \ No newline at end of file diff --git a/src/main.cpp.bak3 b/src/main.cpp.bak3 new file mode 100644 index 0000000..9cf2aa9 --- /dev/null +++ b/src/main.cpp.bak3 @@ -0,0 +1,211 @@ +#include +#include + +#define NOTE_ON_CMD 0x90 +#define NOTE_OFF_CMD 0x80 +#define NOTE_VELOCITY 127 + +#define s * 1000 + +/* Pins */ +/* GPIO (I2C) */ +const uint8_t gpio_int{0}; +const uint8_t sda{2}; +const uint8_t scl{3}; +/* Multiplexer */ +#define MUX_ADDRSIZE 5 +const uint8_t mux_sig{A10}; +const uint8_t mux_addr[MUX_ADDRSIZE]{18, 19, 20, 21, 15}; +/* ShiftRegister (OUT) */ +#define SHIFT_OUTPUTSIZE 16 +const uint8_t shift_data{14}; +const uint8_t shift_latch{16}; +const uint8_t shift_clock{1}; +/* keyboard (IN) */ +#define KEYBOARD_INSIZE 6 +const uint8_t keyboard_in[KEYBOARD_INSIZE]{4, 5, 6, 7, 8, 9}; + +/* Components */ +/* GPIO (I2C) */ +/* Multiplexer */ +AnalogMultiplex multiplexer(mux_sig, mux_addr); +/* ShiftRegister (OUT) */ +ShiftRegisterOut shiftRegister(shift_data, shift_clock, shift_latch, MSBFIRST, SHIFT_OUTPUTSIZE); +/* keyboard (IN) */ + +/* Midi links */ +// USBDebugMIDI_Interface midiInterface(115200); + +Analog potentiometers[] = { + {multiplexer.pin(0), MIDI_CC::Channel_Volume, 1}, + {multiplexer.pin(1), MIDI_CC::Channel_Volume, 2}, + {multiplexer.pin(2), MIDI_CC::Channel_Volume, 3}, + {multiplexer.pin(3), MIDI_CC::Channel_Volume, 4}, + {multiplexer.pin(4), MIDI_CC::Channel_Volume, 5}, + {multiplexer.pin(5), MIDI_CC::Channel_Volume, 6}, + {multiplexer.pin(6), MIDI_CC::Channel_Volume, 7}, + {multiplexer.pin(7), MIDI_CC::Channel_Volume, 8}, + {multiplexer.pin(8), MIDI_CC::Channel_Volume, 9}, + {multiplexer.pin(9), MIDI_CC::Channel_Volume, 10} +}; + +byte matrix[16][6][2] = { +/*00*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*01*/ {{1, 0}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}}, +/*02*/ {{1, 6}, {1, 7}, {1, 8}, {1, 9}, {1, 10}, {1, 11}}, +/*03*/ {{1, 18}, {1, 19}, {1, 20}, {1, 21}, {1, 22}, {1, 23}}, +/*04*/ {{1, 47}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*05*/ {{1, 41}, {1, 42}, {1, 43}, {1, 44}, {1, 45}, {1, 46}}, +/*06*/ {{1, 36}, {1, 37}, {1, 38}, {1, 39}, {1, 40}, {1, 40}}, +/*07*/ {{1, 30}, {1, 31}, {1, 32}, {1, 33}, {1, 34}, {1, 35}}, +/*08*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*09*/ {{1, 24}, {1, 25}, {1, 26}, {1, 27}, {1, 28}, {1, 29}}, +/*10*/ {{1, 12}, {1, 13}, {1, 14}, {1, 15}, {1, 16}, {1, 17}}, +/*11*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*12*/ {{2, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*13*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*14*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +/*15*/ {{2, 1}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, +}; + +bool ref[6*16]; + +unsigned char shift = 0; + +void setup() { + // Serial.begin(31250); + // while (Serial.available() == 0){ + // delay(.5 s); + // } + + // Serial.print("Serial OK"); + + for (size_t i = 0; i < KEYBOARD_INSIZE; ++i) { + ExtIO::pinMode(keyboard_in[i], INPUT); + } + + for (size_t i = 0; i < 6*16; ++i) { + ref[i] = false; + } + // ExtIO::pinMode(shift_data, OUTPUT); + // ExtIO::pinMode(shift_latch, OUTPUT); + // ExtIO::pinMode(shift_clock, OUTPUT); + shiftRegister.begin(); +} + +void scanPin(int pin) { + ExtIO::digitalWrite(shift_latch, LOW); + if (pin < 8) { + byte bitsToSend = 0b00000001 << pin; + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, bitsToSend); + } else { + byte bitsToSend = 0b00000001 << (pin - 8); + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, bitsToSend); + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + } + ExtIO::digitalWrite(shift_latch, HIGH); +} + + +void init_shift() { + ExtIO::digitalWrite(shift_latch, LOW); + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000001); + ExtIO::digitalWrite(shift_latch, HIGH); +} + +void next_shift() { + ExtIO::digitalWrite(shift_data, LOW); + ExtIO::digitalWrite(shift_latch, LOW); + ExtIO::digitalWrite(shift_clock, HIGH); + ExtIO::digitalWrite(shift_clock, LOW); + ExtIO::digitalWrite(shift_latch, HIGH); +} + +void noteOn(byte note); + +void noteOff(byte note); + +void loop() { + init_shift(); + for (size_t i = 0; i < 16; ++i) { + // shiftRegister.digitalWrite(i, HIGH); + uint8_t rowValue[KEYBOARD_INSIZE]; + bool pressed = false; + for (size_t j = 0; j < 6; ++j) { + if ((rowValue[i] = ExtIO::digitalRead(keyboard_in[j])) == HIGH) { + if (!ref[j * 16 + i]) { + byte type = matrix[i][j][0]; + byte key = matrix[i][j][1]; + if (type == 1) { + noteOn(key); + } else if (type == 2) { + if (key == 0 && shift >= 12) { + shift -= 12; + } else if (key == 1 && shift <= 0xFF - 47 - 12) { + shift += 12; + } + } + ref[j * 16 + i] = true; + } + } else { + if (ref[j * 16 + i]) { + if (matrix[i][j][0] == 1) { + noteOff(matrix[i][j][1]); + } + ref[j * 16 + i] = false; + } + } + } + next_shift(); + // shiftRegister.digitalWrite(i, LOW); + // delay(3 s); + } + + // for (uint8_t i = 0; i < 8; ++i) { + // byte bitsToSend = 0b00000001 << i; + // ExtIO::digitalWrite(shift_latch, LOW); + // // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, bitsToSend); + // // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b11111111); + // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b11111111); + // ExtIO::digitalWrite(shift_latch, HIGH); + // Serial.print(" "); + // Serial.print(bitsToSend, BIN); + // Serial.println(" HIGH"); + // delay(4 s); + // //bitWrite(bitsToSend, i, LOW); + // ExtIO::digitalWrite(shift_latch, LOW); + // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + // ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + // ExtIO::digitalWrite(shift_latch, HIGH); + // Serial.print(i); + // Serial.println(" LOW"); + // delay(4 s); + // } + + // analogWrite(9, val[0] * 256 / 1024); + + + + MIDI_Controller.refresh(); + // lastLoop = millis() - start; + // loopAverage = (loopAverage + lastLoop) / 2; + //delay(.5 s); +} + + +void noteOn(byte note) { + MIDI_Controller.MIDI()->send(NOTE_ON_CMD, 0, note + shift, NOTE_VELOCITY); + // Serial.write(NOTE_ON_CMD); + // Serial.write(note + shift); + // Serial.write(NOTE_VELOCITY); +} + +void noteOff(byte note) { + MIDI_Controller.MIDI()->send(NOTE_OFF_CMD, 0, note + shift, NOTE_VELOCITY); + // Serial.write(NOTE_OFF_CMD); + // Serial.write(note + shift); + // Serial.write(NOTE_VELOCITY); +}