diff --git a/.clang_complete b/.clang_complete index 6346075..07bf2b3 100644 --- a/.clang_complete +++ b/.clang_complete @@ -1,48 +1,24 @@ -I/home/nathan/.platformio/packages/framework-arduinoavr/cores/arduino -I/home/nathan/.platformio/packages/framework-arduinoavr/variants/micro --I/home/nathan/.platformio/lib/Adafruit MQTT Library_ID1092 --I/home/nathan/.platformio/lib/ArduinoJson_ID64/src --I/home/nathan/.platformio/lib/Encoder --I/home/nathan/.platformio/lib/Encoder/utility --I/home/nathan/.platformio/lib/Keypad_ID165/src -I/home/nathan/.platformio/lib/MIDI controller/src -I/home/nathan/.platformio/lib/MIDIUSB_ID1104/src --I/home/nathan/.platformio/lib/Multiplexer_ID320 +-I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SoftwareSerial/src +-I/home/nathan/.platformio/lib/ArduinoJson_ID64/src +-I/home/nathan/.platformio/lib/Keypad_ID165/src -I/home/nathan/.platformio/lib/PubSubClient_ID89/src +-I/home/nathan/.platformio/lib/Tone_ID1420 -I/home/nathan/.platformio/lib/WifiManager_ID567 -I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/EEPROM/src -I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/HID/src -I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SPI/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SoftwareSerial/src -I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/Wire/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Adafruit_Circuit_Playground --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Adafruit_Circuit_Playground/utility --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Bridge/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Esplora/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Ethernet/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Firmata --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Firmata/utility --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/GSM/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Keyboard/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/LiquidCrystal/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Mouse/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/RobotIRremote/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Robot_Control/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Robot_Motor/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/SD/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Servo/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/SpacebrewYun/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Stepper/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/TFT/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Temboo/src --I/home/nathan/.platformio/packages/framework-arduinoavr/libraries/WiFi/src -I/home/nathan/.platformio/packages/toolchain-atmelavr/avr/include -I/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include-fixed -I/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include -I/home/nathan/.platformio/packages/tool-unity --I/home/nathan/Documents/PlatformIO/Projects/Midi/include --I/home/nathan/Documents/PlatformIO/Projects/Midi/src --DPLATFORMIO=30604 +-I/media/c/Users/Nathan/Documents/PlatformIO/Projects/MidiKeyboard/include +-I/media/c/Users/Nathan/Documents/PlatformIO/Projects/MidiKeyboard/src +-DPLATFORMIO=40000 -DARDUINO_AVR_MICRO -DF_CPU=16000000L -DARDUINO_ARCH_AVR diff --git a/.gcc-flags.json b/.gcc-flags.json index 756db33..115b9c4 100644 --- a/.gcc-flags.json +++ b/.gcc-flags.json @@ -1,8 +1,8 @@ { "execPath": "/home/nathan/.platformio/packages/toolchain-atmelavr/bin/avr-g++", - "gccDefaultCFlags": "-fsyntax-only -std=gnu11 -fno-fat-lto-objects -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4 -DPLATFORMIO=30604 -DARDUINO_AVR_MICRO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10805 -DUSB_VID=0x2341 -DUSB_PID=0x0037 -DUSB_PRODUCT=\"Arduino Micro\" -DUSB_MANUFACTURER=\"Arduino\" -D__AVR_ATmega32U4__", - "gccDefaultCppFlags": "-fsyntax-only -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4 -DPLATFORMIO=30604 -DARDUINO_AVR_MICRO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10805 -DUSB_VID=0x2341 -DUSB_PID=0x0037 -DUSB_PRODUCT=\"Arduino Micro\" -DUSB_MANUFACTURER=\"Arduino\" -D__AVR_ATmega32U4__", + "gccDefaultCFlags": "-fsyntax-only -std=gnu11 -fno-fat-lto-objects -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4 -DPLATFORMIO=40000 -DARDUINO_AVR_MICRO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10805 -DUSB_VID=0x2341 -DUSB_PID=0x0037 -DUSB_PRODUCT=\"Arduino Micro\" -DUSB_MANUFACTURER=\"Arduino\" -D__AVR_ATmega32U4__", + "gccDefaultCppFlags": "-fsyntax-only -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4 -DPLATFORMIO=40000 -DARDUINO_AVR_MICRO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10805 -DUSB_VID=0x2341 -DUSB_PID=0x0037 -DUSB_PRODUCT=\"Arduino Micro\" -DUSB_MANUFACTURER=\"Arduino\" -D__AVR_ATmega32U4__", "gccErrorLimit": 15, - "gccIncludePaths": "/home/nathan/.platformio/packages/framework-arduinoavr/cores/arduino,/home/nathan/.platformio/packages/framework-arduinoavr/variants/micro,/home/nathan/.platformio/lib/Adafruit MQTT Library_ID1092,/home/nathan/.platformio/lib/ArduinoJson_ID64/src,/home/nathan/.platformio/lib/Encoder,/home/nathan/.platformio/lib/Encoder/utility,/home/nathan/.platformio/lib/Keypad_ID165/src,/home/nathan/.platformio/lib/MIDI controller/src,/home/nathan/.platformio/lib/MIDIUSB_ID1104/src,/home/nathan/.platformio/lib/Multiplexer_ID320,/home/nathan/.platformio/lib/PubSubClient_ID89/src,/home/nathan/.platformio/lib/WifiManager_ID567,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/EEPROM/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/HID/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SPI/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SoftwareSerial/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/Wire/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Adafruit_Circuit_Playground,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Adafruit_Circuit_Playground/utility,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Bridge/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Esplora/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Ethernet/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Firmata,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Firmata/utility,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/GSM/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Keyboard/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/LiquidCrystal/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Mouse/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/RobotIRremote/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Robot_Control/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Robot_Motor/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/SD/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Servo/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/SpacebrewYun/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Stepper/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/TFT/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/Temboo/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/WiFi/src,/home/nathan/.platformio/packages/toolchain-atmelavr/avr/include,/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include-fixed,/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include,/home/nathan/.platformio/packages/tool-unity,/home/nathan/Documents/PlatformIO/Projects/Midi/include,/home/nathan/Documents/PlatformIO/Projects/Midi/src", + "gccIncludePaths": "/home/nathan/.platformio/packages/framework-arduinoavr/cores/arduino,/home/nathan/.platformio/packages/framework-arduinoavr/variants/micro,/home/nathan/.platformio/lib/MIDI controller/src,/home/nathan/.platformio/lib/MIDIUSB_ID1104/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SoftwareSerial/src,/home/nathan/.platformio/lib/ArduinoJson_ID64/src,/home/nathan/.platformio/lib/Keypad_ID165/src,/home/nathan/.platformio/lib/PubSubClient_ID89/src,/home/nathan/.platformio/lib/Tone_ID1420,/home/nathan/.platformio/lib/WifiManager_ID567,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/EEPROM/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/HID/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/SPI/src,/home/nathan/.platformio/packages/framework-arduinoavr/libraries/__cores__/arduino/Wire/src,/home/nathan/.platformio/packages/toolchain-atmelavr/avr/include,/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include-fixed,/home/nathan/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/5.4.0/include,/home/nathan/.platformio/packages/tool-unity,/media/c/Users/Nathan/Documents/PlatformIO/Projects/MidiKeyboard/include,/media/c/Users/Nathan/Documents/PlatformIO/Projects/MidiKeyboard/src", "gccSuppressWarnings": false } diff --git a/.pioenvs/.sconsign.dblite b/.pioenvs/.sconsign.dblite index d219124..9049330 100644 Binary files a/.pioenvs/.sconsign.dblite and b/.pioenvs/.sconsign.dblite differ diff --git a/.pioenvs/do-not-modify-files-here.url b/.pioenvs/do-not-modify-files-here.url deleted file mode 100644 index c4a16e5..0000000 --- a/.pioenvs/do-not-modify-files-here.url +++ /dev/null @@ -1,3 +0,0 @@ - -[InternetShortcut] -URL=https://docs.platformio.org/page/projectconf/section_platformio.html#build-dir diff --git a/.pioenvs/micro/firmware.elf b/.pioenvs/micro/firmware.elf index 9233cb3..243477b 100755 Binary files a/.pioenvs/micro/firmware.elf and b/.pioenvs/micro/firmware.elf differ diff --git a/.pioenvs/micro/firmware.hex b/.pioenvs/micro/firmware.hex index f0b4432..18440c4 100644 --- a/.pioenvs/micro/firmware.hex +++ b/.pioenvs/micro/firmware.hex @@ -1,314 +1,443 @@ -:100000000C94E3000C940B010C940B010C940B0169 -:100010000C940B010C940B010C940B010C940B0130 -:100020000C940B010C940B010C9426050C94980570 -:100030000C940B010C940B010C940B010C940B0110 -:100040000C940B010C940B010C940B010C940B0100 -:100050000C940B010C940B010C940B010C94DC041C -:100060000C940B010C940B010C940B010C940B01E0 -:100070000C940B010C940B010C940B010C940B01D0 -:100080000C940B010C940B010C940B010C940B01C0 -:100090000C940B010C940B010C940B010C940B01B0 -:1000A0000C940B010C940B010C940B0178017B0157 -:1000B0006A016E0174019C019C019C017F01830116 -:1000C00087018D0191019C019701080B000202023A -:1000D00001000904000001020200000524001001D3 -:1000E0000524010101042402060524060001070578 -:1000F000810310004009040100020A000000070506 -:1001000002024000000705830240000004030904C6 -:1001100012010002EF0201404123370000010102F9 -:10012000030141726475696E6F204C4C430041724B -:100130006475696E6F204D6963726F000000000086 -:100140002300260029002C002F00000000002400BE -:1001500027002A002D0030000000000025002800A4 -:100160002B002E00310004040404040304050202E1 -:100170000202040302020202060606060606040440 -:1001800002020204040408020110408040102040D2 -:10019000804080080204018040201002011080107D -:1001A000204040200000000200090F00000304016D -:1001B000000C000000000000000000000000000033 -:1001C000000000004B0911241FBECFEFDAE0DEBFB4 -:1001D000CDBF11E0A0E0B1E0EEE1F3E102C0059097 -:1001E0000D92AC36B107D9F721E0ACE6B1E001C021 -:1001F0001D92AB3EB207E1F710E0C3EED0E004C0C1 -:100200002197FE010E948209C23ED107C9F70E94D0 -:10021000D6070C948D090C94000020919A012111AD -:1002200003C08FEF9FEF08955FB7F89422E020930B -:10023000E9002091F20030E01216130614F421E0D8 -:1002400030E0422FFC0184E6415038F0289A809338 -:1002500099019091F1009193F7CF2115310521F08B -:100260008091F200882319F05FBFC90108958BE6E1 -:100270008093E800F9CF2FB7F89483E08093E900EA -:100280009091E800892F807295FF04C09091F20050 -:1002900080E4891B2FBF08958091910181110DC0C9 -:1002A00082E080938D0184E080938E011092900112 -:1002B00010928F0181E0809391018DE891E0089583 -:1002C00090E0FC013197EF30F105B0F5EA5AFF4FAD -:1002D0000C948209809180008F7703C08091800008 -:1002E0008F7D80938000089580918000877FF9CF73 -:1002F00084B58F7702C084B58F7D84BD08958091C9 -:1003000090008F7707C0809190008F7D03C080910F -:100310009000877F8093900008958091C0008F7730 -:1003200003C08091C0008F7D8093C00008958091AC -:10033000C200877F8093C20008951F93CF93DF93FD -:10034000282F30E0F901EC55FE4F8491F901EB576D -:10035000FE4FD491F901EA59FE4FC491CC23C1F06C -:10036000162F81110E946001EC2FF0E0EE0FFF1FAD -:10037000E85AFE4FA591B4919FB7F894111104C0AB -:100380008C91D095D82302C0EC91DE2BDC939FBFDB -:10039000DF91CF911F910895CF93DF9390E0FC01FF -:1003A000EB57FE4F2491FC01EA59FE4F84918823BC -:1003B00061F190E0880F991FFC01E65BFE4FC5914B -:1003C000D491FC01E85AFE4FA591B491611109C086 -:1003D0009FB7F8948881209582238883EC912E23FF -:1003E0000BC0623061F49FB7F8948881322F30954A -:1003F00083238883EC912E2B2C939FBF06C08FB74D -:10040000F894E8812E2B28838FBFDF91CF91089538 -:100410003FB7F8948091890190918A01A0918B0156 -:10042000B0918C0126B5A89B05C02F3F19F001960D -:10043000A11DB11D3FBFBA2FA92F982F8827820F6A -:10044000911DA11DB11DBC01CD0142E0660F771FBA -:10045000881F991F4A95D1F708958F929F92AF9266 -:10046000BF92CF92DF92EF92FF926B017C010E94CC -:1004700008024B015C01C114D104E104F104F1F064 -:100480000E940802DC01CB0188199909AA09BB095D -:10049000883E9340A105B10570F321E0C21AD1084E -:1004A000E108F10888EE880E83E0981EA11CB11CBB -:1004B000C114D104E104F10419F7DDCFFF90EF90EE -:1004C000DF90CF90BF90AF909F908F900895409114 -:1004D0006E0150916F0120916C0130916D014217B6 -:1004E0005307B4F49091E8009570E1F39091E8001F -:1004F00092FD19C08093F10080916E0190916F017F -:1005000001968F739927892B19F48EEF8093E80059 -:1005100080916E0190916F01019690936F0180938D -:100520006E0181E0089580E00895DF92EF92FF92DE -:100530000F931F93CF93DF93D82EF92EE42E062F1F -:1005400010E0C8010196880F0E94670283E00E94B4 -:100550006702CD2DDF2D0C0F1D1FC017D10789F0AD -:10056000E7FE03C0FE01849101C088810E946702FA -:10057000F82E80E00E9467028F2121968111EDCF35 -:1005800001C081E0DF91CF911F910F91FF90EF901B -:10059000DF900895DF92EF92FF920F931F93CF9316 -:1005A000DF93D82E8A017B01E40EF51EEB01CE15F8 -:1005B000DF0571F0D7FE03C0FE01849101C0888180 -:1005C0000E94670221968111F2CF8FEF9FEF01C049 -:1005D000C801DF91CF911F910F91FF90EF90DF90B5 -:1005E00008950F931F93CF93DF931F92CDB7DEB77C -:1005F00082E0898342E450E06AEC70E080E80E9487 -:10060000CA020E944C01DC0112960D911C911397B5 -:100610000115110589F0D801ED91FC910280F3815B -:10062000E02DBE016F5F7F4FC801099597FD04C0A3 -:10063000F80100851185ECCF89810F90DF91CF9172 -:100640001F910F910895615030F02091F100FC014D -:1006500020830196F8CF289A84E680939901089523 -:10066000CF92DF92EF92FF920F931F93CF93DF937E -:100670006C017A018B01C0E0D0E0CE15DF0581F07E -:10068000D8016D918D01D601ED91FC910190F08121 -:10069000E02DC6010995892B11F02196EECF7E0140 -:1006A000C701DF91CF911F910F91FF90EF90DF90E5 -:1006B000CF9008958F929F92AF92BF92CF92DF9288 -:1006C000EF92FF920F931F93CF93DF936C017B0107 -:1006D0008A0180910B01882309F45CC080919A0102 -:1006E000882309F457C08091720180FF05C0809172 -:1006F000E00082608093E000E801B12C8AEFA82E30 -:1007000093E0892E2AE3922E209711F4BB20D9F191 -:100710000E943B0181110AC0AA94AA20D9F161E08C -:1007200070E080E090E00E942D02EECF282F30E0B4 -:10073000C217D3070CF48C2F9FB7F8948092E9006E -:100740002091E80025FF1DC0282F30E0C21BD30BED -:10075000F701815020F041914093F100FACFE20E71 -:10076000F31EBB2019F09092E8000AC08091E800C7 -:1007700085FD07C09092E800BB24B394209709F050 -:10078000B12C9FBFC1CF5D9A84E680937101101692 -:10079000110644F081E090E0F6019383828380E0CB -:1007A00090E001C0C801DF91CF911F910F91FF90A0 -:1007B000EF90DF90CF90BF90AF909F908F90089573 -:1007C000CF93DF931F92CDB7DEB76983DC01ED9144 -:1007D000FC910280F381E02D41E050E0BE016F5FAB -:1007E0007F4F09950F90DF91CF91089583E080931B -:1007F000E9008091F200882319F08AE38093E800F1 -:1008000008950E943B0190E00895CF93DF931F92DB -:10081000CDB7DEB7FC018485958597FD05C02FEF28 -:100820003FEF358724870BC0CE0101960E940D0152 -:10083000019719F4898190E002C08FEF9FEF0F902C -:10084000DF91CF9108950F931F93CF93DF931F9262 -:10085000CDB7DEB78C01FC018485958597FF0EC06E -:10086000CE0101960E940D01019719F4898190E053 -:1008700002C08FEF9FEFF80195878487F801848588 -:1008800095850F90DF91CF911F910F910895FC01F5 -:100890008485958597FD0BC09FB7F89482E080937F -:1008A000E9008091F2009FBF90E0019608959FB704 -:1008B000F89482E08093E9008091F2009FBF90E07D -:1008C0000895089580E090E008950F931F93CF93CB -:1008D000DF93C7E0D0E0082F10E0B8010C2E02C073 -:1008E000759567950A94E2F761708EE00E949D010C -:1008F00061E081E00E949D0160E081E00E949D0135 -:10090000219758F7DF91CF911F910F91089500978C -:1009100069F0FC0101900020E9F73197AF01481B15 -:10092000590BBC018BE991E00C945A0380E090E0F4 -:1009300008958F929F92AF92BF920F931F93CF9380 -:10094000DF93CDB7DEB7A1970FB6F894DEBF0FBE29 -:10095000CDBF19A2423008F44AE08E010F5D1F4F4F -:10096000842E912CA12CB12CA50194010E94600928 -:10097000E62FB901CA0101501109EA3014F4E05D13 -:1009800001C0E95CD801EC93232B242B252B61F7C4 -:10099000C8010E948704A1960FB6F894DEBF0FBE6F -:1009A000CDBFDF91CF911F910F91BF90AF909F90DE -:1009B0008F9008950E9488091F920F920FB60F9290 -:1009C00011242F933F938F939F93AF93BF93809165 -:1009D000850190918601A0918701B09188013091A5 -:1009E000840123E0230F2D3720F40196A11DB11DB2 -:1009F00005C026E8230F0296A11DB11D2093840196 -:100A00008093850190938601A0938701B09388011C -:100A10008091890190918A01A0918B01B0918C0104 -:100A20000196A11DB11D8093890190938A01A09325 -:100A30008B01B0938C01BF91AF919F918F913F91AA -:100A40002F910F900FBE0F901F9018951F920F922D -:100A50000FB60F9211248F939F938091E100909194 -:100A6000E100937F9093E10083FF0FC01092E900B3 -:100A700091E09093EB001092EC0092E39093ED00E4 -:100A800010929A0198E09093F00082FF20C093E0CA -:100A90009093E9009091F200992319F09AE39093D2 -:100AA000E80090917101992339F090917101915072 -:100AB00090937101992389F190919901992339F0CB -:100AC00090919901915090939901992341F184FF5C -:100AD00010C08091E2008E7E81608093E200809160 -:100AE000E1008F7E8093E100809172018E7E8061B3 -:100AF00011C080FF16C08091E2008E7E80618093DD -:100B0000E2008091E1008E7E8093E100809172018D -:100B10008E7E81608093720104C05D98CDCF28984D -:100B2000D6CF9F918F910F900FBE0F901F90189569 -:100B30001F920F920FB60F921124CF92DF92EF9275 -:100B4000FF920F931F932F933F934F935F936F9356 -:100B50007F938F939F93AF93BF93EF93FF93CF9325 -:100B6000DF93CDB7DEB76C97DEBFCDBF1092E90043 -:100B70008091E80083FFFBC168E0CE0145960E94AA -:100B8000230382EF8093E8008D8987FF05C0909151 -:100B9000E80090FFFCCF03C09EEF9093E800982FF1 -:100BA000907609F0C6C09E894F89588D2F89F88CA0 -:100BB00091110CC0803829F4809173018093F10069 -:100BC00002C01092F1001092F10045C1913051F431 -:100BD000811141C14130510509F03DC1809173013E -:100BE0008D7F0BC0933061F4811135C141305105C7 -:100BF00009F031C1809173018260809373012BC130 -:100C0000953049F48091E80080FFFCCF822F806806 -:100C10008093E30020C1963009F05EC00B8D1C8DDF -:100C200022E01092E90010926F0110926E01F21210 -:100C300032C010926D0110926C010E94F10299E095 -:100C4000BE016F5F7F4FDB01E92F1D92EA95E9F747 -:100C50009983FA8291E09E8390EA98879AEF998728 -:100C600020916E0130916F01275F3F4F3C832B83B2 -:100C70008D831092E90010926F0110926E01109313 -:100C80006D0100936C0149E050E080E00E94CA02CF -:100C90000E94F102E0C010936D0100936C010E946C -:100CA0004C01DC0112960D911C9113970115110551 -:100CB00009F4BBC0D801ED91FC910480F581E02DD1 -:100CC000BE016B5E7F4FC8010995009709F0C7C050 -:100CD000F80100851185EACF973009F445C19830B5 -:100CE00021F481E08093F100B6C0993009F0B3C0DF -:100CF000837009F039C1EFE1F1E081E031E096E382 -:100D00002081211109C08EE78093EA001092EA0049 -:100D10008F8980939A019FC08093E9003093EB0004 -:100D200021912093EC009093ED008F5F873041F785 -:100D3000EACF8B8D9C8D1092E90010926F0110927A -:100D40006E0190936D0180936C01898D811153C068 -:100D50008E899D89913A49F4813209F005C147E0B5 -:100D600050E064E071E080E0BBC0913209F0FCC06B -:100D7000833269F48F89988DA0E0B0E08093000100 -:100D800090930101A0930201B093030164C08032EB -:100D900069F48091E80082FFFCCF67E084E091E095 -:100DA0000E9423038BEF8093E80055C0823209F044 -:100DB00052C08F8980930B01EEEFFFE785919491EC -:100DC0008B3F9C4D19F0E0E0F8E002C0EEEFFAE056 -:100DD0008091040190910501A0910601B091070155 -:100DE000803B9440A105B10509F09EC080910B01A4 -:100DF00080FF79C099C00E944C01FC0102811381DF -:100E00000115110509F4B0C0D801ED91FC910190D4 -:100E1000F081E02DBE016B5E7F4FC8010995811105 -:100E20001AC0F80100851185EBCFF1E0FF1609F437 -:100E30004EC0F3E0FF1298C08F89882309F44AC09E -:100E4000823089F440E86DE08EE291E00E949502E4 -:100E5000882309F489C08EEF8093E80088C01816B3 -:100E60001906CCF381C0813029F440E86BE082E2BE -:100E700091E0ECCF833009F077C00E944C01DC0197 -:100E80001296ED90FC9013978E010F5F1F4F680133 -:100E9000E114F10479F0D701ED91FC910680F7811E -:100EA000E02DB801C7010995080F111DF701E08475 -:100EB000F184EECFD8011C92F60101900020E9F7F1 -:100EC0003197BF016C197D0940E0C601BFCF60E1D9 -:100ED00071E002C06CE071E0FB01449150E080E8F9 -:100EE0000E94CA02B8CFEE3F2AE0F20751F080819B -:100EF00091818737A7E79A0721F09093FF0A8093A3 -:100F0000FE0A87E797E79183808380916000809352 -:100F100070019BE088E10FB6F894A895809360007B -:100F20000FBE9093600097CF80819181873797475C -:100F300009F091CFA895809160008861809360004E -:100F40008091700180936000EE3FBAE0FB0739F0BA -:100F50008091FE0A9091FF0A918380837CCF10924A -:100F6000FF0A1092FE0A77CF81E28093EB006C9625 -:100F70000FB6F894DEBF0FBECDBFDF91CF91FF91CA -:100F8000EF91BF91AF919F918F917F916F915F9101 -:100F90004F913F912F911F910F91FF90EF90DF9014 -:100FA000CF900F900FBE0F901F901895789484B536 -:100FB000826084BD84B5816084BD85B5826085BD55 -:100FC00085B5816085BD80916E00816080936E00E3 -:100FD00010928100809181008260809381008091D5 -:100FE0008100816080938100809180008160809386 -:100FF00080008091910082608093910080919100A7 -:101000008160809391008091900081608093900036 -:101010008091C10084608093C1008091C100826092 -:101020008093C1008091C10081608093C100809154 -:10103000C30081608093C3008091C0008260809370 -:10104000C0008091C20081608093C20080917A00CC -:10105000846080937A0080917A00826080937A0025 -:1010600080917A00816080937A0080917A00806814 -:1010700080937A0010929A0110927301109272017B -:101080008091D70081608093D70080EA8093D80058 -:1010900089B5806189BD89B5826089BD09B400FECA -:1010A000FDCF61E070E080E090E00E942D02809131 -:1010B000D8008F7C80618093D8008091E000807F91 -:1010C0008093E0008091E1008E7E8093E1008DE0CE -:1010D0008093E200559A209A5D9828988FEF9FEFB1 -:1010E0009093A8018093A7018BE991E00E944704A7 -:1010F000892B39F464EF71E080E090E00E942D02CA -:10110000F3CF61E081E00E94CC0161E08EE00E94BB -:10111000CC0161E080E10E94CC0161E082E00E94AC -:10112000CC01CDE2D1E060E089910E94CC0181E068 -:10113000C333D807C1F784E891E0E4E7F1E0119206 -:101140008E179F07E1F725E2822E21E0922E34E7E9 -:10115000E32E31E0F32E412C512C320160E080E18E -:101160000E949D0180E00E946504F40181914F017D -:101170000E94650461E080E10E949D019FE2C92E0A -:1011800091E0D92EE701312CF60121906F01222D3B -:1011900030E0F901EC55FE4F8491F901EB57FE4F19 -:1011A0000491F901EA59FE4F14911123A1F0811124 -:1011B0000E946001E12FF0E0EE0FFF1FE45CFE4FA4 -:1011C000A591B491EC910E2391E009F490E0092FE0 -:1011D0009130A1F503C000E010E030C0CE0184578B -:1011E00091405C01888181112AC083E391E00E94D3 -:1011F0008704B50180E090E04AE00E94990488E30A -:1012000091E00E948704622D70E080E090E04AE067 -:101210000E94990483E591E00E9487044AE0C3019B -:10122000B2010E94990486E691E00E94870488E654 -:1012300091E00E94870491E0988301C01882E1E068 -:10124000E8830329F02FF1703F2E249683E3C8161C -:1012500081E0D80609F098CFFF2311F061E001C0CA -:1012600060E082E00E949D019FEF491A590A690AD5 -:10127000790AEFEFEE1AFE0AF4E04F16510461040A -:10128000710409F06BCF80E090E0892B09F45BCF0B -:101290000E94000058CFEBE9F1E01382128288EE41 -:1012A00093E0A0E0B0E084839583A683B78380E1D8 -:1012B00091E0918380838FEF9FEF958784870895D6 -:1012C000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F4A -:1012D000EE1FFF1FA217B307E407F50720F0A21BBC -:1012E000B30BE40BF50B661F771F881F991F1A9429 -:1012F00069F760957095809590959B01AC01BD0153 -:10130000CF010895EE0FFF1F0590F491E02D099491 -:0E13100081E090E0F8940C948D09F894FFCFE2 -:10131E00FFFFFFFF00E100000000000000000000E2 -:10132E00E0035A030104F60347040504230400C135 -:10133E008081000000010204081020408004050690 -:10134E000708096B657920002070726573736564F8 -:10135E0020287265636569766564206F6E207069FA -:10136E006E2000202620656D6D69746564206F6E99 -:0C137E002070696E200029000D0A00009C +:100000000C94EA000C9412010C9412010C9412014D +:100010000C9412010C9412010C9412010C94120114 +:100020000C9412010C9412010C94B6040C94280543 +:100030000C9412010C9412010C9412010C941201F4 +:100040000C9412010C9412010C9412010C941201E4 +:100050000C9412010C9412010C9412010C94E109FD +:100060000C9412010C9412010C9412010C941201C4 +:100070000C9412010C9412010C9412010C941201B4 +:100080000C9412010C9412010C9412010C941201A4 +:100090000C9412010C9412010C9412010C94120194 +:1000A0000C9412010C9412010C9412012E093109C6 +:1000B000200924092A095209520952093509390926 +:1000C0003D094309470952094D0900000000240079 +:1000D00027002A002D003000000000002500280025 +:1000E0002B002E003100080B00020202010009045F +:1000F0000000010202000005240010010524010196 +:1001000001042402060524060001070581031000EE +:100110004009040100020A00000007050202400035 +:1001200000070583024000000403090412010002D5 +:10013000EF02014041233700000101020301417237 +:100140006475696E6F204C4C430041726475696E32 +:100150006F204D6963726F00070605040100080AED +:100160000B0C0D09000000002300260029002C00C4 +:100170002F00040404040403040502020202040321 +:100180000202020206060606060604040202020431 +:100190000404080201104080401020408040800884 +:1001A00002040180402010020110801020404020F5 +:1001B0000000000200090F0000030401000C000011 +:1001C000000000000000000000000000000000002F +:1001D000B00B940B11241FBECFEFDAE0DEBFCDBF12 +:1001E00011E0A0E0B1E0E6EDFAE102C005900D9269 +:1001F000A23BB107D9F722E0A2EBB1E001C01D920A +:10020000AF3AB207E1F710E0C9EED0E004C02197A1 +:10021000FE010E942B0CC83ED107C9F70E942B0A91 +:100220000C945E0D0C9400004091B8015091B901FE +:100230002091B6013091B70142175307B4F4909161 +:10024000E8009570E1F39091E80092FD19C0809369 +:10025000F1008091B8019091B90101968F739927AF +:10026000892B19F48EEF8093E8008091B80190916A +:10027000B90101969093B9018093B80181E0089586 +:1002800080E00895DF92EF92FF920F931F93CF9338 +:10029000DF93D82EF92EE42E062F10E0C801019628 +:1002A000880F0E94140183E00E941401CD2DDF2DE0 +:1002B0000C0F1D1FC017D10789F0E7FE03C0FE0118 +:1002C000849101C088810E941401F82E80E00E9470 +:1002D00014018F2121968111EDCF01C081E0DF91C2 +:1002E000CF911F910F91FF90EF90DF900895DF92D3 +:1002F000EF92FF920F931F93CF93DF93D82E8A0133 +:100300007B01E40EF51EEB01CE15DF0571F0D7FE83 +:1003100003C0FE01849101C088810E9414012196CE +:100320008111F2CF8FEF9FEF01C0C801DF91CF9114 +:100330001F910F91FF90EF90DF900895615030F082 +:100340002091F100FC0120830196F8CF289A84E6E1 +:1003500080931E020895CF92DF92EF92FF920F9347 +:100360001F93CF93DF936C017A018B01C0E0D0E043 +:10037000CE15DF0581F0D8016D918D01D601ED918B +:10038000FC910190F081E02DC6010995892B11F0B7 +:100390002196EECF7E01C701DF91CF911F910F9182 +:1003A000FF90EF90DF90CF900895CF93DF931F924F +:1003B000CDB7DEB76983DC01ED91FC910280F3815A +:1003C000E02D41E050E0BE016F5F7F4F09950F9037 +:1003D000DF91CF91089583E08093E9008091F2004E +:1003E000882319F08AE38093E8000895FC0184854E +:1003F000958597FD0BC09FB7F89482E08093E90044 +:100400008091F2009FBF90E0019608959FB7F89405 +:1004100082E08093E9008091F2009FBF90E0089510 +:10042000089580E090E00895FC0192818389691726 +:1004300010F0982F04C0962F96959695969589174B +:10044000A9F00188F289E02DE90FF11D97FDFA95D9 +:10045000677081E090E001C0880F6A95EAF720811B +:10046000282381E090E021F480E0089580E090E08E +:100470000895DC0112963C91129753962C916317C4 +:1004800010F0E22F04C0E62FE695E695E6952E17CC +:1004900019F10E2E000CFF0BDC0151962D913C91B1 +:1004A00052976770E20FF31F21E030E002C0220F85 +:1004B000331F6A95E2F7442319F03081232B04C0DF +:1004C00020953095308123232083DC01ED91FC9130 +:1004D0000484F585E02D09940895E091B401F0912C +:1004E000B501309741F09381891740F094818917C5 +:1004F00028F4CF01089580E090E008950580F6810A +:10050000E02DEFCFCF93C82F0E946D02009769F0C6 +:10051000DC0113962C9113976C2F621BED91FC91CB +:100520000680F781E02DCF91099480E090E0CF9193 +:100530000895CF93C82F0E946D02009769F0DC01E7 +:1005400013962C9113976C2F621BED91FC910480F4 +:10055000F581E02DCF91099480E090E0CF9108954E +:10056000CF93DF938B3208F039C090E0FC01EF5657 +:10057000FE4F2491FC01EE58FE4F8491882309F42C +:1005800042C090E0880F991FFC01E653FF4FC591D0 +:10059000D491FC01E852FF4FA591B491611109C0BB +:1005A0009FB7F8948881209582238883EC912E232D +:1005B0000BC0623061F49FB7F8948881322F309578 +:1005C00083238883EC912E2B2C939FBF1CC08FB765 +:1005D000F894E8812E2B28838FBF15C0D62FC82F03 +:1005E0000E946D02009779F0DC0113962C9113970D +:1005F0006C2F621BED91FC910190F081E02D4D2F4D +:10060000DF91CF910994DF91CF910895CF93DF933C +:10061000EC0161E08C850E94B00261E08D850E9452 +:10062000B00261E08E850E94B002E881F981068403 +:10063000F785E02DCE01DF91CF910994642FFC0165 +:1006400081850C94B0020F931F93CF938C01C0E06F +:100650008C2F90E0F801268537858217930758F490 +:1006600022853385F901E80FF91F61E080810E943E +:10067000B002CF5FEDCFCF911F910F9108950895F4 +:1006800008950895CF93DF93FC0187E191E0918372 +:100690008083A781B085109731F085819681169669 +:1006A0009C938E9315978091B2019091B301E817B6 +:1006B000F90721F4B093B301A093B201C581D681AB +:1006C000209711F0B887AF838091B4019091B50164 +:1006D000E817F90721F4D093B501C093B401DF9175 +:1006E000CF9108950E94520D0F931F93CF93DF93E4 +:1006F0001F92CDB7DEB782E0898342E450E066EE18 +:1007000070E080E80E9477010E940209DC011296E5 +:100710000D911C9113970115110589F0D801ED91E8 +:10072000FC910280F381E02DBE016F5F7F4FC80115 +:10073000099597FD04C0F80100851185ECCF8981EA +:100740000F90DF91CF911F910F9108958F929F92FB +:10075000AF92BF92CF92DF92EF92FF920F931F93CF +:10076000CF93DF936C017B018A0180910C01882378 +:1007700009F45CC080911F02882309F457C080915E +:10078000BC0180FF05C08091E00082608093E000A2 +:10079000E801B12C8AEFA82E93E0892E2AE3922E4D +:1007A000209711F4BB20D9F10E94F10881110AC0F1 +:1007B000AA94AA20D9F161E070E080E090E00E9464 +:1007C000A709EECF282F30E0C217D3070CF48C2FE7 +:1007D0009FB7F8948092E9002091E80025FF1DC0A2 +:1007E000282F30E0C21BD30BF701815020F041913C +:1007F0004093F100FACFE20EF31EBB2019F0909265 +:10080000E8000AC08091E80085FD07C09092E800EA +:10081000BB24B394209709F0B12C9FBFC1CF5D9A40 +:1008200084E68093BB011016110644F081E090E04D +:10083000F6019383828380E090E001C0C801DF91DC +:10084000CF911F910F91FF90EF90DF90CF90BF90CD +:10085000AF909F908F9008950E94F10890E00895C6 +:100860000F931F93CF93DF931F92CDB7DEB78C0109 +:10087000FC018485958597FF0EC0CE0101960E94EC +:10088000C308019719F4898190E002C08FEF9FEFB0 +:10089000F80195878487F801848595850F90DF910D +:1008A000CF911F910F910895CF93DF931F92CDB7F2 +:1008B000DEB7FC018485958597FD05C02FEF3FEFDE +:1008C000358724870BC0CE0101960E94C30801978B +:1008D00019F4898190E002C08FEF9FEF0F90DF91B4 +:1008E000CF910895CF93DF93EC01488950E060E009 +:1008F00070E089899A890E94570DE881F981048402 +:10090000F585E02DCE01DF91CF910994CF93DF9350 +:10091000EC01888981506823CE010E94970889855F +:100920008B3220F4DF91CF910C945309DF91CF915A +:100930000C949902CF93DF93EC018889815068234E +:10094000CE010E94970889858B3218F40E947C0999 +:1009500002C00E94820289858B3220F4DF91CF9100 +:100960000C947C09DF91CF910C9482021F920F921C +:100970000FB60F9211248F939F938091E100909175 +:10098000E100937F9093E10083FF0FC01092E90094 +:1009900091E09093EB001092EC0092E39093ED00C5 +:1009A00010921F0298E09093F00082FF20C093E025 +:1009B0009093E9009091F200992319F09AE39093B3 +:1009C000E8009091BB01992339F09091BB019150BF +:1009D0009093BB01992389F190911E02992339F0DC +:1009E00090911E02915090931E02992341F184FF31 +:1009F00010C08091E2008E7E81608093E200809141 +:100A0000E1008F7E8093E1008091BC018E7E806149 +:100A100011C080FF16C08091E2008E7E80618093BD +:100A2000E2008091E1008E7E8093E1008091BC0124 +:100A30008E7E81608093BC0104C05D98CDCF2898E4 +:100A4000D6CF9F918F910F900FBE0F901F9018954A +:100A50001F920F920FB60F921124CF92DF92EF9256 +:100A6000FF920F931F932F933F934F935F936F9337 +:100A70007F938F939F93AF93BF93EF93FF93CF9306 +:100A8000DF93CDB7DEB76C97DEBFCDBF1092E90024 +:100A90008091E80083FFFBC168E0CE0145960E948B +:100AA0009E0182EF8093E8008D8987FF05C09091B9 +:100AB000E80090FFFCCF03C09EEF9093E800982FD2 +:100AC000907609F0C6C09E894F89588D2F89F88C81 +:100AD00091110CC0803829F48091BD018093F10000 +:100AE00002C01092F1001092F10045C1913051F412 +:100AF000811141C14130510509F03DC18091BD01D5 +:100B00008D7F0BC0933061F4811135C141305105A7 +:100B100009F031C18091BD0182608093BD012BC17C +:100B2000953049F48091E80080FFFCCF822F8068E7 +:100B30008093E30020C1963009F05EC00B8D1C8DC0 +:100B400022E01092E9001092B9011092B801F2125D +:100B500032C01092B7011092B6010E94740399E05E +:100B6000BE016F5F7F4FDB01E92F1D92EA95E9F728 +:100B70009983FA8291E09E8390EA98879AEF998709 +:100B80002091B8013091B901275F3F4F3C832B83FF +:100B90008D831092E9001092B9011092B801109360 +:100BA000B7010093B60149E050E080E00E94770170 +:100BB0000E947403E0C01093B7010093B6010E9435 +:100BC0000209DC0112960D911C9113970115110574 +:100BD00009F4BBC0D801ED91FC910480F581E02DB2 +:100BE000BE016B5E7F4FC8010995009709F0C7C031 +:100BF000F80100851185EACF973009F445C1983096 +:100C000021F481E08093F100B6C0993009F0B3C0BF +:100C1000837009F039C1EAE2F1E081E031E096E366 +:100C20002081211109C08EE78093EA001092EA002A +:100C30008F8980931F029FC08093E9003093EB005F +:100C400021912093EC009093ED008F5F873041F766 +:100C5000EACF8B8D9C8D1092E9001092B901109211 +:100C6000B8019093B7018093B601898D811153C06B +:100C70008E899D89913A49F4813209F005C147E096 +:100C800050E065E071E080E0BBC0913209F0FCC04B +:100C9000833269F48F89988DA0E0B0E080930101E0 +:100CA00090930201A0930301B093040164C08032C9 +:100CB00069F48091E80082FFFCCF67E085E091E075 +:100CC0000E949E018BEF8093E80055C0823209F0AC +:100CD00052C08F8980930C01EEEFFFE785919491CC +:100CE0008B3F9C4D19F0E0E0F8E002C0EEEFFAE037 +:100CF0008091050190910601A0910701B091080132 +:100D0000803B9440A105B10509F09EC080910C0183 +:100D100080FF79C099C00E940209FC010281138101 +:100D20000115110509F4B0C0D801ED91FC910190B5 +:100D3000F081E02DBE016B5E7F4FC80109958111E6 +:100D40001AC0F80100851185EBCFF1E0FF1609F418 +:100D50004EC0F3E0FF1298C08F89882309F44AC07F +:100D6000823089F440E86DE08AE491E00E9442011B +:100D7000882309F489C08EEF8093E80088C0181694 +:100D80001906CCF381C0813029F440E86BE08EE392 +:100D900091E0ECCF833009F077C00E940209DC01BA +:100DA0001296ED90FC9013978E010F5F1F4F680114 +:100DB000E114F10479F0D701ED91FC910680F781FF +:100DC000E02DB801C7010995080F111DF701E08456 +:100DD000F184EECFD8011C92F60101900020E9F7D2 +:100DE0003197BF016C197D0940E0C601BFCF6CE2AD +:100DF00071E002C068E271E0FB01449150E080E8DC +:100E00000E947701B8CFEE3F2AE0F20751F08081CF +:100E100091818737A7E79A0721F09093FF0A809383 +:100E2000FE0A87E797E79183808380916000809333 +:100E3000BA019BE088E10FB6F894A8958093600012 +:100E40000FBE9093600097CF80819181873797473D +:100E500009F091CFA895809160008861809360002F +:100E60008091BA0180936000EE3FBAE0FB0739F051 +:100E70008091FE0A9091FF0A918380837CCF10922B +:100E8000FF0A1092FE0A77CF81E28093EB006C9606 +:100E90000FB6F894DEBF0FBECDBFDF91CF91FF91AB +:100EA000EF91BF91AF919F918F917F916F915F91E2 +:100EB0004F913F912F911F910F91FF90EF90DF90F5 +:100EC000CF900F900FBE0F901F9018951F93CF9348 +:100ED000DF93C82F162F8B3240F5682F70E0FB018F +:100EE000E055FE4F8491FB01EF56FE4FD491FB017C +:100EF000EE58FE4FC491CC2361F181110E94160976 +:100F0000EC2FF0E0EE0FFF1FE852FF4FA591B491D8 +:100F10009FB7F894111104C08C91D095D82302C0CA +:100F2000EC91DE2BDC939FBF14C00E946D020097F2 +:100F300081F0DC0113962C9113976C2F621BED91BD +:100F4000FC910280F381E02D412FDF91CF911F9121 +:100F50000994DF91CF911F910895BF92CF92DF92B4 +:100F6000EF92FF920F931F93CF93DF93EC0160E01A +:100F70008E850E9466078F8581112BC010E08889BD +:100F8000181708F04FC0E989FA89E10FF11DC080F8 +:100F90000D85BC84E12CF12CD12CB6010E2C02C0A5 +:100FA000759567950A94E2F761708B2D0E9466072C +:100FB00061E0802F0E94660760E0802F0E94660734 +:100FC0008FEFE81AF80A88E0E816F10431F71F5F9E +:100FD000D6CF1889115017FD25C0E989FA89E10F8C +:100FE000F11D17FDFA95C0800D85BC8487E0E82EC1 +:100FF000F12CD12CB6010E2C02C0759567950A9480 +:10100000E2F761708B2D0E94660761E0802F0E94DD +:10101000660760E0802F0E94660781E0E81AF10809 +:1010200048F7D8CF61E08E85DF91CF911F910F9166 +:10103000FF90EF90DF90CF90BF900C9466073FB782 +:10104000F89480919B0290919C02A0919D02B09196 +:101050009E0226B5A89B05C02F3F19F00196A11D41 +:10106000B11D3FBFBA2FA92F982F8827820F911D3E +:10107000A11DB11DBC01CD0142E0660F771F881F85 +:10108000991F4A95D1F70895009769F0FC010190E6 +:101090000020E9F73197AF01481B590BBC0180E2F2 +:1010A00092E00C94A60380E090E008958F929F92C6 +:1010B000AF92BF920F931F93CF93DF93CDB7DEB75D +:1010C000A1970FB6F894DEBF0FBECDBF19A2423074 +:1010D00008F44AE08E010F5D1F4F842E912CA12C45 +:1010E000B12CA50194010E94090CE62FB901CA0197 +:1010F00001501109EA3014F4E05D01C0E95CD80147 +:10110000EC93232B242B252B61F7C8010E94440864 +:10111000A1960FB6F894DEBF0FBECDBFDF91CF9181 +:101120001F910F91BF90AF909F908F900895EF9275 +:10113000FF920F931F93CF93DF938C01D62FC0E0C4 +:10114000EE24E394F12C8C2F90E0F801268537856E +:101150008217930788F4B7010C2E01C0660F0A941A +:10116000EAF76D2322853385F901E80FF91F8081A5 +:101170000E946607CF5FE7CFDF91CF911F910F915C +:10118000FF90EF90089520911F02211103C08FEF6F +:101190009FEF08955FB7F89422E02093E900209133 +:1011A000F20030E01216130614F421E030E0422F72 +:1011B000FC0184E6415038F0289A80931E029091F9 +:1011C000F1009193F7CF2115310521F08091F200C4 +:1011D000882319F05FBFC90108958BE68093E8006A +:1011E000F9CF2FB7F89483E08093E9009091E8005D +:1011F000892F807295FF04C09091F20080E4891BD2 +:101200002FBF08958091A30281110DC082E08093C9 +:101210009F0284E08093A0021092A2021092A10289 +:1012200081E08093A3028FE992E0089590E0FC01B1 +:101230003197EF30F105B0F5EA5AFF4F0C942B0CC3 +:10124000809180008F7703C0809180008F7D809394 +:101250008000089580918000877FF9CF84B58F77D3 +:1012600002C084B58F7D84BD0895809190008F77F2 +:1012700007C0809190008F7D03C080919000877F90 +:101280008093900008958091C0008F7703C0809173 +:10129000C0008F7D8093C00008958091C200877F39 +:1012A0008093C2000895CF93DF93282F30E0F90197 +:1012B000E055FE4F8491F901EF56FE4FD491F901AC +:1012C000EE58FE4FC491CC2391F081110E94160973 +:1012D000EC2FF0E0EE0FFF1FEC59FE4FA591B491FB +:1012E000EC91ED2381E090E021F480E002C080E009 +:1012F00090E0DF91CF910895823108F08251E82F7C +:10130000F0E0E85AFE4FE49180917B00E3FB222756 +:1013100020F930E095E0220F331F9A95E1F78F7D99 +:10132000282B20937B00E770E064E0937C008091A1 +:101330007A00806480937A0080917A0086FDFCCFE9 +:10134000809178002091790090E0922B08958F92FF +:101350009F92AF92BF92CF92DF92EF92FF926B017A +:101360007C010E941F084B015C01C114D104E104FF +:10137000F104F1F00E941F08DC01CB0188199909E2 +:10138000AA09BB09883E9340A105B10570F321E08D +:10139000C21AD108E108F10888EE880E83E0981E91 +:1013A000A11CB11CC114D104E104F10419F7DDCF73 +:1013B000FF90EF90DF90CF90BF90AF909F908F9075 +:1013C00008951F920F920FB60F9211242F933F93FF +:1013D0008F939F93AF93BF938091970290919802C0 +:1013E000A0919902B0919A023091960223E0230FC6 +:1013F0002D3720F40196A11DB11D05C026E8230F4D +:101400000296A11DB11D209396028093970290939E +:101410009802A0939902B0939A0280919B029091B6 +:101420009C02A0919D02B0919E020196A11DB11D4A +:1014300080939B0290939C02A0939D02B0939E0286 +:10144000BF91AF919F918F913F912F910F900FBEC0 +:101450000F901F901895789484B5826084BD84B5F0 +:10146000816084BD85B5826085BD85B5816085BD9F +:1014700080916E00816080936E0010928100809157 +:1014800081008260809381008091810081608093DF +:101490008100809180008160809380008091910024 +:1014A000826080939100809191008160809391008F +:1014B000809190008160809390008091C100846051 +:1014C0008093C1008091C10082608093C1008091AF +:1014D000C10081608093C1008091C30081608093CE +:1014E000C3008091C00082608093C0008091C200E0 +:1014F00081608093C20080917A00846080937A003A +:1015000080917A00826080937A0080917A00816075 +:1015100080937A0080917A00806880937A0010929C +:101520001F021092BD011092BC018091D700816012 +:101530008093D70080EA8093D80089B5806189BD07 +:1015400089B5826089BD09B400FEFDCF61E070E01D +:1015500080E090E00E94A7098091D8008F7C806194 +:101560008093D8008091E000807F8093E00080919C +:10157000E1008E7E8093E1008DE08093E200559A39 +:10158000209A5D9828988FEF9FEF90932D0280937B +:101590002C0280E292E00E94F601892B39F464EF7C +:1015A00071E080E090E00E94A709F3CF06E311E02C +:1015B000C0E3D1E060E089910E94B0020C171D07E2 +:1015C000C9F78EEE91E0EEEBF1E011928E179F07D6 +:1015D000E1F73324339490E0A92E90E0B92E0EEB7E +:1015E00011E0412C512C3201E80180E3E82E81E02A +:1015F000F82E912CF70121907F01FAE2822DF2154D +:1016000018F00E94530902C00E949902882E21E01E +:1016100082132FC0CE018E5B91406C0188818111B5 +:1016200029C089E791E00E944408B60180E090E07B +:101630004AE00E9456088EE791E00E944408622D1D +:1016400070E080E090E04AE00E94560889E991E06D +:101650000E9444084AE0C301B2010E9456088CEA85 +:1016600091E00E9444088EEA91E00E94440838828A +:1016700001C01882892D90E08829992493940097BD +:1016800009F4912C6096E6E3EE16E1E0FE0609F01F +:10169000B1CF892B11F061E001C060E082E00E94CF +:1016A0006607FFEF4F1A5F0A6F0A7F0A0F5F1F4F2F +:1016B00020E1421651046104710409F095CFA11490 +:1016C000B10409F48CCF0E94000089CFFC0187E1AE +:1016D00091E091838083628316821582108617823F +:1016E0008091B4019091B501892B21F4F093B5015B +:1016F000E093B401A091B201B091B301B087A78388 +:10170000109721F01696FC93EE931597F093B30182 +:10171000E093B20116821582809100018383680FE5 +:101720006483609300010895E0E7F2E08CE491E0C7 +:1017300091838083818992890E94C90C80E792E01D +:101740000E944203E4E8F2E082E691E09183808324 +:10175000848595850E94C90C84E892E00C9442032C +:10176000CF93DF93E0E2F2E01382128288EE93E0FF +:10177000A0E0B0E084839583A683B7838AE391E0F9 +:10178000918380838FEF9FEF9587848760E284E861 +:1017900092E00E94660BE4E8F2E082E691E0918339 +:1017A00080838CE1818784E791E093878287158627 +:1017B000148685E090E09787868780E290E0918BA1 +:1017C000808BCF010E94230360E180E792E00E94BA +:1017D000660BC0E7D2E08CE491E099838883198698 +:1017E00081E08A8792E09B872EE02C878D8720E11D +:1017F0002E878F878FEF8B8B2A83988B82E090E0E8 +:101800000E94310C9A8B898BCE01DF91CF910C9481 +:101810000603A1E21A2EAA1BBB1BFD010DC0AA1FC5 +:10182000BB1FEE1FFF1FA217B307E407F50720F049 +:10183000A21BB30BE40BF50B661F771F881F991FC4 +:101840001A9469F760957095809590959B01AC010D +:10185000BD01CF010895EE0FFF1F0590F491E02D1B +:1018600009940F931F93CF93DF938230910510F467 +:1018700082E090E0E091AD02F091AE0220E030E035 +:10188000A0E0B0E0309719F14081518102811381CD +:1018900048175907C8F08417950769F4109731F075 +:1018A00012960C93129713961C9327C00093AD02C7 +:1018B0001093AE0222C02115310519F042175307CB +:1018C00018F49A01BD01EF01DF01F801DBCF21150A +:1018D0003105F9F0281B390B2430310580F48A8159 +:1018E0009B816115710521F0FB019383828304C004 +:1018F0009093AE028093AD02FE01329644C0FE0189 +:10190000E20FF31F81939193225031093983288389 +:101910003AC02091AB023091AC02232B41F42091CC +:101920000F01309110013093AC022093AB02209153 +:101930000D0130910E012115310541F42DB73EB74F +:101940004091110150911201241B350BE091AB0223 +:10195000F091AC02E217F307A0F42E1B3F0B2817FF +:10196000390778F0AC014E5F5F4F2417350748F018 +:101970004E0F5F1F5093AC024093AB028193919343 +:1019800002C0E0E0F0E0CF01DF91CF911F910F9115 +:101990000895CF93DF93009709F481C0FC0132973B +:1019A00013821282A091AD02B091AE02109781F421 +:1019B00020813181820F931F2091AB023091AC02C4 +:1019C0002817390751F5F093AC02E093AB0267C0DA +:1019D000ED0120E030E0CE17DF0740F44A815B8163 +:1019E0009E0141155105F1F0EA01F5CFD383C28381 +:1019F00040815181840F951FC817D90759F48881F8 +:101A00009981840F951F0296918380838A819B819F +:101A1000938382832115310529F4F093AE02E0937C +:101A2000AD023DC0E901FB83EA8349915991C40F9E +:101A3000D51FEC17FD0761F480819181840F951FFC +:101A40000296E90199838883828193819B838A83AB +:101A5000E0E0F0E012968D919C911397009719F0B9 +:101A6000FD01DC01F7CF8D919C9111979D012E5FB7 +:101A70003F4F820F931F2091AB023091AC02281789 +:101A8000390769F4309729F41092AE021092AD0232 +:101A900002C013821282B093AC02A093AB02DF911A +:101AA000CF91089581E090E0F8940C945E0DDC01F4 +:101AB00001C06D9341505040E0F7089510E0C9EE29 +:101AC000D0E004C0FE010E942B0C2196CA3ED10733 +:061AD000C9F7F894FFCFF6 +:101AD6002BFFFFFFFF00E10000000000000000AF49 +:101AE6000280000000000041034103400340033F21 +:101AF60003100210021002100200C18081000000D3 +:101B060004050607080900000000D501A6032C04F9 +:101B1600EB01F601540430040000000041033902D1 +:101B2600140240033F030603AD07720410020000CF +:101B360000001E03410386049A043F032303100298 +:101B4600100210020F151413126B65792000207015 +:101B5600726573736564202872656365697665646A +:101B6600206F6E2070696E2000202620656D6D69DD +:101B7600746564206F6E2070696E200029000D0A5E +:021B860000005D :00000001FF diff --git a/.pioenvs/structure.hash b/.pioenvs/structure.hash index e17ddd3..d647d10 100644 --- a/.pioenvs/structure.hash +++ b/.pioenvs/structure.hash @@ -1,5 +1 @@ -<<<<<<< HEAD -00095dc6158c120f08d4fcd514993d9fcecb9e31 -======= -d53bd8f470f949b5d5179e009803692baf79d4ac ->>>>>>> 3a7a887ef1037a6fa80f7dbd7add48420e8449a5 +ff40efac42d76dcfb6ef5cb24bb1f872944d1abf \ No newline at end of file diff --git a/Arduino-MIDI.pdf b/Arduino-MIDI.pdf new file mode 100644 index 0000000..426eb1d Binary files /dev/null and b/Arduino-MIDI.pdf differ diff --git a/build.log b/build.log index cd341b9..1693750 100644 --- a/build.log +++ b/build.log @@ -1,19 +1,18 @@ Processing micro (platform: atmelavr; board: micro; framework: arduino) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/micro.html PLATFORM: Atmel AVR > Arduino Micro HARDWARE: ATMEGA32U4 16MHz 2.50KB RAM (28KB Flash) Library Dependency Finder -> http://bit.ly/configure-pio-ldf LDF MODES: FINDER(chain) COMPATIBILITY(soft) -Collected 33 compatible libraries +Collected 12 compatible libraries Scanning dependencies... -No dependencies +Dependency Graph +|-- 3.1.0 #e895a51 +| |-- 1.0.3 +| |-- 1.0 Compiling .pioenvs/micro/src/main.cpp.o -Linking .pioenvs/micro/firmware.elf -Building .pioenvs/micro/firmware.hex -Checking size .pioenvs/micro/firmware.elf -Memory Usage -> http://bit.ly/pio-memory-usage -DATA: [= ] 8.6% (used 219 bytes from 2560 bytes) -PROGRAM: [== ] 17.3% (used 4962 bytes from 28672 bytes) -==================================================================================== [SUCCESS] Took 1.62 seconds ==================================================================================== +Compiling .pioenvs/micro/lib7af/MIDI controller/MIDI_Outputs/Digital.cpp.o +Compiling .pioenvs/micro/lib7af/MIDI controller/MIDI_Outputs/DigitalCC.cpp.o +Compiling .pioenvs/micro/lib7af/MIDI controller/MIDI_Outputs/DigitalLatch.cpp.o diff --git a/src/main.cpp b/src/main.cpp index 945b304..be80bf8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,5 @@ #include -// #include +#include #define s * 1000 @@ -13,7 +13,7 @@ const uint8_t scl{3}; const uint8_t mux_sig{A10}; const uint8_t mux_addr[MUX_ADDRSIZE]{15, 21, 20, 19, 18}; /* ShiftRegister (OUT) */ -#define SHIFT_OUTPUTSIZE 4 +#define SHIFT_OUTPUTSIZE 16 const uint8_t shift_data{14}; const uint8_t shift_latch{16}; const uint8_t shift_clock{1}; @@ -24,9 +24,9 @@ const uint8_t keyboard_in[KEYBOARD_INSIZE]{4, 5, 6, 7, 8, 9}; /* Components */ /* GPIO (I2C) */ /* Multiplexer */ -// AnalogMultiplex multiplexer(mux_sig, mux_addr); +AnalogMultiplex multiplexer(mux_sig, mux_addr); /* ShiftRegister (OUT) */ -// ShiftRegisterOut shiftRegister(shift_data, shift_clock, shift_latch, MSBFIRST, SHIFT_OUTPUTSIZE); +ShiftRegisterOut shiftRegister(shift_data, shift_clock, shift_latch, MSBFIRST, SHIFT_OUTPUTSIZE); /* keyboard (IN) */ /* Midi links */ @@ -39,7 +39,7 @@ const uint8_t keyboard_in[KEYBOARD_INSIZE]{4, 5, 6, 7, 8, 9}; // {multiplexer.pin(7), MIDI_CC::Channel_Volume, 8} // }; -bool ref[4*4]; +bool ref[6*16]; void setup() { Serial.begin(115200); @@ -47,87 +47,40 @@ void setup() { delay(.5 s); } - pinMode(shift_clock, OUTPUT); - pinMode(shift_data, OUTPUT); - pinMode(shift_latch, OUTPUT); - pinMode(2, OUTPUT); - - for (size_t i = 0; i < KEYBOARD_INSIZE; i++) { - pinMode(keyboard_in[i], INPUT); + for (size_t i = 0; i < KEYBOARD_INSIZE; ++i) { + ExtIO::pinMode(keyboard_in[i], INPUT); } - for (size_t i = 0; i < 4*4; i++) { + for (size_t i = 0; i < 6*8; ++i) { ref[i] = false; } } -void scanLineOut(int colNum); - - void loop() { - // long start = millis(); - // for (size_t i = 0; i < 4; i++) { - // val[i] = multiplexer.analogRead(i); - // if (val[i] != ref[i]) { - // Serial.print("p["); - // Serial.print(i, DEC); - // Serial.print("] = "); - // Serial.println(val[i], DEC); - // ref[i] = val[i]; - // - // } - // } - // val[8] = readCapacitivePin(2); - // if (abs(val[8] - ref[8]) >= 2) { - // if (val[8] > ref[8]) { - // // Serial.print("loop() time : "); - // // Serial.println(lastLoop, DEC); - // // Serial.print("average : "); - // // Serial.println(loopAverage, DEC); - // Serial.println(val[8], DEC); - // } - // ref[8] = val[8]; - // } - - - // if (val[0] >= 500) { - // digitalWrite(0, HIGH); - // } else { - // digitalWrite(0, LOW); - // } - - for (size_t i = 0; i < 4; i++) { - scanLineOut(i); + for (size_t i = 0; i < 16; ++i) { + shiftRegister.pin(i); uint8_t rowValue[KEYBOARD_INSIZE]; bool pressed = false; - for (size_t j = 0; j < 4; j++) { - if ((rowValue[i] = digitalRead(keyboard_in[j + 2])) == HIGH) { - if (!ref[j * 4 + i]) { + for (size_t j = 0; j < 6; ++j) { + if ((rowValue[i] = ExtIO::digitalRead(keyboard_in[j])) == HIGH) { + if (!ref[j * 16 + i]) { Serial.print("key "); - Serial.print(j * 4 + i); + Serial.print(j * 16 + i); Serial.print(" pressed (received on pin "); - Serial.print(keyboard_in[j + 2]); + Serial.print(keyboard_in[j], DEC); Serial.print(" & emmited on pin "); Serial.print(i); Serial.println(")"); - ref[j * 4 + i] = true; + ref[j * 16 + i] = true; } } else { - - ref[j * 4 + i] = false; + ref[j * 16 + i] = false; } - ref[j * 4 + i] = true; - pressed |= rowValue[i]; - } - if (pressed) { - digitalWrite(2, HIGH); - } else { - digitalWrite(2, LOW); } } - // for (uint8_t i = 0; i < 8; i++) { + // for (uint8_t i = 0; i < 8; ++i) { // byte bitsToSend = 0b00000001 << i; // digitalWrite(shift_latch, LOW); // shiftOut(shift_data, shift_clock, MSBFIRST, bitsToSend); @@ -154,27 +107,3 @@ void loop() { // loopAverage = (loopAverage + lastLoop) / 2; //delay(.5 s); } -byte bits[] = { - 0b00000001, - 0b00000010, - 0b00000100, - 0b00001000, - 0b00010000, - 0b00100000, - 0b01000000, - 0b10000000 -}; - -void scanLineOut(int colNum) { - digitalWrite(shift_latch, LOW); - - if(0 <= colNum && colNum <= 7) { - shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); //right sr - shiftOut(shift_data, shift_clock, MSBFIRST, bits[colNum]); //left sr - } else { - shiftOut(shift_data, shift_clock, MSBFIRST, bits[colNum-8]); //right sr - shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); //left sr - } - - digitalWrite(shift_latch, HIGH); -} diff --git a/src/main.cpp.bak2 b/src/main.cpp.bak2 new file mode 100644 index 0000000..3daf0a5 --- /dev/null +++ b/src/main.cpp.bak2 @@ -0,0 +1,181 @@ +#include +#include + +#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]{15, 21, 20, 19, 18}; +/* ShiftRegister (OUT) */ +#define SHIFT_OUTPUTSIZE 4 +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(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} +// }; + +bool ref[6*16]; + +// +// using namespace ExtIO; + +void setup() { + Serial.begin(115200); + while (Serial.available() == 0){ + delay(.5 s); + } + + ExtIO::pinMode(shift_clock, OUTPUT); + ExtIO::pinMode(shift_data, OUTPUT); + ExtIO::pinMode(shift_latch, OUTPUT); + ExtIO::pinMode(2, OUTPUT); + + for (size_t i = 0; i < KEYBOARD_INSIZE; ++i) { + ExtIO::pinMode(keyboard_in[i], INPUT); + } + + for (size_t i = 0; i < 6*8; ++i) { + ref[i] = false; + } +} + +void scanLineOut(int colNum); + + +void loop() { + // long start = millis(); + // for (size_t i = 0; i < 4; ++i) { + // val[i] = multiplexer.analogRead(i); + // if (val[i] != ref[i]) { + // Serial.print("p["); + // Serial.print(i, DEC); + // Serial.print("] = "); + // Serial.println(val[i], DEC); + // ref[i] = val[i]; + // + // } + // } + // val[8] = readCapacitivePin(2); + // if (abs(val[8] - ref[8]) >= 2) { + // if (val[8] > ref[8]) { + // // Serial.print("loop() time : "); + // // Serial.println(lastLoop, DEC); + // // Serial.print("average : "); + // // Serial.println(loopAverage, DEC); + // Serial.println(val[8], DEC); + // } + // ref[8] = val[8]; + // } + + + // if (val[0] >= 500) { + // digitalWrite(0, HIGH); + // } else { + // digitalWrite(0, LOW); + // } + + for (size_t i = 0; i < 16; ++i) { + scanLineOut(i); + 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]) { + Serial.print("key "); + Serial.print(j * 16 + i); + Serial.print(" pressed (received on pin "); + Serial.print(keyboard_in[j], DEC); + Serial.print(" & emmited on pin "); + Serial.print(i); + Serial.println(")"); + ref[j * 16 + i] = true; + } + } else { + ref[j * 16 + i] = false; + } + pressed |= rowValue[i]; + } + if (pressed) { + digitalWrite(2, HIGH); + } else { + digitalWrite(2, LOW); + } + } + + + // for (uint8_t i = 0; i < 8; ++i) { + // byte bitsToSend = 0b00000001 << i; + // digitalWrite(shift_latch, LOW); + // shiftOut(shift_data, shift_clock, MSBFIRST, bitsToSend); + // digitalWrite(shift_latch, HIGH); + // Serial.print(" "); + // Serial.print(bitsToSend, BIN); + // Serial.println(" HIGH"); + // delay(1 s); + // //bitWrite(bitsToSend, i, LOW); + // digitalWrite(shift_latch, LOW); + // shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); + // digitalWrite(shift_latch, HIGH); + // Serial.print(i); + // Serial.println(" LOW"); + // delay(1 s); + // } + + // analogWrite(9, val[0] * 256 / 1024); + + + + // MIDI_Controller.refresh(); + // lastLoop = millis() - start; + // loopAverage = (loopAverage + lastLoop) / 2; + //delay(.5 s); +} +byte bits[] = { + 0b00000001, + 0b00000010, + 0b00000100, + 0b00001000, + 0b00010000, + 0b00100000, + 0b01000000, + 0b10000000 +}; + +void scanLineOut(int colNum) { + ExtIO::digitalWrite(shift_latch, LOW); + + if(0 <= colNum && colNum <= 7) { + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); //right sr + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, bits[colNum]); //left sr + } else { + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, bits[colNum - 8]); //right sr + ExtIO::shiftOut(shift_data, shift_clock, MSBFIRST, 0b00000000); //left sr + } + + ExtIO::digitalWrite(shift_latch, HIGH); +}