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 18b001e..0000000 Binary files a/.pioenvs/.sconsign.dblite and /dev/null differ diff --git a/.pioenvs/micro/firmware.elf b/.pioenvs/micro/firmware.elf deleted file mode 100755 index cc5844f..0000000 Binary files a/.pioenvs/micro/firmware.elf and /dev/null differ 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 0000000..31ea7ef Binary files /dev/null and b/res/doc/MidiKeyboard.fzz differ 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); +}