diff --git "a/mc_labs/mc_lab_01/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).docx" "b/mc_labs/mc_lab_01/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).docx" new file mode 100644 index 0000000..662c752 Binary files /dev/null and "b/mc_labs/mc_lab_01/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).docx" differ diff --git a/mc_labs/mc_lab_01/Esp_lab1_web.ino b/mc_labs/mc_lab_01/mc_lab1_esp.ino similarity index 77% rename from mc_labs/mc_lab_01/Esp_lab1_web.ino rename to mc_labs/mc_lab_01/mc_lab1_esp.ino index e07bb49..5383333 100644 --- a/mc_labs/mc_lab_01/Esp_lab1_web.ino +++ b/mc_labs/mc_lab_01/mc_lab1_esp.ino @@ -5,15 +5,13 @@ #include "ESPAsyncWebServer.h" // Set to true to define Relay as Normally Open (NO) -#define RELAY_NO false - -// Set number of relays -#define NUM_RELAYS 1 // Set to 1 for a single relay - +#define LED_NO false +#define BUTTON_PULLUP true #define ESP_WIFI_MODE 2 //WIFI_STA // WIFI_AP //WIFI_AP_STA -// Assign GPIO to the relay -const int relayGPIO = D4; // Replace with the desired GPIO pin +// Assign GPIO to the relay and button +const int ledGPIO = D4; // Replace with the desired GPIO pin +const int btnGPIO = D5; // Replace with the desired GPIO pin // Replace with your network credentials const char* ssid = "WEMOS_ESP8266"; @@ -129,21 +127,47 @@ void initWiFi() server.begin(); } +IRAM_ATTR void btnIsrHigh() +{ + btnChangedFlag = true; +#if (BUTTON_PULLUP == true) + btnReleased = true; +#else + btnPressed = true; +#endif +} + +IRAM_ATTR void btnIsrLow() +{ + btnChangedFlag = true; +#if (BUTTON_PULLUP == true) + btnPressed = true; +#else + btnReleased = true; +#endif +} + void setup(){ Serial.begin(115200); - pinMode(relayGPIO, OUTPUT); - if(RELAY_NO){ - digitalWrite(relayGPIO, HIGH); + + pinMode(btnGPIO, INPUT_PULLUP); + // attachInterrupt(digitalPinToInterrupt(btnGPIO), btnIsrHigh, CHANGE); + attachInterrupt(digitalPinToInterrupt(btnGPIO), btnIsrHigh, RISING); + attachInterrupt(digitalPinToInterrupt(btnGPIO), btnIsrLow, FALLING); + + pinMode(ledGPIO, OUTPUT); + if(LED_NO){ //! NOTE1 + digitalWrite(ledGPIO, HIGH); } else{ - digitalWrite(relayGPIO, LOW); + digitalWrite(ledGPIO, LOW); } initWiFi(); -#if (RELAY_NO == true) - digitalWrite(relayGPIO, LOW); +#if (LED_NO == true) //! NOTE: tell the difference with NOTE1 + digitalWrite(ledGPIO, LOW); #else - digitalWrite(relayGPIO, HIGH); + digitalWrite(ledGPIO, HIGH); #endif } @@ -153,15 +177,14 @@ void loop() { { if (btnPressed) { - digitalWrite(relayGPIO, LOW); + digitalWrite(ledGPIO, LOW); btnPressed = false; } if (btnReleased) { - digitalWrite(relayGPIO, HIGH); + digitalWrite(ledGPIO, HIGH); btnReleased = false; } btnChangedFlag = false; } - } \ No newline at end of file diff --git "a/mc_labs/mc_lab_02/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).pdf" "b/mc_labs/mc_lab_02/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).pdf" new file mode 100644 index 0000000..8f0b8f4 Binary files /dev/null and "b/mc_labs/mc_lab_02/ESP \320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2261(MK).pdf" differ diff --git a/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.mega.hex b/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.mega.hex new file mode 100644 index 0000000..16dc124 --- /dev/null +++ b/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.mega.hex @@ -0,0 +1,237 @@ +:1000000007C1000033C1000031C100002FC1000052 +:100010002DC100002BC1000029C1000027C1000034 +:1000200025C1000023C1000021C100001FC1000044 +:100030001DC100001BC1000019C1000017C1000054 +:1000400015C1000013C1000011C100000FC1000064 +:100050000DC100000BC1000009C1000085C40000F3 +:1000600005C10000F4C40000C9C40000FFC00000C6 +:10007000FDC00000FBC00000F9C00000F7C0000098 +:10008000F5C00000F3C00000F1C00000EFC00000A8 +:10009000EDC00000EBC00000E9C00000E7C00000B8 +:1000A000E5C00000E3C00000E1C00000DFC00000C8 +:1000B000DDC00000DBC00000D9C00000D7C00000D8 +:1000C000D5C00000D3C00000D1C00000CFC00000E8 +:1000D000CDC00000CBC00000C9C00000C7C00000F8 +:1000E000C5C000006501680157015B015F019F0108 +:1000F0006C01700176017A017E01840188018C0116 +:100100009F01920196019A0100002100240027001E +:100110002A002D0030003300010100000401070116 +:100120000A0100002200250028002B002E003100CB +:10013000340002010000050108010B010505050559 +:10014000070508080808020202020A0A080804044F +:10015000040401010101010101010303030303037D +:100160000303040707070C0C0C0C0C0C0C0C02020C +:10017000020206060606060606060B0B0B0B0B0B09 +:100180000B0B010210202008081020401020408096 +:10019000020102010804020101020408102040804B +:1001A00080402010080402018004020180402010D9 +:1001B0000804020108040201010204081020408022 +:1001C000010204081020408000000A0B02090C0DF7 +:1001D0000E080703040100000000000000000000FA +:1001E000000000000000000000000000000000000F +:1001F00000000000121110000000000000000000CC +:1002000000000000000000000000000000005D058C +:1002100011241FBECFEFD1E2DEBFCDBF00E00CBF87 +:1002200012E0A0E0B2E0E4E4FEE000E00BBF02C0B8 +:1002300007900D92A436B107D9F723E0A4E6B2E007 +:1002400001C01D92A732B207E1F711E0C8E0D1E08A +:1002500000E005C021970109802FFE01E5D5C730D8 +:10026000D10780E00807B1F771D4EAC5C9CE362FAF +:1002700090E0FC01E853FE4F4491FC01EE57FE4F25 +:100280002491FC01E45CFE4F9491992309F46BC026 +:10029000442309F454C050E0FA013197E231F105EA +:1002A00008F04DC08827EE58FF4F8F4FBDC5809195 +:1002B00080008F7707C0809180008F7D03C0809180 +:1002C0008000877F809380003AC084B58F7702C01A +:1002D00084B58F7D84BD33C08091B0008F7703C01B +:1002E0008091B0008F7D8093B00029C080919000F4 +:1002F0008F7707C0809190008F7D03C08091900020 +:10030000877F809390001BC08091A0008F7707C0EB +:100310008091A0008F7D03C08091A000877F809393 +:10032000A0000DC0809120018F7707C0809120012F +:100330008F7D03C080912001877F80932001E92F6A +:10034000F0E0EE0FFF1FEE5DFE4FA591B4919FB759 +:10035000F894311104C08C912095282302C0EC91AF +:100360002E2B2C939FBF0895CF93DF9390E0FC0139 +:10037000EE57FE4F2491FC01E45CFE4F84918823EC +:1003800061F190E0880F991FFC01E85FFE4FC59175 +:10039000D491FC01EE5DFE4FA591B491611109C0AD +:1003A0009FB7F8948881209582238883EC912E232F +:1003B0000BC0623061F49FB7F8948881322F30957A +:1003C00083238883EC912E2B2C939FBF06C08FB77D +:1003D000F894E8812E2B28838FBFDF91CF91089569 +:1003E000CF92DF92EF92FF920F931F93CF93DF9301 +:1003F0006C017A018B01C0E0D0E0CE15DF0581F001 +:10040000D8016D918D01D601ED91FC910190F081A3 +:10041000E02DC6011995892B11F02196EECF7E01B2 +:10042000C701DF91CF911F910F91FF90EF90DF9067 +:10043000CF900895FC01538D448D252F30E0842FFB +:1004400090E0821B930B541710F0CF9608950197FC +:100450000895FC01918D828D981761F0828DDF01E6 +:10046000A80FB11D5D968C91928D9F5F9F73928FA7 +:1004700090E008958FEF9FEF0895FC01918D828D9C +:10048000981731F0828DE80FF11D858D90E0089569 +:100490008FEF9FEF0895FC01918D228D892F90E0C1 +:1004A000805C9F4F821B91098F739927089582E783 +:1004B00092E0F1DF21E0892B09F420E0822F0895FA +:1004C000FC01848DDF01A80FB11DA35ABF4F2C91F1 +:1004D000848D90E001968F739927848FA689B789C0 +:1004E0002C93A089B1898C91837080648C93938DB7 +:1004F000848D981306C00288F389E02D80818F7D5A +:1005000080830895EF92FF920F931F93CF93DF9311 +:10051000EC0181E0888F9B8D8C8D981305C0E88954 +:10052000F989808185FD25C0F62E0B8D10E00F5FC7 +:100530001F4F0F731127E02E8C8DE8120BC00FB6E2 +:1005400007FCFACFE889F989808185FFF5CFCE01D4 +:10055000B7DFF2CF8B8DFE01E80FF11DE35AFF4F9D +:10056000F0829FB7F8940B8FEA89FB8980818062C3 +:100570000AC09FB7F894EE89FF896083E889F989FA +:1005800080818370806480839FBF81E090E0DF91F1 +:10059000CF911F910F91FF90EF900895CF93DF932C +:1005A000EC01888D8823C1F0EA89FB89808185FD73 +:1005B00005C0A889B9898C9186FD0EC00FB607FCCD +:1005C000F5CF808185FFF2CFA889B9898C9185FF0D +:1005D000EDCFCE0175DFE8CFDF91CF91089580E0B8 +:1005E00090E0892B19F063DF811125C080E090E055 +:1005F000892B41F080E090E0892B21F00E940000DF +:1006000081111CC080E090E0892B41F080E090E0F7 +:10061000892B21F00E940000811113C080E090E03E +:10062000892BA1F080E090E0892B81F00E940000EE +:1006300081110AC008950E940000D8CF0E940000D6 +:10064000E1CF0E940000EACF0C9400000895CF9300 +:10065000DF93EC0160E08E810ADE61E08E8107DECF +:1006600060E08E8104DE8BE891E00197F1F7DF9185 +:10067000CF910895CF92DF92EF92FF920F931F9345 +:10068000CF93DF936C017C0187E0E80EF11CC0E0A2 +:10069000D0E0062F10E0B8010C2E02C075956795CA +:1006A0000A94E2F76170F70181917F01E0DD219604 +:1006B000C430D10581F7C601DF91CF911F910F9111 +:1006C000FF90EF90DF90CF90C2CFCF92DF92EF926A +:1006D000FF920F931F93CF93DF93EC01F62E642FBD +:1006E0008C81C5DD8D818F3F11F060E0C0DD8F858D +:1006F0000F2D10E084FF23C06E0187E0C80ED11CCF +:10070000E12CF12CB8010E2C02C0759567950A9466 +:10071000E2F76170F60181916F01A9DDFFEFEF1A39 +:10072000FF0A88E0E816F10469F7CE01DF91CF9166 +:100730001F910F91FF90EF90DF90CF9088CFB8017D +:1007400084E0759567958A95E1F7CE0193DF6F2D6B +:10075000CE01DF91CF911F910F91FF90EF90DF902D +:10076000CF9088CF40E0682F8FE093E0AECFCF935B +:10077000DF93823028F090911E03986090931E03BF +:10078000809322031092230380E48093240380E16A +:100790008093250380E58093260361E08091130315 +:1007A000E3DD809114038F3F11F061E0DDDD61E056 +:1007B00080911503D9DDCFE0D3E09E012F50334067 +:1007C00080911E0384FD03C084E090E002C088E0B5 +:1007D00090E021962817390724F461E08E81C4DD6A +:1007E000ECCF8BE39DE00197F1F760E0809113037C +:1007F0003EDD60E0809115033ADD809114038F3F68 +:1008000011F060E034DD80911E0384FD1CC063E0C4 +:100810008FE093E02FDFCBE4D6E4CE010197F1F730 +:1008200063E08FE093E026DF2197F1F763E08FE04C +:1008300093E020DF83E592E00197F1F762E08FE03B +:1008400093E018DF12C080628DDF8BE496E401979D +:10085000F1F780911E03806285DF83E592E00197C6 +:10086000F1F780911E0380627DDF80911E0380621C +:1008700079DF84E080931F038CE074DF81E072DF16 +:100880008BE39FE10197F1F782E08093200386E0FC +:10089000DF91CF9167CF643008F063E0909122033D +:1008A000691710F06FEF690FE62FF0E0E15FFC4F82 +:1008B0009489890F806856CF41E007DF81E090E09E +:1008C0000895089580E090E00895009761F0FC019C +:1008D00001900020E9F73197AF01481B590BBC018B +:1008E0008FE093E07DCD80E090E00895EECFCF9251 +:1008F000DF92EF92FF920F931F93CF93DF93CDB7C9 +:10090000DEB7A1970FB6F894DEBF0FBECDBF282F7C +:1009100030E040E050E019A28E010F5D1F4F8AE0E9 +:10092000C82ED12CE12CF12CCA01B901A7019601E6 +:1009300059D2605DF80162938F012115310541059F +:10094000510591F7CF01C1DFA1960FB6F894DEBF34 +:100950000FBECDBFDF91CF911F910F91FF90EF9010 +:10096000DF90CF90089568D21F920F920FB60F922A +:1009700011242F933F938F939F93AF93BF938091B5 +:100980006E0290916F02A0917002B091710230914D +:100990006D0223E0230F2D3720F40196A11DB11D18 +:1009A00005C026E8230F0296A11DB11D20936D02FC +:1009B00080936E0290936F02A0937002B0937102C5 +:1009C0008091690290916A02A0916B02B0916C02D1 +:1009D0000196A11DB11D8093690290936A02A093B4 +:1009E0006B02B0936C02BF91AF919F918F913F9139 +:1009F0002F910F900FBE0F901F9018951F920F927E +:100A00000FB60F9211240BB60F922F933F934F9373 +:100A10005F936F937F938F939F93AF93BF93EF9366 +:100A2000FF9382E792E04CDDFF91EF91BF91AF9190 +:100A30009F918F917F916F915F914F913F912F91F6 +:100A40000F900BBE0F900FBE0F901F9018951F9226 +:100A50000F920FB60F9211240BB60F922F938F9314 +:100A60009F93EF93FF93E0918202F0918302808144 +:100A7000E0918802F091890282FD12C090818091FC +:100A80008B028F5F8F7320918C02821751F0E0915F +:100A90008B02F0E0EE58FD4F958F80938B0201C0E2 +:100AA0008081FF91EF919F918F912F910F900BBEBD +:100AB0000F900FBE0F901F901895E2E7F2E013829F +:100AC000128288EE93E0A0E0B0E084839583A68351 +:100AD000B78385E092E09183808385EC90E09587F1 +:100AE000848784EC90E09787868780EC90E0918BF8 +:100AF000808B81EC90E0938B828B82EC90E0958BE5 +:100B0000848B86EC90E0978B868B118E128E138EE1 +:100B1000148EEFE0F3E01382128287E192E091837A +:100B2000808385E0848386E0858387E0868388E010 +:100B3000878389E080878AE081878BE082871386BC +:100B4000148615861686178681E011CE789484B5B2 +:100B5000826084BD84B5816084BD85B5826085BDB9 +:100B600085B5816085BD80916E00816080936E0047 +:100B70001092810080918100826080938100809139 +:100B800081008160809381008091800081608093EA +:100B900080008091B10084608093B1008091B000AA +:100BA00081608093B0008091910082608093910079 +:100BB000809191008160809391008091900081608C +:100BC000809390008091A10082608093A100809129 +:100BD000A10081608093A1008091A000816080933A +:100BE000A0008091210182608093210180912101E8 +:100BF0008160809321018091200181608093200198 +:100C000080917A00846080937A0080917A0082607B +:100C100080937A0080917A00816080937A0080913D +:100C20007A00806880937A001092C100E09182027D +:100C3000F091830282E08083E0917E02F0917F0256 +:100C40001082E0918002F09181028FEC80831092FB +:100C50008A02E0918602F091870286E08083E0912B +:100C60008402F0918502808180618083E09184021A +:100C7000F0918502808188608083E0918402F09108 +:100C80008502808180688083E0918402F0918502F2 +:100C900080818F7D808361E08DE066DB60E08DE0A8 +:100CA000E6DA62E086E160DB82E061DD8FE192E01E +:100CB0001DDE83EA84BD83E085BD17BC18BC279A7E +:100CC0009D9A11E003EB83EAF82E82E792E0E3DBE2 +:100CD000892B09F47DC082E792E0BBDBEC018091B7 +:100CE0000002882309F444C0C13AD10559F4809127 +:100CF000680287BD1093670260E080E0CCDD8CE283 +:100D000092E00BC0C23AD10559F417BC10926702A9 +:100D100060E080E0C0DD8DE392E0E8DD87B524C0CF +:100D2000C33AD10529F410920002F092660250C035 +:100D3000C13BD10559F48091650288BD10936402CE +:100D400061E080E0A8DD8AE492E00CC0C23BD105FE +:100D500009F040C018BC1092640261E080E09BDDA5 +:100D600087E592E0C3DD88B5C2DD89E392E02FC05C +:100D700080916602833AA1F410930002C093680246 +:100D800080916702882321F1C7BD60E087E083DDA1 +:100D900084E492E0ABDD87B5AADD8AE392E0A6DDCC +:100DA00080916602833BA1F410930002C093650218 +:100DB00080916402882361F0C8BD61E087E06BDD4B +:100DC0008EE592E093DD88B592DD8AE392E08EDDD8 +:100DD00006DC7BCFC33BD105D9F71092000200930C +:100DE0006602F6CFA1E21A2EAA1BBB1BFD010DC0A5 +:100DF000AA1FBB1FEE1FFF1FA217B307E407F507CB +:100E000020F0A21BB30BE40BF50B661F771F881FA6 +:100E1000991F1A9469F760957095809590959B013C +:100E2000AC01BD01CF010895EE0FFF1F881F8BBFDE +:100E30000790F691E02D199481E090E0F89400C0BD +:040E4000F894FFCF54 +:100E440001000000008202F0011A02CE024B0229C6 +:100E5400023D02000000005C04F0016204610453DE +:100E64007461727420436C69656E740053746172AA +:100E74007441204F4352413D002020200053746FA1 +:100E8400704120204F4352413D00537461727442BB +:100E9400204F4352423D0053746F704220204F4311 +:040EA40052423D0079 +:00000001FF diff --git a/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.with_bootloader.mega.hex b/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.with_bootloader.mega.hex new file mode 100644 index 0000000..56825d3 --- /dev/null +++ b/mc_labs/mc_lab_02/build/arduino.avr.mega/sketch_mar01a.ino.with_bootloader.mega.hex @@ -0,0 +1,705 @@ +:1000000007C1000033C1000031C100002FC1000052 +:100010002DC100002BC1000029C1000027C1000034 +:1000200025C1000023C1000021C100001FC1000044 +:100030001DC100001BC1000019C1000017C1000054 +:1000400015C1000013C1000011C100000FC1000064 +:100050000DC100000BC1000009C1000085C40000F3 +:1000600005C10000F4C40000C9C40000FFC00000C6 +:10007000FDC00000FBC00000F9C00000F7C0000098 +:10008000F5C00000F3C00000F1C00000EFC00000A8 +:10009000EDC00000EBC00000E9C00000E7C00000B8 +:1000A000E5C00000E3C00000E1C00000DFC00000C8 +:1000B000DDC00000DBC00000D9C00000D7C00000D8 +:1000C000D5C00000D3C00000D1C00000CFC00000E8 +:1000D000CDC00000CBC00000C9C00000C7C00000F8 +:1000E000C5C000006501680157015B015F019F0108 +:1000F0006C01700176017A017E01840188018C0116 +:100100009F01920196019A0100002100240027001E +:100110002A002D0030003300010100000401070116 +:100120000A0100002200250028002B002E003100CB +:10013000340002010000050108010B010505050559 +:10014000070508080808020202020A0A080804044F +:10015000040401010101010101010303030303037D +:100160000303040707070C0C0C0C0C0C0C0C02020C +:10017000020206060606060606060B0B0B0B0B0B09 +:100180000B0B010210202008081020401020408096 +:10019000020102010804020101020408102040804B +:1001A00080402010080402018004020180402010D9 +:1001B0000804020108040201010204081020408022 +:1001C000010204081020408000000A0B02090C0DF7 +:1001D0000E080703040100000000000000000000FA +:1001E000000000000000000000000000000000000F +:1001F00000000000121110000000000000000000CC +:1002000000000000000000000000000000005D058C +:1002100011241FBECFEFD1E2DEBFCDBF00E00CBF87 +:1002200012E0A0E0B2E0E4E4FEE000E00BBF02C0B8 +:1002300007900D92A436B107D9F723E0A4E6B2E007 +:1002400001C01D92A732B207E1F711E0C8E0D1E08A +:1002500000E005C021970109802FFE01E5D5C730D8 +:10026000D10780E00807B1F771D4EAC5C9CE362FAF +:1002700090E0FC01E853FE4F4491FC01EE57FE4F25 +:100280002491FC01E45CFE4F9491992309F46BC026 +:10029000442309F454C050E0FA013197E231F105EA +:1002A00008F04DC08827EE58FF4F8F4FBDC5809195 +:1002B00080008F7707C0809180008F7D03C0809180 +:1002C0008000877F809380003AC084B58F7702C01A +:1002D00084B58F7D84BD33C08091B0008F7703C01B +:1002E0008091B0008F7D8093B00029C080919000F4 +:1002F0008F7707C0809190008F7D03C08091900020 +:10030000877F809390001BC08091A0008F7707C0EB +:100310008091A0008F7D03C08091A000877F809393 +:10032000A0000DC0809120018F7707C0809120012F +:100330008F7D03C080912001877F80932001E92F6A +:10034000F0E0EE0FFF1FEE5DFE4FA591B4919FB759 +:10035000F894311104C08C912095282302C0EC91AF +:100360002E2B2C939FBF0895CF93DF9390E0FC0139 +:10037000EE57FE4F2491FC01E45CFE4F84918823EC +:1003800061F190E0880F991FFC01E85FFE4FC59175 +:10039000D491FC01EE5DFE4FA591B491611109C0AD +:1003A0009FB7F8948881209582238883EC912E232F +:1003B0000BC0623061F49FB7F8948881322F30957A +:1003C00083238883EC912E2B2C939FBF06C08FB77D +:1003D000F894E8812E2B28838FBFDF91CF91089569 +:1003E000CF92DF92EF92FF920F931F93CF93DF9301 +:1003F0006C017A018B01C0E0D0E0CE15DF0581F001 +:10040000D8016D918D01D601ED91FC910190F081A3 +:10041000E02DC6011995892B11F02196EECF7E01B2 +:10042000C701DF91CF911F910F91FF90EF90DF9067 +:10043000CF900895FC01538D448D252F30E0842FFB +:1004400090E0821B930B541710F0CF9608950197FC +:100450000895FC01918D828D981761F0828DDF01E6 +:10046000A80FB11D5D968C91928D9F5F9F73928FA7 +:1004700090E008958FEF9FEF0895FC01918D828D9C +:10048000981731F0828DE80FF11D858D90E0089569 +:100490008FEF9FEF0895FC01918D228D892F90E0C1 +:1004A000805C9F4F821B91098F739927089582E783 +:1004B00092E0F1DF21E0892B09F420E0822F0895FA +:1004C000FC01848DDF01A80FB11DA35ABF4F2C91F1 +:1004D000848D90E001968F739927848FA689B789C0 +:1004E0002C93A089B1898C91837080648C93938DB7 +:1004F000848D981306C00288F389E02D80818F7D5A +:1005000080830895EF92FF920F931F93CF93DF9311 +:10051000EC0181E0888F9B8D8C8D981305C0E88954 +:10052000F989808185FD25C0F62E0B8D10E00F5FC7 +:100530001F4F0F731127E02E8C8DE8120BC00FB6E2 +:1005400007FCFACFE889F989808185FFF5CFCE01D4 +:10055000B7DFF2CF8B8DFE01E80FF11DE35AFF4F9D +:10056000F0829FB7F8940B8FEA89FB8980818062C3 +:100570000AC09FB7F894EE89FF896083E889F989FA +:1005800080818370806480839FBF81E090E0DF91F1 +:10059000CF911F910F91FF90EF900895CF93DF932C +:1005A000EC01888D8823C1F0EA89FB89808185FD73 +:1005B00005C0A889B9898C9186FD0EC00FB607FCCD +:1005C000F5CF808185FFF2CFA889B9898C9185FF0D +:1005D000EDCFCE0175DFE8CFDF91CF91089580E0B8 +:1005E00090E0892B19F063DF811125C080E090E055 +:1005F000892B41F080E090E0892B21F00E940000DF +:1006000081111CC080E090E0892B41F080E090E0F7 +:10061000892B21F00E940000811113C080E090E03E +:10062000892BA1F080E090E0892B81F00E940000EE +:1006300081110AC008950E940000D8CF0E940000D6 +:10064000E1CF0E940000EACF0C9400000895CF9300 +:10065000DF93EC0160E08E810ADE61E08E8107DECF +:1006600060E08E8104DE8BE891E00197F1F7DF9185 +:10067000CF910895CF92DF92EF92FF920F931F9345 +:10068000CF93DF936C017C0187E0E80EF11CC0E0A2 +:10069000D0E0062F10E0B8010C2E02C075956795CA +:1006A0000A94E2F76170F70181917F01E0DD219604 +:1006B000C430D10581F7C601DF91CF911F910F9111 +:1006C000FF90EF90DF90CF90C2CFCF92DF92EF926A +:1006D000FF920F931F93CF93DF93EC01F62E642FBD +:1006E0008C81C5DD8D818F3F11F060E0C0DD8F858D +:1006F0000F2D10E084FF23C06E0187E0C80ED11CCF +:10070000E12CF12CB8010E2C02C0759567950A9466 +:10071000E2F76170F60181916F01A9DDFFEFEF1A39 +:10072000FF0A88E0E816F10469F7CE01DF91CF9166 +:100730001F910F91FF90EF90DF90CF9088CFB8017D +:1007400084E0759567958A95E1F7CE0193DF6F2D6B +:10075000CE01DF91CF911F910F91FF90EF90DF902D +:10076000CF9088CF40E0682F8FE093E0AECFCF935B +:10077000DF93823028F090911E03986090931E03BF +:10078000809322031092230380E48093240380E16A +:100790008093250380E58093260361E08091130315 +:1007A000E3DD809114038F3F11F061E0DDDD61E056 +:1007B00080911503D9DDCFE0D3E09E012F50334067 +:1007C00080911E0384FD03C084E090E002C088E0B5 +:1007D00090E021962817390724F461E08E81C4DD6A +:1007E000ECCF8BE39DE00197F1F760E0809113037C +:1007F0003EDD60E0809115033ADD809114038F3F68 +:1008000011F060E034DD80911E0384FD1CC063E0C4 +:100810008FE093E02FDFCBE4D6E4CE010197F1F730 +:1008200063E08FE093E026DF2197F1F763E08FE04C +:1008300093E020DF83E592E00197F1F762E08FE03B +:1008400093E018DF12C080628DDF8BE496E401979D +:10085000F1F780911E03806285DF83E592E00197C6 +:10086000F1F780911E0380627DDF80911E0380621C +:1008700079DF84E080931F038CE074DF81E072DF16 +:100880008BE39FE10197F1F782E08093200386E0FC +:10089000DF91CF9167CF643008F063E0909122033D +:1008A000691710F06FEF690FE62FF0E0E15FFC4F82 +:1008B0009489890F806856CF41E007DF81E090E09E +:1008C0000895089580E090E00895009761F0FC019C +:1008D00001900020E9F73197AF01481B590BBC018B +:1008E0008FE093E07DCD80E090E00895EECFCF9251 +:1008F000DF92EF92FF920F931F93CF93DF93CDB7C9 +:10090000DEB7A1970FB6F894DEBF0FBECDBF282F7C +:1009100030E040E050E019A28E010F5D1F4F8AE0E9 +:10092000C82ED12CE12CF12CCA01B901A7019601E6 +:1009300059D2605DF80162938F012115310541059F +:10094000510591F7CF01C1DFA1960FB6F894DEBF34 +:100950000FBECDBFDF91CF911F910F91FF90EF9010 +:10096000DF90CF90089568D21F920F920FB60F922A +:1009700011242F933F938F939F93AF93BF938091B5 +:100980006E0290916F02A0917002B091710230914D +:100990006D0223E0230F2D3720F40196A11DB11D18 +:1009A00005C026E8230F0296A11DB11D20936D02FC +:1009B00080936E0290936F02A0937002B0937102C5 +:1009C0008091690290916A02A0916B02B0916C02D1 +:1009D0000196A11DB11D8093690290936A02A093B4 +:1009E0006B02B0936C02BF91AF919F918F913F9139 +:1009F0002F910F900FBE0F901F9018951F920F927E +:100A00000FB60F9211240BB60F922F933F934F9373 +:100A10005F936F937F938F939F93AF93BF93EF9366 +:100A2000FF9382E792E04CDDFF91EF91BF91AF9190 +:100A30009F918F917F916F915F914F913F912F91F6 +:100A40000F900BBE0F900FBE0F901F9018951F9226 +:100A50000F920FB60F9211240BB60F922F938F9314 +:100A60009F93EF93FF93E0918202F0918302808144 +:100A7000E0918802F091890282FD12C090818091FC +:100A80008B028F5F8F7320918C02821751F0E0915F +:100A90008B02F0E0EE58FD4F958F80938B0201C0E2 +:100AA0008081FF91EF919F918F912F910F900BBEBD +:100AB0000F900FBE0F901F901895E2E7F2E013829F +:100AC000128288EE93E0A0E0B0E084839583A68351 +:100AD000B78385E092E09183808385EC90E09587F1 +:100AE000848784EC90E09787868780EC90E0918BF8 +:100AF000808B81EC90E0938B828B82EC90E0958BE5 +:100B0000848B86EC90E0978B868B118E128E138EE1 +:100B1000148EEFE0F3E01382128287E192E091837A +:100B2000808385E0848386E0858387E0868388E010 +:100B3000878389E080878AE081878BE082871386BC +:100B4000148615861686178681E011CE789484B5B2 +:100B5000826084BD84B5816084BD85B5826085BDB9 +:100B600085B5816085BD80916E00816080936E0047 +:100B70001092810080918100826080938100809139 +:100B800081008160809381008091800081608093EA +:100B900080008091B10084608093B1008091B000AA +:100BA00081608093B0008091910082608093910079 +:100BB000809191008160809391008091900081608C +:100BC000809390008091A10082608093A100809129 +:100BD000A10081608093A1008091A000816080933A +:100BE000A0008091210182608093210180912101E8 +:100BF0008160809321018091200181608093200198 +:100C000080917A00846080937A0080917A0082607B +:100C100080937A0080917A00816080937A0080913D +:100C20007A00806880937A001092C100E09182027D +:100C3000F091830282E08083E0917E02F0917F0256 +:100C40001082E0918002F09181028FEC80831092FB +:100C50008A02E0918602F091870286E08083E0912B +:100C60008402F0918502808180618083E09184021A +:100C7000F0918502808188608083E0918402F09108 +:100C80008502808180688083E0918402F0918502F2 +:100C900080818F7D808361E08DE066DB60E08DE0A8 +:100CA000E6DA62E086E160DB82E061DD8FE192E01E +:100CB0001DDE83EA84BD83E085BD17BC18BC279A7E +:100CC0009D9A11E003EB83EAF82E82E792E0E3DBE2 +:100CD000892B09F47DC082E792E0BBDBEC018091B7 +:100CE0000002882309F444C0C13AD10559F4809127 +:100CF000680287BD1093670260E080E0CCDD8CE283 +:100D000092E00BC0C23AD10559F417BC10926702A9 +:100D100060E080E0C0DD8DE392E0E8DD87B524C0CF +:100D2000C33AD10529F410920002F092660250C035 +:100D3000C13BD10559F48091650288BD10936402CE +:100D400061E080E0A8DD8AE492E00CC0C23BD105FE +:100D500009F040C018BC1092640261E080E09BDDA5 +:100D600087E592E0C3DD88B5C2DD89E392E02FC05C +:100D700080916602833AA1F410930002C093680246 +:100D800080916702882321F1C7BD60E087E083DDA1 +:100D900084E492E0ABDD87B5AADD8AE392E0A6DDCC +:100DA00080916602833BA1F410930002C093650218 +:100DB00080916402882361F0C8BD61E087E06BDD4B +:100DC0008EE592E093DD88B592DD8AE392E08EDDD8 +:100DD00006DC7BCFC33BD105D9F71092000200930C +:100DE0006602F6CFA1E21A2EAA1BBB1BFD010DC0A5 +:100DF000AA1FBB1FEE1FFF1FA217B307E407F507CB +:100E000020F0A21BB30BE40BF50B661F771F881FA6 +:100E1000991F1A9469F760957095809590959B013C +:100E2000AC01BD01CF010895EE0FFF1F881F8BBFDE +:100E30000790F691E02D199481E090E0F89400C0BD +:040E4000F894FFCF54 +:100E440001000000008202F0011A02CE024B0229C6 +:100E5400023D02000000005C04F0016204610453DE +:100E64007461727420436C69656E740053746172AA +:100E74007441204F4352413D002020200053746FA1 +:100E8400704120204F4352413D00537461727442BB +:100E9400204F4352423D0053746F704220204F4311 +:040EA40052423D0079 +:020000023000CC +:10E000000D9489F10D94B2F10D94B2F10D94B2F129 +:10E010000D94B2F10D94B2F10D94B2F10D94B2F1F0 +:10E020000D94B2F10D94B2F10D94B2F10D94B2F1E0 +:10E030000D94B2F10D94B2F10D94B2F10D94B2F1D0 +:10E040000D94B2F10D94B2F10D94B2F10D94B2F1C0 +:10E050000D94B2F10D94B2F10D94B2F10D94B2F1B0 +:10E060000D94B2F10D94B2F10D94B2F10D94B2F1A0 +:10E070000D94B2F10D94B2F10D94B2F10D94B2F190 +:10E080000D94B2F10D94B2F10D94B2F10D94B2F180 +:10E090000D94B2F10D94B2F10D94B2F10D94B2F170 +:10E0A0000D94B2F10D94B2F10D94B2F10D94B2F160 +:10E0B0000D94B2F10D94B2F10D94B2F10D94B2F150 +:10E0C0000D94B2F10D94B2F10D94B2F10D94B2F140 +:10E0D0000D94B2F10D94B2F10D94B2F10D94B2F130 +:10E0E0000D94B2F141546D656761323536300041AF +:10E0F000726475696E6F206578706C6F72657220DE +:10E1000073746B3530305632206279204D4C530099 +:10E11000426F6F746C6F616465723E004875683F52 +:10E1200000436F6D70696C6564206F6E203D200048 +:10E130004350552054797065202020203D20005FF9 +:10E140005F4156525F415243485F5F3D2000415658 +:10E1500052204C696243205665723D20004743437C +:10E160002056657273696F6E203D20004350552024 +:10E1700049442020202020203D20004C6F7720663D +:10E18000757365202020203D20004869676820665F +:10E190007573652020203D200045787420667573D6 +:10E1A00065202020203D20004C6F636B2066757336 +:10E1B000652020203D20004D617220203720323024 +:10E1C000313300312E362E3800342E332E350056A2 +:10E1D00023202020414444522020206F7020636F70 +:10E1E00064652020202020696E73747275637469E1 +:10E1F0006F6E2061646472202020496E74657272B3 +:10E20000757074006E6F20766563746F7200726A49 +:10E210006D702020006A6D70200057686174207056 +:10E220006F72743A00506F7274206E6F7420737541 +:10E2300070706F72746564004D7573742062652030 +:10E2400061206C6574746572002000577269747483 +:10E25000696E672045450052656164696E672045B7 +:10E26000450045452065727220636E743D00504F35 +:10E27000525400303D5A65726F2061646472003FF1 +:10E280003D43505520737461747300403D454550C3 +:10E29000524F4D207465737400423D426C696E6B41 +:10E2A000204C454400453D44756D70204545505215 +:10E2B0004F4D00463D44756D7020464C415348001B +:10E2C000483D48656C70004C3D4C69737420492F83 +:10E2D0004F20506F72747300513D51756974005234 +:10E2E0003D44756D702052414D00563D73686F7707 +:10E2F00020696E7465727275707420566563746FF0 +:10E30000727300593D506F727420626C696E6B00BD +:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046 +:10E320000CBF12E0A0E0B2E0EEE1FDEF03E00BBFB6 +:10E3300002C007900D92A030B107D9F712E0A0E01B +:10E34000B2E001C01D92AE30B107E1F70F9460F367 +:10E350000D948DFE01E20EBF0FEF0DBF11241FBE05 +:10E360000D9460F30D9400F020E030E040ED57E0B4 +:10E3700005C0FA013197F1F72F5F3F4F2817390792 +:10E38000C0F308959C01260F311DC901A0E0B0E043 +:10E390002F5F3F4FABBFFC018791882361F08093D3 +:10E3A000C6008091C00086FFFCCF8091C0008064D1 +:10E3B0008093C000EACF08958DE08093C6008091DD +:10E3C000C00086FFFCCF8091C00080648093C000B5 +:10E3D0008AE08093C6008091C00086FFFCCF8091C8 +:10E3E000C00080648093C00008950F94C2F10F9420 +:10E3F000DCF10895FC019081992359F09093C600B7 +:10E400008091C00086FFFCCF8091C0008064809323 +:10E41000C0003196992379F70895282F982F929567 +:10E420009F70892F805D8A3308F0895F8093C600D2 +:10E430008091C00086FFFCCF8091C00080648093F3 +:10E44000C000822F8F70982F905D9A3308F0995FEB +:10E450009093C6008091C00086FFFCCF8091C000E1 +:10E4600080648093C00008959C01FB01853691056E +:10E470001CF46330710594F0C90164E670E00F94F8 +:10E480002EFE605D7F4F6093C6008091C00086FFC6 +:10E49000FCCF8091C00080648093C0002B30310598 +:10E4A00014F43297B4F0C90164E670E00F942EFEC4 +:10E4B0006AE070E00F942EFE605D7F4F6093C600AF +:10E4C0008091C00086FFFCCF8091C0008064809363 +:10E4D000C000C9016AE070E00F942EFEC0968093E0 +:10E4E000C6008091C00086FFFCCF8091C000806490 +:10E4F0008093C00008951F93182F8EE692EE60E07F +:10E500000F94C2F11093C6008091C00086FFFCCF2B +:10E510008091C00080648093C0000F94DCF11F9153 +:10E5200008952F923F924F925F926F927F928F92B7 +:10E530009F92AF92BF92CF92DF92EF92FF920F9392 +:10E540001F93DF93CF93CDB7DEB762970FB6F894E2 +:10E55000DEBF0FBECDBF382E622ECA01DB015C01CB +:10E560006D01772420E2222E2E010894411C511CBB +:10E570008BC081E0A81680E0B80681E0C80680E084 +:10E58000D80628F0C601AA27BB270F940DF2BB2797 +:10E59000AD2D9C2D8B2D0F940DF28A2D0F940DF225 +:10E5A0002092C6008091C00086FFFCCF8091C00001 +:10E5B00080648093C0009DE29093C6008091C0006B +:10E5C00086FFFCCF8091C00080648093C0002092C1 +:10E5D000C6008091C00086FFFCCF8091C00080649F +:10E5E0008093C00019828601750188249924A1E0D6 +:10E5F0003A1651F03A1620F0B2E03B1661F409C029 +:10E600000BBFF701779007C0C7010F9477FE782EF4 +:10E6100002C0F7017080872D0F940DF22092C60082 +:10E620008091C00086FFFCCF8091C0008064809301 +:10E63000C000872D8052F401EF70F0708F3520F408 +:10E64000E40DF51D708204C0E40DF51D8EE280839B +:10E650000894E11CF11C011D111D0894811C911CE2 +:10E6600090E18916910409F0C2CF80E190E0A0E02A +:10E67000B0E0A80EB91ECA1EDB1E198AC2010F9493 +:10E68000FAF10F94DCF16A94662009F072CF629679 +:10E690000FB6F894DEBF0FBECDBFCF91DF911F91B3 +:10E6A0000F91FF90EF90DF90CF90BF90AF909F9031 +:10E6B0008F907F906F905F904F903F902F90089534 +:10E6C0002F923F924F925F926F927F928F929F9282 +:10E6D000AF92BF92CF92DF92EF92FF920F931F9370 +:10E6E000DF93CF93CDB7DEB7CD53D1400FB6F894BB +:10E6F000DEBF0FBECDBF01E20EBF0FEF0DBF94B75F +:10E70000F894A89514BE80916000886180936000A1 +:10E7100010926000789493FF05C0E0910002F091A0 +:10E7200001021995279A2F9A8091C00082608093E8 +:10E73000C00080E18093C40088E18093C1000000A4 +:10E74000EE24FF24870144E0A42EB12CCC24DD2448 +:10E7500024C0C5010197F1F70894E11CF11C011DCB +:10E76000111D21E2E2162EE4F20620E0020720E06D +:10E77000120718F031E0C32ED12CC801B70127ECE5 +:10E780003BE140E050E00F9441FE611571058105C9 +:10E79000910519F485B1805885B98091C00087FD35 +:10E7A00003C0C114D104A9F2A6014F5F5F4FC25E3E +:10E7B000DE4F59834883CE51D140C25EDE4F8881FF +:10E7C0009981CE51D140019711F00D9410FEC05D9A +:10E7D000DE4F19821882C053D14060E0C15DDE4F28 +:10E7E0001882CF52D14088249924C35DDE4F19820C +:10E7F0001882CD52D140C05EDE4F188219821A8233 +:10E800001B82C052D140CE5CDE4F188219821A8220 +:10E810001B82C253D140EE24FF2487010BBFF701B6 +:10E8200007911691C45CDE4F19830883CC53D14005 +:10E830000D940BFEC25EDE4F28813981CE51D1404E +:10E840002130310509F52091C600C25EDE4F1982E4 +:10E850001882CE51D14022C02F5F3F4F4F4F5F4FA4 +:10E86000213082E138078AE7480780E0580780F0C6 +:10E87000C45CDE4FE881F981CC53D140EF5FFF4F9C +:10E8800019F0EE27FF27099420E030E040E050E047 +:10E890008091C00087FFE0CF2091C600C35DDE4FAE +:10E8A00048815981CD52D1404F5F5F4FC35DDE4FEC +:10E8B00059834883CD52D140213209F063C64A3092 +:10E8C000510508F05FC60894811C911C53E0851621 +:10E8D000910409F059C600E010E018C081E280936D +:10E8E000C6008091C00086FFFCCF8091C00080648C +:10E8F0008093C0002F5F3F4F2931310579F70F9486 +:10E90000DCF10F5F1F4F0530110519F020E030E0FA +:10E91000E5CF10920A0210920B0210920C02109294 +:10E920000D02109206021092070210920802109235 +:10E930000902109202021092030210920402109235 +:10E9400005028FEE90EE60E00F94F5F180E191EE1C +:10E9500060E00F94C2F18091C00087FFFCCF9091DE +:10E96000C600903608F09F759032B8F09093C600BC +:10E970008091C00086FFFCCF8091C00080648093AE +:10E98000C000A0E2A093C6008091C00086FFFCCF2B +:10E990008091C00080648093C000983409F4D7C18E +:10E9A0009934B8F4923409F459C1933458F490333B +:10E9B00019F1903308F4E3C59F33A1F1903409F0C5 +:10E9C000DEC5BDC0953409F470C1963409F0D7C5D1 +:10E9D00098C1923509F42BC2933538F49C3409F46C +:10E9E000F5C1913509F0CBC518C2963509F445C279 +:10E9F000993509F0C4C567C483E792EE62E00F94CD +:10EA0000F5F110920602109207021092080210927D +:10EA1000090210920A0210920B0210920C0210923C +:10EA20000D0213C18FE792EE62E00F94F5F18FEEC5 +:10EA300090EE60E00F94F5F181E291EE60E00F94CA +:10EA4000C2F187EB91EE60E00F94F5F180E391EE77 +:10EA500060E00F94C2F184EE90EE60E00F94F5F167 +:10EA60008FE391EE60E00F94C2F186E090E061E008 +:10EA700070E00F9434F20F94DCF18DE591EE60E0DC +:10EA80000F94C2F189EC91EE60E00F94F5F18EE401 +:10EA900091EE60E00F94C2F183EC91EE60E00F9490 +:10EAA000F5F18CE691EE60E00F94C2F18EE10F94E7 +:10EAB0000DF288E90F940DF281E00F940DF20F949E +:10EAC000DCF18BE791EE60E00F94C2F119E0E0E039 +:10EAD000F0E010935700E4918E2F0F940DF20F94F5 +:10EAE000DCF18AE891EE60E00F94C2F1E3E0F0E03F +:10EAF00010935700E4918E2F0F940DF20F94DCF1D8 +:10EB000089E991EE60E00F94C2F1E2E0F0E0109349 +:10EB10005700E4918E2F0F940DF20F94DCF188EAE8 +:10EB200091EE60E00F94C2F1E1E0F0E01093570045 +:10EB30001491812F0F940DF20F94DCF107CF8BE825 +:10EB400092EE62E00F94F5F18BE492EE60E00F94A8 +:10EB5000F5F10F94DCF100E010E019C0C8016F2D51 +:10EB60000F947FFEFF2031F489E492EE60E00F9471 +:10EB7000C2F10BC0F092C6008091C00086FFFCCFAE +:10EB80008091C00080648093C0000F5F1F4FC80158 +:10EB900081519F41A0E0B0E0ABBFFC01F790BAE229 +:10EBA000FB1621F0E2E000301E07C1F60F94DCF105 +:10EBB0000F94DCF187E592EE60E00F94F5F10F948D +:10EBC000DCF1CC24DD2400E010E01EC0C8010F946D +:10EBD00077FEF82E882331F489E492EE60E00F94FA +:10EBE000C2F10BC08093C6008091C00086FFFCCFAD +:10EBF0008091C00080648093C000FE1419F00894D6 +:10EC0000C11CD11C0F5F1F4FC80181519F41A0E063 +:10EC1000B0E0ABBFFC01E790FAE2EF1621F022E092 +:10EC20000030120799F60F94DCF10F94DCF182E6C4 +:10EC300092EE60E00F94C2F1C60161E070E00F94C3 +:10EC400034F20F94DCF10F94DCF110920202109276 +:10EC50000302109204021092050278CE89E992EE26 +:10EC600062E00F94F5F1279A2F9A16C02F9880E052 +:10EC700090E0E0EDF7E03197F1F7019684369105E9 +:10EC8000C1F72F9A80E090E0E0EDF7E03197F1F7DF +:10EC9000019684369105C1F78091C00087FFE6CFC9 +:10ECA0008091C00087FFFCCF64C485EA92EE62E0E9 +:10ECB0000F94F5F140910202509103026091040219 +:10ECC0007091050281E020E10F9491F2809102029F +:10ECD00090910302A0910402B091050280509F4FD1 +:10ECE000AF4FBF4F8093020290930302A0930402A0 +:10ECF000B093050280509041A040B04008F426CE69 +:10ED0000A4CF83EB92EE62E00F94F5F140910602FE +:10ED100050910702609108027091090280E020E1A1 +:10ED20000F9491F28091060290910702A09108023F +:10ED3000B091090280509F4FAF4FBF4F80930602A2 +:10ED400090930702A0930802B0930902FFCD80ECD4 +:10ED500092EE62E00F94F5F183E792EE60E00F949B +:10ED6000F5F18FE792EE60E00F94F5F18BE892EE0B +:10ED700060E00F94F5F189E992EE60E00F94F5F10F +:10ED800085EA92EE60E00F94F5F183EB92EE60E09D +:10ED90000F94F5F180EC92EE60E00F94F5F187ECC2 +:10EDA00092EE60E00F94F5F188ED92EE60E00F9442 +:10EDB000F5F18FED92EE60E00F94F5F18AEE92EEB0 +:10EDC00060E00F94F5F183E093EEBDCD87EC92EE19 +:10EDD00062E00F94F5F181E40F947BF282E40F94EA +:10EDE0007BF283E40F947BF284E40F947BF285E45E +:10EDF0000F947BF286E40F947BF287E40F947BF20E +:10EE000088E40F947BF28AE40F947BF28BE40F94F6 +:10EE10007BF28CE40F947BF299CD88ED92EE62E068 +:10EE20000F94F5F1772473948824992409C48FED05 +:10EE300092EE62E00F94F5F140910A0250910B02BC +:10EE400060910C0270910D0282E020E10F9491F22A +:10EE500080910A0290910B02A0910C02B0910D02D8 +:10EE600080509F4FAF4FBF4F80930A0290930B0289 +:10EE7000A0930C02B0930D0269CD8AEE92EE62E08F +:10EE80000F94F5F184EE90EE60E00F94F5F18FECC5 +:10EE900091EE60E00F94F5F1662477244301CC5D98 +:10EEA000DE4F19821882C452D140D401C301B695F5 +:10EEB000A79597958795CA5DDE4F88839983AA8326 +:10EEC000BB83C652D140CC5DDE4FA881B981C4520C +:10EED000D1401196CC5DDE4FB983A883C452D14096 +:10EEE000CD0162E070E00F9434F2B0E2B093C6005E +:10EEF0008091C00086FFFCCF8091C0008064809329 +:10EF0000C000EDE2E093C6008091C00086FFFCCF18 +:10EF10008091C00080648093C000F0E2F093C6004E +:10EF20008091C00086FFFCCF8091C00080648093F8 +:10EF3000C000CA5DDE4FE880F9800A811B81C6529D +:10EF4000D140BB27A12F902F8F2D0F940DF2CA5DBA +:10EF5000DE4F8881C652D1400F940DF2B0E2FB2EF5 +:10EF6000F092C6008091C00086FFFCCF8091C00067 +:10EF700080648093C0000DE30093C6008091C000C0 +:10EF800086FFFCCF8091C00080648093C00010E2B7 +:10EF90001093C6008091C00086FFFCCF8091C00016 +:10EFA00080648093C0008BBEF3012791C65DDE4F65 +:10EFB0002883CA52D140A22EBB24CC24DD2408943D +:10EFC000611C711C811C911C8BBEF3018791282E42 +:10EFD0003324442455240894611C711C811C911C09 +:10EFE0008BBEF3013791C55DDE4F3883CB52D140E4 +:10EFF0000894611C711C811C911C8BBEF30147910C +:10F00000C45DDE4F4883CC52D140ADEFEA2EAFEF66 +:10F01000FA2EAFEF0A2FAFEF1A2F6E0C7F1C801E57 +:10F02000911E142D032DF22CEE24EA0CFB1C0C1D5A +:10F030001D1D0F940DF220E22093C6008091C000A8 +:10F0400086FFFCCF8091C00080648093C000C65DC5 +:10F05000DE4F8881CA52D1400F940DF230E23093D6 +:10F06000C6008091C00086FFFCCF8091C000806404 +:10F070008093C000C45DDE4F8881CC52D1400F9494 +:10F080000DF240E24093C6008091C00086FFFCCFA5 +:10F090008091C00080648093C000C55DDE4F888190 +:10F0A000CB52D1400F940DF250E25093C6008091A4 +:10F0B000C00086FFFCCF8091C00080648093C000B8 +:10F0C0008FEFE8168FEFF80680E0080780E018075A +:10F0D00031F484E092EE60E00F94C2F1DFC0D80119 +:10F0E000C7018070907CA070B0708050904CA040A0 +:10F0F000B040D1F52FEF3FE340E050E0E222F322B1 +:10F1000004231523CA5DDE4FA880B980CA80DB8046 +:10F11000C652D140AE0CBF1CC01ED11EAA0CBB1CD7 +:10F12000CC1CDD1C8EE092EE60E00F94C2F1BB2798 +:10F13000A12F902F8F2D0F940DF28E2D0F940DF285 +:10F1400030E23093C6008091C00086FFFCCF8091F2 +:10F15000C00080648093C0004EE34093C60080915D +:10F16000C00086FFFCCF87C08EE09EEFA0E0B0E03D +:10F17000E822F9220A231B239CE0E91694E9F90608 +:10F1800090E0090790E0190709F088C0C45DDE4FE0 +:10F19000A881CC52D140EA2EFF2400E010E0102FCD +:10F1A0000F2DFE2CEE24C55DDE4FB881CB52D14031 +:10F1B000EB0EF11C011D111DD601C501817090706F +:10F1C000A070B070DC0199278827E80EF91E0A1F8D +:10F1D0001B1F20EF30E040E050E0A222B322C42207 +:10F1E000D52241E1AA0CBB1CCC1CDD1C4A95D1F7F1 +:10F1F000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0BE +:10F20000282239224A225B2235E1220C331C441C7D +:10F21000551C3A95D1F7E20CF31C041D151D57013E +:10F220006801AA0CBB1CCC1CDD1C85E192EE60E0E1 +:10F230000F94C2F1C801AA27BB270F940DF2BB2778 +:10F24000A12F902F8F2D0F940DF28E2D0F940DF274 +:10F2500090E29093C6008091C00086FFFCCF809121 +:10F26000C00080648093C000AEE3A093C60080918C +:10F27000C00086FFFCCF8091C00080648093C000F6 +:10F28000C601AA27BB270F940DF2BB27AD2D9C2DDD +:10F290008B2D0F940DF28A2D0F940DF20F94DCF14B +:10F2A000CC5DDE4FE881F981C452D140F99709F471 +:10F2B0004DCBF4E0EF2EF12C012D112D6E0C7F1CA7 +:10F2C000801E911EF2CD83E093EE62E00F94F5F183 +:10F2D0008AE192EE60E00F94C2F18091C00087FF56 +:10F2E000FCCF1091C6001F751093C6008091C0001E +:10F2F00086FFFCCF8091C00080648093C0000F9493 +:10F30000DCF1812F81548A3108F036C1163409F4BA +:10F3100095C0173490F4133409F44EC0143430F40B +:10F320001134F1F0123409F01DC130C0143409F465 +:10F3300059C0153409F016C16BC01A3409F4C4C0A1 +:10F340001B3438F4173409F48FC0183409F00AC19B +:10F35000A1C01B3409F4D2C01C3409F003C1E8C0B9 +:10F360008FEF81B90DC082B1809582B980E090E0C5 +:10F37000E0EDF7E03197F1F70196883C9105C1F790 +:10F380008091C00087FFEFCF12B8EFC08FEF84B934 +:10F390000DC085B1809585B980E090E0E0EDF7E0A3 +:10F3A0003197F1F70196883C9105C1F78091C00033 +:10F3B00087FFEFCF15B8D9C08FEF87B90DC088B1DF +:10F3C000809588B980E090E0E0EDF7E03197F1F7C3 +:10F3D0000196883C9105C1F78091C00087FFEFCF6F +:10F3E00018B8C3C08FEF8AB90DC08BB180958BB9A7 +:10F3F00080E090E0E0EDF7E03197F1F70196883C8E +:10F400009105C1F78091C00087FFEFCF1BB8ADC059 +:10F410008FEF8DB90DC08EB180958EB980E090E0F0 +:10F42000E0EDF7E03197F1F70196883C9105C1F7DF +:10F430008091C00087FFEFCF1EB897C08FEF80BBD1 +:10F440000DC081B3809581BB80E090E0E0EDF7E0F6 +:10F450003197F1F70196883C9105C1F78091C00082 +:10F4600087FFEFCF11BA81C08FEF83BB0DC084B38C +:10F47000809584BB80E090E0E0EDF7E03197F1F714 +:10F480000196883C9105C1F78091C00087FFEFCFBE +:10F4900014BA6BC08FEF809301010FC080910201FD +:10F4A00080958093020180E090E0E0EDF7E03197F5 +:10F4B000F1F70196883C9105C1F78091C00087FF64 +:10F4C000EDCF1092020151C08FEF809304010FC065 +:10F4D0008091050180958093050180E090E0E0ED4A +:10F4E000F7E03197F1F70196883C9105C1F78091DB +:10F4F000C00087FFEDCF1092050137C08FEF8093DA +:10F5000007010FC08091080180958093080180E079 +:10F5100090E0E0EDF7E03197F1F70196883C910536 +:10F52000C1F78091C00087FFEDCF109208011DC088 +:10F530008FEF80930A010FC080910B01809580931B +:10F540000B0180E090E0E0EDF7E03197F1F70196F4 +:10F55000883C9105C1F78091C00087FFEDCF1092E4 +:10F560000B0103C085E292EEEEC98091C00087FFD7 +:10F57000FCCF8091C600EAC988E392EEE4C98CE131 +:10F5800091EEE1C988249924933011F1943028F444 +:10F59000913089F09230B8F408C0953061F195301F +:10F5A000F0F0963009F048C043C02B3109F042C951 +:10F5B00091E06BE13FC96227C15DDE4F2883CF52E6 +:10F5C000D14092E037C9B22FA0E0622793E032C960 +:10F5D000822F90E0A82BB92B622794E02BC92E3004 +:10F5E00009F039C3622795E0C05DDE4F19821882A9 +:10F5F000C053D1401FC9E1E0F0E0EC0FFD1FC05D3A +:10F60000DE4F08811981C053D140E00FF11F2083E4 +:10F610000F5F1F4FC05DDE4F19830883C053D14079 +:10F6200062270A171B0709F005C9D80196E002C92D +:10F63000261709F010C303C0973009F0FBC87724E0 +:10F640009981933109F412C19431C8F4963009F4C8 +:10F65000D8C0973050F4923009F406C1933009F4C1 +:10F660006DC0913009F059C253C0913109F477C08F +:10F67000923108F0BBC0903109F04FC2F5C098310B +:10F6800009F487C0993150F4953109F4EFC09531F0 +:10F6900008F4C6C1963109F040C2C2C19A3109F4DA +:10F6A0006CC09A3108F491C09B3109F45BC09D3164 +:10F6B00009F033C29D81903359F48F81882311F46E +:10F6C0009EE11CC0813011F091E018C098E916C08D +:10F6D000892F807591F0903539F4E0E0F0E089E011 +:10F6E0008093570094910AC0983539F4E3E0F0E034 +:10F6F00089E080935700949101C090E01A821B82A8 +:10F700008D818C831D829E831F8227E030E009C299 +:10F710001A8288E08B8381E48C8386E58D8382E581 +:10F720008E8389E48F8383E5888780E589878FE5E9 +:10F730008A8782E38B872BE030E0F3C18A818139AD +:10F7400041F0823941F0803911F48FE005C080E04A +:10F7500003C082E001C08AE01A828B8344C0772410 +:10F76000739482C08D81882311F48EE12CC0813086 +:10F7700011F081E028C088E926C01A82E1E0F0E0BB +:10F7800089E08093570084918B831C8224E030E0D1 +:10F79000C8C18B81803589F48C81883039F4E2E0EE +:10F7A000F0E089E08093570084910DC0E0E0F0E044 +:10F7B00089E080935700849106C0E3E0F0E089E09F +:10F7C0008093570084911A82DFCF8D81836C99E0FA +:10F7D000E1E0F0E0082E90935700E89507B600FCB2 +:10F7E000FDCF1A821B8223E030E09BC180EC8A832C +:10F7F000CE5CDE4F188219821A821B82C253D1401E +:10F800008EC18A8190E0A0E0B0E0582F44273327D2 +:10F8100022278B8190E0A0E0B0E0DC0199278827C7 +:10F82000282B392B4A2B5B2B8D8190E0A0E0B0E098 +:10F83000282B392B4A2B5B2B8C8190E0A0E0B0E089 +:10F84000BA2FA92F982F8827282B392B4A2B5B2BCF +:10F85000220F331F441F551FC05EDE4F288339839C +:10F860004A835B83C052D1401A8259C13A81C95C34 +:10F87000DE4F3883C753D140CA5CDE4F1882C6536F +:10F88000D1408B81C82EDD24CA5CDE4F488159816E +:10F89000C653D140C42AD52A933109F082C0CE5C28 +:10F8A000DE4F88819981AA81BB81C253D1408050AB +:10F8B000904CA340B04030F583E0CE5CDE4FE88052 +:10F8C000F9800A811B81C253D140F70100935B008C +:10F8D00080935700E89507B600FCFDCFCE5CDE4F65 +:10F8E000088119812A813B81C253D14000501F4FAA +:10F8F0002F4F3F4FCE5CDE4F088319832A833B8313 +:10F90000C253D140C05EDE4F488159816A817B81FC +:10F91000C052D140DE011B9631E08C9111962C91A2 +:10F9200011971296C75CDE4F2883C953D140C85C3B +:10F93000DE4F1882C853D14090E0C85CDE4FE881AA +:10F94000F981C853D1408E2B9F2B0C01FA01609393 +:10F950005B0030935700E89511244E5F5F4F6F4F67 +:10F960007F4F0EEFE02E0FEFF02ECE0CDF1CC114F8 +:10F97000D10499F685E0C05EDE4F088119812A81A5 +:10F980003B81C052D140F80120935B008093570027 +:10F99000E89507B600FCFDCF81E180935700E8951C +:10F9A00035C0C05EDE4F88819981AA81BB81C0527B +:10F9B000D140B695A795979587957C018601ABE0D8 +:10F9C000AA2EB12CAC0EBD1E0BC0D5016D915D01F0 +:10F9D000C7010F947FFE0894E11CF11C01501040F8 +:10F9E0000115110591F7A60160E070E0440F551F65 +:10F9F000661F771FC05EDE4FE880F9800A811B8199 +:10FA0000C052D1404E0D5F1D601F711F1A82C05E33 +:10FA1000DE4F488359836A837B83C052D1407FC0C5 +:10FA2000FA80C55CDE4FF882CB53D140C65CDE4F16 +:10FA30001882CA53D1408B81C82EDD24C65CDE4FAC +:10FA400008811981CA53D140C02AD12A1A828981DA +:10FA5000BE016D5F7F4F843121F59601C05EDE4FA0 +:10FA6000E880F9800A811B81C052D1400BBFF701A9 +:10FA700087919691DB018C9311969C936E5F7F4FDB +:10FA8000D801C7010296A11DB11DC05EDE4F88835B +:10FA90009983AA83BB83C052D14022503040F1F6F3 +:10FAA00036C0C05EDE4F288139814A815B81C052F9 +:10FAB000D1400894C108D108760100E010E0089414 +:10FAC000C11CD11C0894E11CF11C011D111DE20E8A +:10FAD000F31E041F151F21BDBB27A52F942F832FB5 +:10FAE00082BD2F5F3F4F4F4F5F4FF89A80B5DB01CC +:10FAF0008D93BD012E153F054007510761F7C05E8C +:10FB0000DE4F288339834A835B83C052D1409601FC +:10FB10002D5F3F4FFB01108204C080EC8A8322E0FE +:10FB200030E08BE18093C6008091C00086FFFCCF5F +:10FB30008091C00080648093C000C15DDE4FF88179 +:10FB4000CF52D140F093C6008091C00086FFFCCF19 +:10FB50008091C00080648093C000432F3093C60022 +:10FB60008091C00086FFFCCF8091C00080648093AC +:10FB7000C000922F2093C6008091C00086FFFCCF6A +:10FB80008091C00080648093C0008EE08093C600A6 +:10FB90008091C00086FFFCCF8091C000806480937C +:10FBA000C00065E1C15DDE4FE880CF52D1406E25D7 +:10FBB00069276427FE01319610C090819093C6009A +:10FBC0008091C00086FFFCCF31968091C000806498 +:10FBD0008093C0006927215030402115310569F715 +:10FBE0006093C6008091C00086FFFCCF8091C0006A +:10FBF00080648093C00085B1805885B9772081F4F6 +:10FC0000C15DDE4F0881CF52D1400F5FC15DDE4F35 +:10FC10000883CF52D14090E0A0E0B0E00D941AF4F8 +:10FC200027982F9880E090E020ED37E0F901319798 +:10FC3000F1F7019684369105C9F700008091C00064 +:10FC40008D7F8093C00081E180935700E895EE2777 +:10FC5000FF270994FFCF90E00D941AF497FB092E2B +:10FC600007260AD077FD04D02ED006D000201AF443 +:10FC7000709561957F4F0895F6F7909581959F4F08 +:10FC80000895A1E21A2EAA1BBB1BFD010DC0AA1FDD +:10FC9000BB1FEE1FFF1FA217B307E407F50720F0F5 +:10FCA000A21BB30BE40BF50B661F771F881F991F70 +:10FCB0001A9469F760957095809590959B01AC01B9 +:10FCC000BD01CF010895AA1BBB1B51E107C0AA1FAC +:10FCD000BB1FA617B70710F0A61BB70B881F991FED +:10FCE0005A95A9F780959095BC01CD010895F99991 +:10FCF000FECF92BD81BDF89A992780B50895262F31 +:10FD0000F999FECF1FBA92BD81BD20BD0FB6F89400 +:0EFD1000FA9AF99A0FBE01960895F894FFCF63 +:040000033000E000E9 +:00000001FF diff --git a/mc_labs/mc_lab_02/mc_lab2.ino/mc_lab2.ino.ino b/mc_labs/mc_lab_02/mc_lab2.ino/mc_lab2.ino.ino deleted file mode 100644 index dab5a43..0000000 --- a/mc_labs/mc_lab_02/mc_lab2.ino/mc_lab2.ino.ino +++ /dev/null @@ -1,99 +0,0 @@ - -#include - - -#define GREEN_LED 4 // esp8266 D2 -#define YELLOW_LED 0 // esp8266 D3 -#define RED_LED 2 // esp8266 D4 builtin led - -#define BUTTON_BLACK 14 // esp8266 D5 -#define BUTTON_WHITE 12 // esp8266 D6 - -#define ON_DELAY_TIMER 250 -#define OFF_DELAY_TIMER 400 - -#include "wifi.h" - -void setup() -{ - Serial.begin(115200); - - // put your setup code here, to run once: - pinMode(GREEN_LED, OUTPUT); - digitalWrite(GREEN_LED, LOW); - pinMode(YELLOW_LED,OUTPUT); - digitalWrite(YELLOW_LED, LOW); - pinMode(RED_LED, OUTPUT); - digitalWrite(RED_LED, LOW); - - setupWifi(); - - pinMode(BUTTON_BLACK, INPUT); - pinMode(BUTTON_WHITE, INPUT); -} - -void clickHandler() -{ - - // read the state of the switch into a local variable: - int reading = digitalRead(buttonPin); - - // check to see if you just pressed the button - // (i.e. the input went from LOW to HIGH), and you've waited long enough - // since the last press to ignore any noise: - - // If the switch changed, due to noise or pressing: - if (reading != lastButtonState) { - // reset the debouncing timer - lastDebounceTime = millis(); - } - - if ((millis() - lastDebounceTime) > debounceDelay) { - // whatever the reading is at, it's been there for longer than the debounce - // delay, so take it as the actual current state: - - // if the button state has changed: - if (reading != buttonState) { - buttonState = reading; - - // only toggle the LED if the new button state is HIGH - if (buttonState == HIGH) { - ledState = !ledState; - //todo for 3 leds - } - } - } - - // set the LED: - digitalWrite(output, ledState); - - // save the reading. Next time through the loop, it'll be the lastButtonState: - lastButtonState = reading; - - - //easy and bad way - if (digitalRead(BUTTON_WHITE) == HIGH) - { - digitalWrite(GREEN_LED, HIGH); - delay(ON_DELAY_TIMER); - digitalWrite(GREEN_LED, LOW); - delay(OFF_DELAY_TIMER); - - digitalWrite(YELLOW_LED, HIGH); - delay(ON_DELAY_TIMER); - digitalWrite(YELLOW_LED, LOW); - delay(OFF_DELAY_TIMER); - - digitalWrite(RED_LED, HIGH); - delay(ON_DELAY_TIMER); - digitalWrite(RED_LED, LOW); - delay(OFF_DELAY_TIMER); - } - -} - -void loop() -{ - clickHandler(); - -} diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/handleCommands.h b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/handleCommands.h new file mode 100644 index 0000000..fc54f79 --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/handleCommands.h @@ -0,0 +1,108 @@ +#ifndef HANDLE_COMMANDS_H +#define HANDLE_COMMANDS_H + +#include +#include "lcd.h" + +enum CommandType +{ + NOT_DEFINED = 0, + START_FAN_A = 0xA1, + STOP_FAN_A = 0xA2, + OCR_A_COMMAND = 0xA3, + START_FAN_B = 0xB1, + STOP_FAN_B = 0xB2, + OCR_B_COMMAND = 0xB3 +}; + +CommandType command = NOT_DEFINED; + +bool isCommand = true; +bool modeFanA = false; +bool modeFanB = false; + +unsigned char pwmValue_A = 0; +unsigned char pwmValue_B = 0; + +void handleFanACommand(uint8_t inByte) +{ + switch (inByte) + { + case START_FAN_A: + FAN_A = pwmValue_A; + modeFanA = true; + lcdPrintFanA(modeFanA); + break; + + case STOP_FAN_A: + FAN_A = 0; + modeFanA = false; + lcdPrintFanA(modeFanA); + break; + + case OCR_A_COMMAND: + isCommand = false; + command = inByte; //(CommandType) + break; + + default: + break; + } +} + +void handleFanBCommand(int inByte) +{ + switch (inByte) + { + case START_FAN_B: + FAN_B = pwmValue_B; + modeFanB = true; + lcdPrintFanB(modeFanB); + break; + + case STOP_FAN_B: + FAN_B = 0; + modeFanB = false; + lcdPrintFanB(modeFanB); + break; + + case OCR_B_COMMAND: + isCommand = false; + command = inByte; //(CommandType) + break; + + default: + break; + } +} + +void handleOCRCommand(uint8_t inByte) +{ + switch (command) + { + case OCR_A_COMMAND: + isCommand = true; + pwmValue_A = inByte; + if (modeFanA) + { + FAN_A = pwmValue_A; + lcdPrintFanCmdValueA(); + } + break; + + case OCR_B_COMMAND: + isCommand = true; + pwmValue_B = inByte; + if (modeFanB) + { + FAN_B = pwmValue_B; + lcdPrintFanCmdValueB(); + } + break; + + default: + break; + } +} + +#endif \ No newline at end of file diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/lcd.h b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/lcd.h new file mode 100644 index 0000000..b2558ee --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/lcd.h @@ -0,0 +1,69 @@ +#ifndef LCD +#define LCD + +#define ROWS 2 +#define COLS 16 +#include + +#define FAN_A OCR0A // 13 +#define FAN_B OCR0B // 4 + +const int rs = 5, rw = 6, en = 7, d4 = 8, d5 = 9, d6 = 10, d7 = 11; +LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7); + +void lcdInit() +{ + lcd.begin(COLS, ROWS); + lcd.home(); + lcd.print("Start Client"); +} + +void lcdPrintFanA(bool currentMode) +{ + lcd.setCursor(0, 0); + if (currentMode) + { + lcd.print("StartA "); + } + else + { + lcd.print("StopA "); + } + lcd.print("OCRA="); + lcd.print(FAN_A); + lcd.print(" "); +} + +void lcdPrintFanB(bool currentMode) +{ + lcd.setCursor(0, 1); + if (currentMode) + { + lcd.print("StartB "); + } + else + { + lcd.print("StopB "); + } + lcd.print("OCRB="); + lcd.print(FAN_B); + lcd.print(" "); +} + +void lcdPrintFanCmdValueA() +{ + lcd.setCursor(7, 0); + lcd.print("OCRA="); + lcd.print(FAN_A); + lcd.print(" "); +} + +void lcdPrintFanCmdValueB() +{ + lcd.setCursor(7, 1); + lcd.print("OCRB="); + lcd.print(FAN_B); + lcd.print(" "); +} + +#endif \ No newline at end of file diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino new file mode 100644 index 0000000..5829b41 --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino @@ -0,0 +1,153 @@ + +#define AVR_ATmega2560 +#include +#include "lcd.h" +#include "handleCommands.h" + +#define UART_SPD 9600 + +const uint8_t ledPin = LED_BUILTIN; +const uint8_t buttonPin = 22; + +void setupTimer() +{ + // Timer0 -- fast PWM + TCCR0A = (1 << WGM01) | (1 << WGM00) | (1 << COM0A1) | (1 << COM0B1); + // TCCR0B = (0 << CS02) | (1 << CS01) | (1 << CS00); // prescaler= + TCCR0B = (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler= +} + +void setup() +{ + + Serial.begin(UART_SPD); + + pinMode(ledPin, OUTPUT); + digitalWrite(ledPin, LOW); + pinMode(buttonPin, INPUT_PULLUP); + + setupTimer(); + + FAN_A = 0; + FAN_B = 0; + // OC_Pins + DDRB |= 1 << 7; + DDRG |= 1 << 5; +} + + +void loop() +{ + while (Serial.available()) + { + uint8_t inByte = Serial.read(); + if (isCommand) + { + handleFanACommand(inByte); + handleFanBCommand(inByte); + handleOCRCommand(inByte); + } + else + { + handleOCRCommand(inByte); + } + } +} + +#if 0 +void loop() +{ + while(Serial.available()) + { + uint8_t inByte = Serial.read(); + + if (isCommand) + { + + if (inByte == START_FAN_A) + { + FAN_A = pwmValue_A; + isFanAStarted = true; + lcd.setCursor(0, 0); + lcd.print("StartA OCRA="); + lcd.print(FAN_A); + lcd.print(" "); + } + + else if (inByte == STOP_FAN_A) + { + FAN_A = 0; + isFanAStarted = false; + lcd.setCursor(0, 0); + lcd.print("StopA OCRA="); + lcd.print(FAN_A); + lcd.print(" "); + } + // OCR_A command + else if (inByte == OCR_A_COMMAND) + { + isCommand = false; + command = inByte; + } + + if (inByte == START_FAN_B) + { + FAN_B = pwmValue_B; + isFanBStarted = true; + lcd.setCursor(0, 1); + lcd.print("StartB OCRB="); + lcd.print(FAN_B); + lcd.print(" "); + } + // Stop FAN_B + else if (inByte == STOP_FAN_B) + { + FAN_B = 0; + isFanBStarted = false; + lcd.setCursor(0, 1); + lcd.print("StopB OCRB="); + lcd.print(FAN_B); + lcd.print(" "); + } + // OCR_B command + else if (inByte == OCR_B_COMMAND) + { + isCommand = false; + command = inByte; + } + } + else + { + if (command == OCR_A_COMMAND) + { + + isCommand = true; + pwmValue_A = inByte; + if (isFanAStarted) + { + + FAN_A = pwmValue_A; + lcd.setCursor(7, 0); + lcd.print("OCRA="); + lcd.print(FAN_A); + lcd.print(" "); + } + } + //--------------------------- + if (command == OCR_B_COMMAND) + { + isCommand = true; + pwmValue_B = inByte; + if (isFanBStarted) + { + FAN_B = pwmValue_B; + lcd.setCursor(7, 1); + lcd.print("OCRB="); + lcd.print(FAN_B); + lcd.print(" "); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.mega.hex b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.mega.hex new file mode 100644 index 0000000..16dc124 --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.mega.hex @@ -0,0 +1,237 @@ +:1000000007C1000033C1000031C100002FC1000052 +:100010002DC100002BC1000029C1000027C1000034 +:1000200025C1000023C1000021C100001FC1000044 +:100030001DC100001BC1000019C1000017C1000054 +:1000400015C1000013C1000011C100000FC1000064 +:100050000DC100000BC1000009C1000085C40000F3 +:1000600005C10000F4C40000C9C40000FFC00000C6 +:10007000FDC00000FBC00000F9C00000F7C0000098 +:10008000F5C00000F3C00000F1C00000EFC00000A8 +:10009000EDC00000EBC00000E9C00000E7C00000B8 +:1000A000E5C00000E3C00000E1C00000DFC00000C8 +:1000B000DDC00000DBC00000D9C00000D7C00000D8 +:1000C000D5C00000D3C00000D1C00000CFC00000E8 +:1000D000CDC00000CBC00000C9C00000C7C00000F8 +:1000E000C5C000006501680157015B015F019F0108 +:1000F0006C01700176017A017E01840188018C0116 +:100100009F01920196019A0100002100240027001E +:100110002A002D0030003300010100000401070116 +:100120000A0100002200250028002B002E003100CB +:10013000340002010000050108010B010505050559 +:10014000070508080808020202020A0A080804044F +:10015000040401010101010101010303030303037D +:100160000303040707070C0C0C0C0C0C0C0C02020C +:10017000020206060606060606060B0B0B0B0B0B09 +:100180000B0B010210202008081020401020408096 +:10019000020102010804020101020408102040804B +:1001A00080402010080402018004020180402010D9 +:1001B0000804020108040201010204081020408022 +:1001C000010204081020408000000A0B02090C0DF7 +:1001D0000E080703040100000000000000000000FA +:1001E000000000000000000000000000000000000F +:1001F00000000000121110000000000000000000CC +:1002000000000000000000000000000000005D058C +:1002100011241FBECFEFD1E2DEBFCDBF00E00CBF87 +:1002200012E0A0E0B2E0E4E4FEE000E00BBF02C0B8 +:1002300007900D92A436B107D9F723E0A4E6B2E007 +:1002400001C01D92A732B207E1F711E0C8E0D1E08A +:1002500000E005C021970109802FFE01E5D5C730D8 +:10026000D10780E00807B1F771D4EAC5C9CE362FAF +:1002700090E0FC01E853FE4F4491FC01EE57FE4F25 +:100280002491FC01E45CFE4F9491992309F46BC026 +:10029000442309F454C050E0FA013197E231F105EA +:1002A00008F04DC08827EE58FF4F8F4FBDC5809195 +:1002B00080008F7707C0809180008F7D03C0809180 +:1002C0008000877F809380003AC084B58F7702C01A +:1002D00084B58F7D84BD33C08091B0008F7703C01B +:1002E0008091B0008F7D8093B00029C080919000F4 +:1002F0008F7707C0809190008F7D03C08091900020 +:10030000877F809390001BC08091A0008F7707C0EB +:100310008091A0008F7D03C08091A000877F809393 +:10032000A0000DC0809120018F7707C0809120012F +:100330008F7D03C080912001877F80932001E92F6A +:10034000F0E0EE0FFF1FEE5DFE4FA591B4919FB759 +:10035000F894311104C08C912095282302C0EC91AF +:100360002E2B2C939FBF0895CF93DF9390E0FC0139 +:10037000EE57FE4F2491FC01E45CFE4F84918823EC +:1003800061F190E0880F991FFC01E85FFE4FC59175 +:10039000D491FC01EE5DFE4FA591B491611109C0AD +:1003A0009FB7F8948881209582238883EC912E232F +:1003B0000BC0623061F49FB7F8948881322F30957A +:1003C00083238883EC912E2B2C939FBF06C08FB77D +:1003D000F894E8812E2B28838FBFDF91CF91089569 +:1003E000CF92DF92EF92FF920F931F93CF93DF9301 +:1003F0006C017A018B01C0E0D0E0CE15DF0581F001 +:10040000D8016D918D01D601ED91FC910190F081A3 +:10041000E02DC6011995892B11F02196EECF7E01B2 +:10042000C701DF91CF911F910F91FF90EF90DF9067 +:10043000CF900895FC01538D448D252F30E0842FFB +:1004400090E0821B930B541710F0CF9608950197FC +:100450000895FC01918D828D981761F0828DDF01E6 +:10046000A80FB11D5D968C91928D9F5F9F73928FA7 +:1004700090E008958FEF9FEF0895FC01918D828D9C +:10048000981731F0828DE80FF11D858D90E0089569 +:100490008FEF9FEF0895FC01918D228D892F90E0C1 +:1004A000805C9F4F821B91098F739927089582E783 +:1004B00092E0F1DF21E0892B09F420E0822F0895FA +:1004C000FC01848DDF01A80FB11DA35ABF4F2C91F1 +:1004D000848D90E001968F739927848FA689B789C0 +:1004E0002C93A089B1898C91837080648C93938DB7 +:1004F000848D981306C00288F389E02D80818F7D5A +:1005000080830895EF92FF920F931F93CF93DF9311 +:10051000EC0181E0888F9B8D8C8D981305C0E88954 +:10052000F989808185FD25C0F62E0B8D10E00F5FC7 +:100530001F4F0F731127E02E8C8DE8120BC00FB6E2 +:1005400007FCFACFE889F989808185FFF5CFCE01D4 +:10055000B7DFF2CF8B8DFE01E80FF11DE35AFF4F9D +:10056000F0829FB7F8940B8FEA89FB8980818062C3 +:100570000AC09FB7F894EE89FF896083E889F989FA +:1005800080818370806480839FBF81E090E0DF91F1 +:10059000CF911F910F91FF90EF900895CF93DF932C +:1005A000EC01888D8823C1F0EA89FB89808185FD73 +:1005B00005C0A889B9898C9186FD0EC00FB607FCCD +:1005C000F5CF808185FFF2CFA889B9898C9185FF0D +:1005D000EDCFCE0175DFE8CFDF91CF91089580E0B8 +:1005E00090E0892B19F063DF811125C080E090E055 +:1005F000892B41F080E090E0892B21F00E940000DF +:1006000081111CC080E090E0892B41F080E090E0F7 +:10061000892B21F00E940000811113C080E090E03E +:10062000892BA1F080E090E0892B81F00E940000EE +:1006300081110AC008950E940000D8CF0E940000D6 +:10064000E1CF0E940000EACF0C9400000895CF9300 +:10065000DF93EC0160E08E810ADE61E08E8107DECF +:1006600060E08E8104DE8BE891E00197F1F7DF9185 +:10067000CF910895CF92DF92EF92FF920F931F9345 +:10068000CF93DF936C017C0187E0E80EF11CC0E0A2 +:10069000D0E0062F10E0B8010C2E02C075956795CA +:1006A0000A94E2F76170F70181917F01E0DD219604 +:1006B000C430D10581F7C601DF91CF911F910F9111 +:1006C000FF90EF90DF90CF90C2CFCF92DF92EF926A +:1006D000FF920F931F93CF93DF93EC01F62E642FBD +:1006E0008C81C5DD8D818F3F11F060E0C0DD8F858D +:1006F0000F2D10E084FF23C06E0187E0C80ED11CCF +:10070000E12CF12CB8010E2C02C0759567950A9466 +:10071000E2F76170F60181916F01A9DDFFEFEF1A39 +:10072000FF0A88E0E816F10469F7CE01DF91CF9166 +:100730001F910F91FF90EF90DF90CF9088CFB8017D +:1007400084E0759567958A95E1F7CE0193DF6F2D6B +:10075000CE01DF91CF911F910F91FF90EF90DF902D +:10076000CF9088CF40E0682F8FE093E0AECFCF935B +:10077000DF93823028F090911E03986090931E03BF +:10078000809322031092230380E48093240380E16A +:100790008093250380E58093260361E08091130315 +:1007A000E3DD809114038F3F11F061E0DDDD61E056 +:1007B00080911503D9DDCFE0D3E09E012F50334067 +:1007C00080911E0384FD03C084E090E002C088E0B5 +:1007D00090E021962817390724F461E08E81C4DD6A +:1007E000ECCF8BE39DE00197F1F760E0809113037C +:1007F0003EDD60E0809115033ADD809114038F3F68 +:1008000011F060E034DD80911E0384FD1CC063E0C4 +:100810008FE093E02FDFCBE4D6E4CE010197F1F730 +:1008200063E08FE093E026DF2197F1F763E08FE04C +:1008300093E020DF83E592E00197F1F762E08FE03B +:1008400093E018DF12C080628DDF8BE496E401979D +:10085000F1F780911E03806285DF83E592E00197C6 +:10086000F1F780911E0380627DDF80911E0380621C +:1008700079DF84E080931F038CE074DF81E072DF16 +:100880008BE39FE10197F1F782E08093200386E0FC +:10089000DF91CF9167CF643008F063E0909122033D +:1008A000691710F06FEF690FE62FF0E0E15FFC4F82 +:1008B0009489890F806856CF41E007DF81E090E09E +:1008C0000895089580E090E00895009761F0FC019C +:1008D00001900020E9F73197AF01481B590BBC018B +:1008E0008FE093E07DCD80E090E00895EECFCF9251 +:1008F000DF92EF92FF920F931F93CF93DF93CDB7C9 +:10090000DEB7A1970FB6F894DEBF0FBECDBF282F7C +:1009100030E040E050E019A28E010F5D1F4F8AE0E9 +:10092000C82ED12CE12CF12CCA01B901A7019601E6 +:1009300059D2605DF80162938F012115310541059F +:10094000510591F7CF01C1DFA1960FB6F894DEBF34 +:100950000FBECDBFDF91CF911F910F91FF90EF9010 +:10096000DF90CF90089568D21F920F920FB60F922A +:1009700011242F933F938F939F93AF93BF938091B5 +:100980006E0290916F02A0917002B091710230914D +:100990006D0223E0230F2D3720F40196A11DB11D18 +:1009A00005C026E8230F0296A11DB11D20936D02FC +:1009B00080936E0290936F02A0937002B0937102C5 +:1009C0008091690290916A02A0916B02B0916C02D1 +:1009D0000196A11DB11D8093690290936A02A093B4 +:1009E0006B02B0936C02BF91AF919F918F913F9139 +:1009F0002F910F900FBE0F901F9018951F920F927E +:100A00000FB60F9211240BB60F922F933F934F9373 +:100A10005F936F937F938F939F93AF93BF93EF9366 +:100A2000FF9382E792E04CDDFF91EF91BF91AF9190 +:100A30009F918F917F916F915F914F913F912F91F6 +:100A40000F900BBE0F900FBE0F901F9018951F9226 +:100A50000F920FB60F9211240BB60F922F938F9314 +:100A60009F93EF93FF93E0918202F0918302808144 +:100A7000E0918802F091890282FD12C090818091FC +:100A80008B028F5F8F7320918C02821751F0E0915F +:100A90008B02F0E0EE58FD4F958F80938B0201C0E2 +:100AA0008081FF91EF919F918F912F910F900BBEBD +:100AB0000F900FBE0F901F901895E2E7F2E013829F +:100AC000128288EE93E0A0E0B0E084839583A68351 +:100AD000B78385E092E09183808385EC90E09587F1 +:100AE000848784EC90E09787868780EC90E0918BF8 +:100AF000808B81EC90E0938B828B82EC90E0958BE5 +:100B0000848B86EC90E0978B868B118E128E138EE1 +:100B1000148EEFE0F3E01382128287E192E091837A +:100B2000808385E0848386E0858387E0868388E010 +:100B3000878389E080878AE081878BE082871386BC +:100B4000148615861686178681E011CE789484B5B2 +:100B5000826084BD84B5816084BD85B5826085BDB9 +:100B600085B5816085BD80916E00816080936E0047 +:100B70001092810080918100826080938100809139 +:100B800081008160809381008091800081608093EA +:100B900080008091B10084608093B1008091B000AA +:100BA00081608093B0008091910082608093910079 +:100BB000809191008160809391008091900081608C +:100BC000809390008091A10082608093A100809129 +:100BD000A10081608093A1008091A000816080933A +:100BE000A0008091210182608093210180912101E8 +:100BF0008160809321018091200181608093200198 +:100C000080917A00846080937A0080917A0082607B +:100C100080937A0080917A00816080937A0080913D +:100C20007A00806880937A001092C100E09182027D +:100C3000F091830282E08083E0917E02F0917F0256 +:100C40001082E0918002F09181028FEC80831092FB +:100C50008A02E0918602F091870286E08083E0912B +:100C60008402F0918502808180618083E09184021A +:100C7000F0918502808188608083E0918402F09108 +:100C80008502808180688083E0918402F0918502F2 +:100C900080818F7D808361E08DE066DB60E08DE0A8 +:100CA000E6DA62E086E160DB82E061DD8FE192E01E +:100CB0001DDE83EA84BD83E085BD17BC18BC279A7E +:100CC0009D9A11E003EB83EAF82E82E792E0E3DBE2 +:100CD000892B09F47DC082E792E0BBDBEC018091B7 +:100CE0000002882309F444C0C13AD10559F4809127 +:100CF000680287BD1093670260E080E0CCDD8CE283 +:100D000092E00BC0C23AD10559F417BC10926702A9 +:100D100060E080E0C0DD8DE392E0E8DD87B524C0CF +:100D2000C33AD10529F410920002F092660250C035 +:100D3000C13BD10559F48091650288BD10936402CE +:100D400061E080E0A8DD8AE492E00CC0C23BD105FE +:100D500009F040C018BC1092640261E080E09BDDA5 +:100D600087E592E0C3DD88B5C2DD89E392E02FC05C +:100D700080916602833AA1F410930002C093680246 +:100D800080916702882321F1C7BD60E087E083DDA1 +:100D900084E492E0ABDD87B5AADD8AE392E0A6DDCC +:100DA00080916602833BA1F410930002C093650218 +:100DB00080916402882361F0C8BD61E087E06BDD4B +:100DC0008EE592E093DD88B592DD8AE392E08EDDD8 +:100DD00006DC7BCFC33BD105D9F71092000200930C +:100DE0006602F6CFA1E21A2EAA1BBB1BFD010DC0A5 +:100DF000AA1FBB1FEE1FFF1FA217B307E407F507CB +:100E000020F0A21BB30BE40BF50B661F771F881FA6 +:100E1000991F1A9469F760957095809590959B013C +:100E2000AC01BD01CF010895EE0FFF1F881F8BBFDE +:100E30000790F691E02D199481E090E0F89400C0BD +:040E4000F894FFCF54 +:100E440001000000008202F0011A02CE024B0229C6 +:100E5400023D02000000005C04F0016204610453DE +:100E64007461727420436C69656E740053746172AA +:100E74007441204F4352413D002020200053746FA1 +:100E8400704120204F4352413D00537461727442BB +:100E9400204F4352423D0053746F704220204F4311 +:040EA40052423D0079 +:00000001FF diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.with_bootloader.mega.hex b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.with_bootloader.mega.hex new file mode 100644 index 0000000..56825d3 --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/REMAKE_sketch_mar01a/sketch_mar01a.ino.with_bootloader.mega.hex @@ -0,0 +1,705 @@ +:1000000007C1000033C1000031C100002FC1000052 +:100010002DC100002BC1000029C1000027C1000034 +:1000200025C1000023C1000021C100001FC1000044 +:100030001DC100001BC1000019C1000017C1000054 +:1000400015C1000013C1000011C100000FC1000064 +:100050000DC100000BC1000009C1000085C40000F3 +:1000600005C10000F4C40000C9C40000FFC00000C6 +:10007000FDC00000FBC00000F9C00000F7C0000098 +:10008000F5C00000F3C00000F1C00000EFC00000A8 +:10009000EDC00000EBC00000E9C00000E7C00000B8 +:1000A000E5C00000E3C00000E1C00000DFC00000C8 +:1000B000DDC00000DBC00000D9C00000D7C00000D8 +:1000C000D5C00000D3C00000D1C00000CFC00000E8 +:1000D000CDC00000CBC00000C9C00000C7C00000F8 +:1000E000C5C000006501680157015B015F019F0108 +:1000F0006C01700176017A017E01840188018C0116 +:100100009F01920196019A0100002100240027001E +:100110002A002D0030003300010100000401070116 +:100120000A0100002200250028002B002E003100CB +:10013000340002010000050108010B010505050559 +:10014000070508080808020202020A0A080804044F +:10015000040401010101010101010303030303037D +:100160000303040707070C0C0C0C0C0C0C0C02020C +:10017000020206060606060606060B0B0B0B0B0B09 +:100180000B0B010210202008081020401020408096 +:10019000020102010804020101020408102040804B +:1001A00080402010080402018004020180402010D9 +:1001B0000804020108040201010204081020408022 +:1001C000010204081020408000000A0B02090C0DF7 +:1001D0000E080703040100000000000000000000FA +:1001E000000000000000000000000000000000000F +:1001F00000000000121110000000000000000000CC +:1002000000000000000000000000000000005D058C +:1002100011241FBECFEFD1E2DEBFCDBF00E00CBF87 +:1002200012E0A0E0B2E0E4E4FEE000E00BBF02C0B8 +:1002300007900D92A436B107D9F723E0A4E6B2E007 +:1002400001C01D92A732B207E1F711E0C8E0D1E08A +:1002500000E005C021970109802FFE01E5D5C730D8 +:10026000D10780E00807B1F771D4EAC5C9CE362FAF +:1002700090E0FC01E853FE4F4491FC01EE57FE4F25 +:100280002491FC01E45CFE4F9491992309F46BC026 +:10029000442309F454C050E0FA013197E231F105EA +:1002A00008F04DC08827EE58FF4F8F4FBDC5809195 +:1002B00080008F7707C0809180008F7D03C0809180 +:1002C0008000877F809380003AC084B58F7702C01A +:1002D00084B58F7D84BD33C08091B0008F7703C01B +:1002E0008091B0008F7D8093B00029C080919000F4 +:1002F0008F7707C0809190008F7D03C08091900020 +:10030000877F809390001BC08091A0008F7707C0EB +:100310008091A0008F7D03C08091A000877F809393 +:10032000A0000DC0809120018F7707C0809120012F +:100330008F7D03C080912001877F80932001E92F6A +:10034000F0E0EE0FFF1FEE5DFE4FA591B4919FB759 +:10035000F894311104C08C912095282302C0EC91AF +:100360002E2B2C939FBF0895CF93DF9390E0FC0139 +:10037000EE57FE4F2491FC01E45CFE4F84918823EC +:1003800061F190E0880F991FFC01E85FFE4FC59175 +:10039000D491FC01EE5DFE4FA591B491611109C0AD +:1003A0009FB7F8948881209582238883EC912E232F +:1003B0000BC0623061F49FB7F8948881322F30957A +:1003C00083238883EC912E2B2C939FBF06C08FB77D +:1003D000F894E8812E2B28838FBFDF91CF91089569 +:1003E000CF92DF92EF92FF920F931F93CF93DF9301 +:1003F0006C017A018B01C0E0D0E0CE15DF0581F001 +:10040000D8016D918D01D601ED91FC910190F081A3 +:10041000E02DC6011995892B11F02196EECF7E01B2 +:10042000C701DF91CF911F910F91FF90EF90DF9067 +:10043000CF900895FC01538D448D252F30E0842FFB +:1004400090E0821B930B541710F0CF9608950197FC +:100450000895FC01918D828D981761F0828DDF01E6 +:10046000A80FB11D5D968C91928D9F5F9F73928FA7 +:1004700090E008958FEF9FEF0895FC01918D828D9C +:10048000981731F0828DE80FF11D858D90E0089569 +:100490008FEF9FEF0895FC01918D228D892F90E0C1 +:1004A000805C9F4F821B91098F739927089582E783 +:1004B00092E0F1DF21E0892B09F420E0822F0895FA +:1004C000FC01848DDF01A80FB11DA35ABF4F2C91F1 +:1004D000848D90E001968F739927848FA689B789C0 +:1004E0002C93A089B1898C91837080648C93938DB7 +:1004F000848D981306C00288F389E02D80818F7D5A +:1005000080830895EF92FF920F931F93CF93DF9311 +:10051000EC0181E0888F9B8D8C8D981305C0E88954 +:10052000F989808185FD25C0F62E0B8D10E00F5FC7 +:100530001F4F0F731127E02E8C8DE8120BC00FB6E2 +:1005400007FCFACFE889F989808185FFF5CFCE01D4 +:10055000B7DFF2CF8B8DFE01E80FF11DE35AFF4F9D +:10056000F0829FB7F8940B8FEA89FB8980818062C3 +:100570000AC09FB7F894EE89FF896083E889F989FA +:1005800080818370806480839FBF81E090E0DF91F1 +:10059000CF911F910F91FF90EF900895CF93DF932C +:1005A000EC01888D8823C1F0EA89FB89808185FD73 +:1005B00005C0A889B9898C9186FD0EC00FB607FCCD +:1005C000F5CF808185FFF2CFA889B9898C9185FF0D +:1005D000EDCFCE0175DFE8CFDF91CF91089580E0B8 +:1005E00090E0892B19F063DF811125C080E090E055 +:1005F000892B41F080E090E0892B21F00E940000DF +:1006000081111CC080E090E0892B41F080E090E0F7 +:10061000892B21F00E940000811113C080E090E03E +:10062000892BA1F080E090E0892B81F00E940000EE +:1006300081110AC008950E940000D8CF0E940000D6 +:10064000E1CF0E940000EACF0C9400000895CF9300 +:10065000DF93EC0160E08E810ADE61E08E8107DECF +:1006600060E08E8104DE8BE891E00197F1F7DF9185 +:10067000CF910895CF92DF92EF92FF920F931F9345 +:10068000CF93DF936C017C0187E0E80EF11CC0E0A2 +:10069000D0E0062F10E0B8010C2E02C075956795CA +:1006A0000A94E2F76170F70181917F01E0DD219604 +:1006B000C430D10581F7C601DF91CF911F910F9111 +:1006C000FF90EF90DF90CF90C2CFCF92DF92EF926A +:1006D000FF920F931F93CF93DF93EC01F62E642FBD +:1006E0008C81C5DD8D818F3F11F060E0C0DD8F858D +:1006F0000F2D10E084FF23C06E0187E0C80ED11CCF +:10070000E12CF12CB8010E2C02C0759567950A9466 +:10071000E2F76170F60181916F01A9DDFFEFEF1A39 +:10072000FF0A88E0E816F10469F7CE01DF91CF9166 +:100730001F910F91FF90EF90DF90CF9088CFB8017D +:1007400084E0759567958A95E1F7CE0193DF6F2D6B +:10075000CE01DF91CF911F910F91FF90EF90DF902D +:10076000CF9088CF40E0682F8FE093E0AECFCF935B +:10077000DF93823028F090911E03986090931E03BF +:10078000809322031092230380E48093240380E16A +:100790008093250380E58093260361E08091130315 +:1007A000E3DD809114038F3F11F061E0DDDD61E056 +:1007B00080911503D9DDCFE0D3E09E012F50334067 +:1007C00080911E0384FD03C084E090E002C088E0B5 +:1007D00090E021962817390724F461E08E81C4DD6A +:1007E000ECCF8BE39DE00197F1F760E0809113037C +:1007F0003EDD60E0809115033ADD809114038F3F68 +:1008000011F060E034DD80911E0384FD1CC063E0C4 +:100810008FE093E02FDFCBE4D6E4CE010197F1F730 +:1008200063E08FE093E026DF2197F1F763E08FE04C +:1008300093E020DF83E592E00197F1F762E08FE03B +:1008400093E018DF12C080628DDF8BE496E401979D +:10085000F1F780911E03806285DF83E592E00197C6 +:10086000F1F780911E0380627DDF80911E0380621C +:1008700079DF84E080931F038CE074DF81E072DF16 +:100880008BE39FE10197F1F782E08093200386E0FC +:10089000DF91CF9167CF643008F063E0909122033D +:1008A000691710F06FEF690FE62FF0E0E15FFC4F82 +:1008B0009489890F806856CF41E007DF81E090E09E +:1008C0000895089580E090E00895009761F0FC019C +:1008D00001900020E9F73197AF01481B590BBC018B +:1008E0008FE093E07DCD80E090E00895EECFCF9251 +:1008F000DF92EF92FF920F931F93CF93DF93CDB7C9 +:10090000DEB7A1970FB6F894DEBF0FBECDBF282F7C +:1009100030E040E050E019A28E010F5D1F4F8AE0E9 +:10092000C82ED12CE12CF12CCA01B901A7019601E6 +:1009300059D2605DF80162938F012115310541059F +:10094000510591F7CF01C1DFA1960FB6F894DEBF34 +:100950000FBECDBFDF91CF911F910F91FF90EF9010 +:10096000DF90CF90089568D21F920F920FB60F922A +:1009700011242F933F938F939F93AF93BF938091B5 +:100980006E0290916F02A0917002B091710230914D +:100990006D0223E0230F2D3720F40196A11DB11D18 +:1009A00005C026E8230F0296A11DB11D20936D02FC +:1009B00080936E0290936F02A0937002B0937102C5 +:1009C0008091690290916A02A0916B02B0916C02D1 +:1009D0000196A11DB11D8093690290936A02A093B4 +:1009E0006B02B0936C02BF91AF919F918F913F9139 +:1009F0002F910F900FBE0F901F9018951F920F927E +:100A00000FB60F9211240BB60F922F933F934F9373 +:100A10005F936F937F938F939F93AF93BF93EF9366 +:100A2000FF9382E792E04CDDFF91EF91BF91AF9190 +:100A30009F918F917F916F915F914F913F912F91F6 +:100A40000F900BBE0F900FBE0F901F9018951F9226 +:100A50000F920FB60F9211240BB60F922F938F9314 +:100A60009F93EF93FF93E0918202F0918302808144 +:100A7000E0918802F091890282FD12C090818091FC +:100A80008B028F5F8F7320918C02821751F0E0915F +:100A90008B02F0E0EE58FD4F958F80938B0201C0E2 +:100AA0008081FF91EF919F918F912F910F900BBEBD +:100AB0000F900FBE0F901F901895E2E7F2E013829F +:100AC000128288EE93E0A0E0B0E084839583A68351 +:100AD000B78385E092E09183808385EC90E09587F1 +:100AE000848784EC90E09787868780EC90E0918BF8 +:100AF000808B81EC90E0938B828B82EC90E0958BE5 +:100B0000848B86EC90E0978B868B118E128E138EE1 +:100B1000148EEFE0F3E01382128287E192E091837A +:100B2000808385E0848386E0858387E0868388E010 +:100B3000878389E080878AE081878BE082871386BC +:100B4000148615861686178681E011CE789484B5B2 +:100B5000826084BD84B5816084BD85B5826085BDB9 +:100B600085B5816085BD80916E00816080936E0047 +:100B70001092810080918100826080938100809139 +:100B800081008160809381008091800081608093EA +:100B900080008091B10084608093B1008091B000AA +:100BA00081608093B0008091910082608093910079 +:100BB000809191008160809391008091900081608C +:100BC000809390008091A10082608093A100809129 +:100BD000A10081608093A1008091A000816080933A +:100BE000A0008091210182608093210180912101E8 +:100BF0008160809321018091200181608093200198 +:100C000080917A00846080937A0080917A0082607B +:100C100080937A0080917A00816080937A0080913D +:100C20007A00806880937A001092C100E09182027D +:100C3000F091830282E08083E0917E02F0917F0256 +:100C40001082E0918002F09181028FEC80831092FB +:100C50008A02E0918602F091870286E08083E0912B +:100C60008402F0918502808180618083E09184021A +:100C7000F0918502808188608083E0918402F09108 +:100C80008502808180688083E0918402F0918502F2 +:100C900080818F7D808361E08DE066DB60E08DE0A8 +:100CA000E6DA62E086E160DB82E061DD8FE192E01E +:100CB0001DDE83EA84BD83E085BD17BC18BC279A7E +:100CC0009D9A11E003EB83EAF82E82E792E0E3DBE2 +:100CD000892B09F47DC082E792E0BBDBEC018091B7 +:100CE0000002882309F444C0C13AD10559F4809127 +:100CF000680287BD1093670260E080E0CCDD8CE283 +:100D000092E00BC0C23AD10559F417BC10926702A9 +:100D100060E080E0C0DD8DE392E0E8DD87B524C0CF +:100D2000C33AD10529F410920002F092660250C035 +:100D3000C13BD10559F48091650288BD10936402CE +:100D400061E080E0A8DD8AE492E00CC0C23BD105FE +:100D500009F040C018BC1092640261E080E09BDDA5 +:100D600087E592E0C3DD88B5C2DD89E392E02FC05C +:100D700080916602833AA1F410930002C093680246 +:100D800080916702882321F1C7BD60E087E083DDA1 +:100D900084E492E0ABDD87B5AADD8AE392E0A6DDCC +:100DA00080916602833BA1F410930002C093650218 +:100DB00080916402882361F0C8BD61E087E06BDD4B +:100DC0008EE592E093DD88B592DD8AE392E08EDDD8 +:100DD00006DC7BCFC33BD105D9F71092000200930C +:100DE0006602F6CFA1E21A2EAA1BBB1BFD010DC0A5 +:100DF000AA1FBB1FEE1FFF1FA217B307E407F507CB +:100E000020F0A21BB30BE40BF50B661F771F881FA6 +:100E1000991F1A9469F760957095809590959B013C +:100E2000AC01BD01CF010895EE0FFF1F881F8BBFDE +:100E30000790F691E02D199481E090E0F89400C0BD +:040E4000F894FFCF54 +:100E440001000000008202F0011A02CE024B0229C6 +:100E5400023D02000000005C04F0016204610453DE +:100E64007461727420436C69656E740053746172AA +:100E74007441204F4352413D002020200053746FA1 +:100E8400704120204F4352413D00537461727442BB +:100E9400204F4352423D0053746F704220204F4311 +:040EA40052423D0079 +:020000023000CC +:10E000000D9489F10D94B2F10D94B2F10D94B2F129 +:10E010000D94B2F10D94B2F10D94B2F10D94B2F1F0 +:10E020000D94B2F10D94B2F10D94B2F10D94B2F1E0 +:10E030000D94B2F10D94B2F10D94B2F10D94B2F1D0 +:10E040000D94B2F10D94B2F10D94B2F10D94B2F1C0 +:10E050000D94B2F10D94B2F10D94B2F10D94B2F1B0 +:10E060000D94B2F10D94B2F10D94B2F10D94B2F1A0 +:10E070000D94B2F10D94B2F10D94B2F10D94B2F190 +:10E080000D94B2F10D94B2F10D94B2F10D94B2F180 +:10E090000D94B2F10D94B2F10D94B2F10D94B2F170 +:10E0A0000D94B2F10D94B2F10D94B2F10D94B2F160 +:10E0B0000D94B2F10D94B2F10D94B2F10D94B2F150 +:10E0C0000D94B2F10D94B2F10D94B2F10D94B2F140 +:10E0D0000D94B2F10D94B2F10D94B2F10D94B2F130 +:10E0E0000D94B2F141546D656761323536300041AF +:10E0F000726475696E6F206578706C6F72657220DE +:10E1000073746B3530305632206279204D4C530099 +:10E11000426F6F746C6F616465723E004875683F52 +:10E1200000436F6D70696C6564206F6E203D200048 +:10E130004350552054797065202020203D20005FF9 +:10E140005F4156525F415243485F5F3D2000415658 +:10E1500052204C696243205665723D20004743437C +:10E160002056657273696F6E203D20004350552024 +:10E1700049442020202020203D20004C6F7720663D +:10E18000757365202020203D20004869676820665F +:10E190007573652020203D200045787420667573D6 +:10E1A00065202020203D20004C6F636B2066757336 +:10E1B000652020203D20004D617220203720323024 +:10E1C000313300312E362E3800342E332E350056A2 +:10E1D00023202020414444522020206F7020636F70 +:10E1E00064652020202020696E73747275637469E1 +:10E1F0006F6E2061646472202020496E74657272B3 +:10E20000757074006E6F20766563746F7200726A49 +:10E210006D702020006A6D70200057686174207056 +:10E220006F72743A00506F7274206E6F7420737541 +:10E2300070706F72746564004D7573742062652030 +:10E2400061206C6574746572002000577269747483 +:10E25000696E672045450052656164696E672045B7 +:10E26000450045452065727220636E743D00504F35 +:10E27000525400303D5A65726F2061646472003FF1 +:10E280003D43505520737461747300403D454550C3 +:10E29000524F4D207465737400423D426C696E6B41 +:10E2A000204C454400453D44756D70204545505215 +:10E2B0004F4D00463D44756D7020464C415348001B +:10E2C000483D48656C70004C3D4C69737420492F83 +:10E2D0004F20506F72747300513D51756974005234 +:10E2E0003D44756D702052414D00563D73686F7707 +:10E2F00020696E7465727275707420566563746FF0 +:10E30000727300593D506F727420626C696E6B00BD +:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046 +:10E320000CBF12E0A0E0B2E0EEE1FDEF03E00BBFB6 +:10E3300002C007900D92A030B107D9F712E0A0E01B +:10E34000B2E001C01D92AE30B107E1F70F9460F367 +:10E350000D948DFE01E20EBF0FEF0DBF11241FBE05 +:10E360000D9460F30D9400F020E030E040ED57E0B4 +:10E3700005C0FA013197F1F72F5F3F4F2817390792 +:10E38000C0F308959C01260F311DC901A0E0B0E043 +:10E390002F5F3F4FABBFFC018791882361F08093D3 +:10E3A000C6008091C00086FFFCCF8091C0008064D1 +:10E3B0008093C000EACF08958DE08093C6008091DD +:10E3C000C00086FFFCCF8091C00080648093C000B5 +:10E3D0008AE08093C6008091C00086FFFCCF8091C8 +:10E3E000C00080648093C00008950F94C2F10F9420 +:10E3F000DCF10895FC019081992359F09093C600B7 +:10E400008091C00086FFFCCF8091C0008064809323 +:10E41000C0003196992379F70895282F982F929567 +:10E420009F70892F805D8A3308F0895F8093C600D2 +:10E430008091C00086FFFCCF8091C00080648093F3 +:10E44000C000822F8F70982F905D9A3308F0995FEB +:10E450009093C6008091C00086FFFCCF8091C000E1 +:10E4600080648093C00008959C01FB01853691056E +:10E470001CF46330710594F0C90164E670E00F94F8 +:10E480002EFE605D7F4F6093C6008091C00086FFC6 +:10E49000FCCF8091C00080648093C0002B30310598 +:10E4A00014F43297B4F0C90164E670E00F942EFEC4 +:10E4B0006AE070E00F942EFE605D7F4F6093C600AF +:10E4C0008091C00086FFFCCF8091C0008064809363 +:10E4D000C000C9016AE070E00F942EFEC0968093E0 +:10E4E000C6008091C00086FFFCCF8091C000806490 +:10E4F0008093C00008951F93182F8EE692EE60E07F +:10E500000F94C2F11093C6008091C00086FFFCCF2B +:10E510008091C00080648093C0000F94DCF11F9153 +:10E5200008952F923F924F925F926F927F928F92B7 +:10E530009F92AF92BF92CF92DF92EF92FF920F9392 +:10E540001F93DF93CF93CDB7DEB762970FB6F894E2 +:10E55000DEBF0FBECDBF382E622ECA01DB015C01CB +:10E560006D01772420E2222E2E010894411C511CBB +:10E570008BC081E0A81680E0B80681E0C80680E084 +:10E58000D80628F0C601AA27BB270F940DF2BB2797 +:10E59000AD2D9C2D8B2D0F940DF28A2D0F940DF225 +:10E5A0002092C6008091C00086FFFCCF8091C00001 +:10E5B00080648093C0009DE29093C6008091C0006B +:10E5C00086FFFCCF8091C00080648093C0002092C1 +:10E5D000C6008091C00086FFFCCF8091C00080649F +:10E5E0008093C00019828601750188249924A1E0D6 +:10E5F0003A1651F03A1620F0B2E03B1661F409C029 +:10E600000BBFF701779007C0C7010F9477FE782EF4 +:10E6100002C0F7017080872D0F940DF22092C60082 +:10E620008091C00086FFFCCF8091C0008064809301 +:10E63000C000872D8052F401EF70F0708F3520F408 +:10E64000E40DF51D708204C0E40DF51D8EE280839B +:10E650000894E11CF11C011D111D0894811C911CE2 +:10E6600090E18916910409F0C2CF80E190E0A0E02A +:10E67000B0E0A80EB91ECA1EDB1E198AC2010F9493 +:10E68000FAF10F94DCF16A94662009F072CF629679 +:10E690000FB6F894DEBF0FBECDBFCF91DF911F91B3 +:10E6A0000F91FF90EF90DF90CF90BF90AF909F9031 +:10E6B0008F907F906F905F904F903F902F90089534 +:10E6C0002F923F924F925F926F927F928F929F9282 +:10E6D000AF92BF92CF92DF92EF92FF920F931F9370 +:10E6E000DF93CF93CDB7DEB7CD53D1400FB6F894BB +:10E6F000DEBF0FBECDBF01E20EBF0FEF0DBF94B75F +:10E70000F894A89514BE80916000886180936000A1 +:10E7100010926000789493FF05C0E0910002F091A0 +:10E7200001021995279A2F9A8091C00082608093E8 +:10E73000C00080E18093C40088E18093C1000000A4 +:10E74000EE24FF24870144E0A42EB12CCC24DD2448 +:10E7500024C0C5010197F1F70894E11CF11C011DCB +:10E76000111D21E2E2162EE4F20620E0020720E06D +:10E77000120718F031E0C32ED12CC801B70127ECE5 +:10E780003BE140E050E00F9441FE611571058105C9 +:10E79000910519F485B1805885B98091C00087FD35 +:10E7A00003C0C114D104A9F2A6014F5F5F4FC25E3E +:10E7B000DE4F59834883CE51D140C25EDE4F8881FF +:10E7C0009981CE51D140019711F00D9410FEC05D9A +:10E7D000DE4F19821882C053D14060E0C15DDE4F28 +:10E7E0001882CF52D14088249924C35DDE4F19820C +:10E7F0001882CD52D140C05EDE4F188219821A8233 +:10E800001B82C052D140CE5CDE4F188219821A8220 +:10E810001B82C253D140EE24FF2487010BBFF701B6 +:10E8200007911691C45CDE4F19830883CC53D14005 +:10E830000D940BFEC25EDE4F28813981CE51D1404E +:10E840002130310509F52091C600C25EDE4F1982E4 +:10E850001882CE51D14022C02F5F3F4F4F4F5F4FA4 +:10E86000213082E138078AE7480780E0580780F0C6 +:10E87000C45CDE4FE881F981CC53D140EF5FFF4F9C +:10E8800019F0EE27FF27099420E030E040E050E047 +:10E890008091C00087FFE0CF2091C600C35DDE4FAE +:10E8A00048815981CD52D1404F5F5F4FC35DDE4FEC +:10E8B00059834883CD52D140213209F063C64A3092 +:10E8C000510508F05FC60894811C911C53E0851621 +:10E8D000910409F059C600E010E018C081E280936D +:10E8E000C6008091C00086FFFCCF8091C00080648C +:10E8F0008093C0002F5F3F4F2931310579F70F9486 +:10E90000DCF10F5F1F4F0530110519F020E030E0FA +:10E91000E5CF10920A0210920B0210920C02109294 +:10E920000D02109206021092070210920802109235 +:10E930000902109202021092030210920402109235 +:10E9400005028FEE90EE60E00F94F5F180E191EE1C +:10E9500060E00F94C2F18091C00087FFFCCF9091DE +:10E96000C600903608F09F759032B8F09093C600BC +:10E970008091C00086FFFCCF8091C00080648093AE +:10E98000C000A0E2A093C6008091C00086FFFCCF2B +:10E990008091C00080648093C000983409F4D7C18E +:10E9A0009934B8F4923409F459C1933458F490333B +:10E9B00019F1903308F4E3C59F33A1F1903409F0C5 +:10E9C000DEC5BDC0953409F470C1963409F0D7C5D1 +:10E9D00098C1923509F42BC2933538F49C3409F46C +:10E9E000F5C1913509F0CBC518C2963509F445C279 +:10E9F000993509F0C4C567C483E792EE62E00F94CD +:10EA0000F5F110920602109207021092080210927D +:10EA1000090210920A0210920B0210920C0210923C +:10EA20000D0213C18FE792EE62E00F94F5F18FEEC5 +:10EA300090EE60E00F94F5F181E291EE60E00F94CA +:10EA4000C2F187EB91EE60E00F94F5F180E391EE77 +:10EA500060E00F94C2F184EE90EE60E00F94F5F167 +:10EA60008FE391EE60E00F94C2F186E090E061E008 +:10EA700070E00F9434F20F94DCF18DE591EE60E0DC +:10EA80000F94C2F189EC91EE60E00F94F5F18EE401 +:10EA900091EE60E00F94C2F183EC91EE60E00F9490 +:10EAA000F5F18CE691EE60E00F94C2F18EE10F94E7 +:10EAB0000DF288E90F940DF281E00F940DF20F949E +:10EAC000DCF18BE791EE60E00F94C2F119E0E0E039 +:10EAD000F0E010935700E4918E2F0F940DF20F94F5 +:10EAE000DCF18AE891EE60E00F94C2F1E3E0F0E03F +:10EAF00010935700E4918E2F0F940DF20F94DCF1D8 +:10EB000089E991EE60E00F94C2F1E2E0F0E0109349 +:10EB10005700E4918E2F0F940DF20F94DCF188EAE8 +:10EB200091EE60E00F94C2F1E1E0F0E01093570045 +:10EB30001491812F0F940DF20F94DCF107CF8BE825 +:10EB400092EE62E00F94F5F18BE492EE60E00F94A8 +:10EB5000F5F10F94DCF100E010E019C0C8016F2D51 +:10EB60000F947FFEFF2031F489E492EE60E00F9471 +:10EB7000C2F10BC0F092C6008091C00086FFFCCFAE +:10EB80008091C00080648093C0000F5F1F4FC80158 +:10EB900081519F41A0E0B0E0ABBFFC01F790BAE229 +:10EBA000FB1621F0E2E000301E07C1F60F94DCF105 +:10EBB0000F94DCF187E592EE60E00F94F5F10F948D +:10EBC000DCF1CC24DD2400E010E01EC0C8010F946D +:10EBD00077FEF82E882331F489E492EE60E00F94FA +:10EBE000C2F10BC08093C6008091C00086FFFCCFAD +:10EBF0008091C00080648093C000FE1419F00894D6 +:10EC0000C11CD11C0F5F1F4FC80181519F41A0E063 +:10EC1000B0E0ABBFFC01E790FAE2EF1621F022E092 +:10EC20000030120799F60F94DCF10F94DCF182E6C4 +:10EC300092EE60E00F94C2F1C60161E070E00F94C3 +:10EC400034F20F94DCF10F94DCF110920202109276 +:10EC50000302109204021092050278CE89E992EE26 +:10EC600062E00F94F5F1279A2F9A16C02F9880E052 +:10EC700090E0E0EDF7E03197F1F7019684369105E9 +:10EC8000C1F72F9A80E090E0E0EDF7E03197F1F7DF +:10EC9000019684369105C1F78091C00087FFE6CFC9 +:10ECA0008091C00087FFFCCF64C485EA92EE62E0E9 +:10ECB0000F94F5F140910202509103026091040219 +:10ECC0007091050281E020E10F9491F2809102029F +:10ECD00090910302A0910402B091050280509F4FD1 +:10ECE000AF4FBF4F8093020290930302A0930402A0 +:10ECF000B093050280509041A040B04008F426CE69 +:10ED0000A4CF83EB92EE62E00F94F5F140910602FE +:10ED100050910702609108027091090280E020E1A1 +:10ED20000F9491F28091060290910702A09108023F +:10ED3000B091090280509F4FAF4FBF4F80930602A2 +:10ED400090930702A0930802B0930902FFCD80ECD4 +:10ED500092EE62E00F94F5F183E792EE60E00F949B +:10ED6000F5F18FE792EE60E00F94F5F18BE892EE0B +:10ED700060E00F94F5F189E992EE60E00F94F5F10F +:10ED800085EA92EE60E00F94F5F183EB92EE60E09D +:10ED90000F94F5F180EC92EE60E00F94F5F187ECC2 +:10EDA00092EE60E00F94F5F188ED92EE60E00F9442 +:10EDB000F5F18FED92EE60E00F94F5F18AEE92EEB0 +:10EDC00060E00F94F5F183E093EEBDCD87EC92EE19 +:10EDD00062E00F94F5F181E40F947BF282E40F94EA +:10EDE0007BF283E40F947BF284E40F947BF285E45E +:10EDF0000F947BF286E40F947BF287E40F947BF20E +:10EE000088E40F947BF28AE40F947BF28BE40F94F6 +:10EE10007BF28CE40F947BF299CD88ED92EE62E068 +:10EE20000F94F5F1772473948824992409C48FED05 +:10EE300092EE62E00F94F5F140910A0250910B02BC +:10EE400060910C0270910D0282E020E10F9491F22A +:10EE500080910A0290910B02A0910C02B0910D02D8 +:10EE600080509F4FAF4FBF4F80930A0290930B0289 +:10EE7000A0930C02B0930D0269CD8AEE92EE62E08F +:10EE80000F94F5F184EE90EE60E00F94F5F18FECC5 +:10EE900091EE60E00F94F5F1662477244301CC5D98 +:10EEA000DE4F19821882C452D140D401C301B695F5 +:10EEB000A79597958795CA5DDE4F88839983AA8326 +:10EEC000BB83C652D140CC5DDE4FA881B981C4520C +:10EED000D1401196CC5DDE4FB983A883C452D14096 +:10EEE000CD0162E070E00F9434F2B0E2B093C6005E +:10EEF0008091C00086FFFCCF8091C0008064809329 +:10EF0000C000EDE2E093C6008091C00086FFFCCF18 +:10EF10008091C00080648093C000F0E2F093C6004E +:10EF20008091C00086FFFCCF8091C00080648093F8 +:10EF3000C000CA5DDE4FE880F9800A811B81C6529D +:10EF4000D140BB27A12F902F8F2D0F940DF2CA5DBA +:10EF5000DE4F8881C652D1400F940DF2B0E2FB2EF5 +:10EF6000F092C6008091C00086FFFCCF8091C00067 +:10EF700080648093C0000DE30093C6008091C000C0 +:10EF800086FFFCCF8091C00080648093C00010E2B7 +:10EF90001093C6008091C00086FFFCCF8091C00016 +:10EFA00080648093C0008BBEF3012791C65DDE4F65 +:10EFB0002883CA52D140A22EBB24CC24DD2408943D +:10EFC000611C711C811C911C8BBEF3018791282E42 +:10EFD0003324442455240894611C711C811C911C09 +:10EFE0008BBEF3013791C55DDE4F3883CB52D140E4 +:10EFF0000894611C711C811C911C8BBEF30147910C +:10F00000C45DDE4F4883CC52D140ADEFEA2EAFEF66 +:10F01000FA2EAFEF0A2FAFEF1A2F6E0C7F1C801E57 +:10F02000911E142D032DF22CEE24EA0CFB1C0C1D5A +:10F030001D1D0F940DF220E22093C6008091C000A8 +:10F0400086FFFCCF8091C00080648093C000C65DC5 +:10F05000DE4F8881CA52D1400F940DF230E23093D6 +:10F06000C6008091C00086FFFCCF8091C000806404 +:10F070008093C000C45DDE4F8881CC52D1400F9494 +:10F080000DF240E24093C6008091C00086FFFCCFA5 +:10F090008091C00080648093C000C55DDE4F888190 +:10F0A000CB52D1400F940DF250E25093C6008091A4 +:10F0B000C00086FFFCCF8091C00080648093C000B8 +:10F0C0008FEFE8168FEFF80680E0080780E018075A +:10F0D00031F484E092EE60E00F94C2F1DFC0D80119 +:10F0E000C7018070907CA070B0708050904CA040A0 +:10F0F000B040D1F52FEF3FE340E050E0E222F322B1 +:10F1000004231523CA5DDE4FA880B980CA80DB8046 +:10F11000C652D140AE0CBF1CC01ED11EAA0CBB1CD7 +:10F12000CC1CDD1C8EE092EE60E00F94C2F1BB2798 +:10F13000A12F902F8F2D0F940DF28E2D0F940DF285 +:10F1400030E23093C6008091C00086FFFCCF8091F2 +:10F15000C00080648093C0004EE34093C60080915D +:10F16000C00086FFFCCF87C08EE09EEFA0E0B0E03D +:10F17000E822F9220A231B239CE0E91694E9F90608 +:10F1800090E0090790E0190709F088C0C45DDE4FE0 +:10F19000A881CC52D140EA2EFF2400E010E0102FCD +:10F1A0000F2DFE2CEE24C55DDE4FB881CB52D14031 +:10F1B000EB0EF11C011D111DD601C501817090706F +:10F1C000A070B070DC0199278827E80EF91E0A1F8D +:10F1D0001B1F20EF30E040E050E0A222B322C42207 +:10F1E000D52241E1AA0CBB1CCC1CDD1C4A95D1F7F1 +:10F1F000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0BE +:10F20000282239224A225B2235E1220C331C441C7D +:10F21000551C3A95D1F7E20CF31C041D151D57013E +:10F220006801AA0CBB1CCC1CDD1C85E192EE60E0E1 +:10F230000F94C2F1C801AA27BB270F940DF2BB2778 +:10F24000A12F902F8F2D0F940DF28E2D0F940DF274 +:10F2500090E29093C6008091C00086FFFCCF809121 +:10F26000C00080648093C000AEE3A093C60080918C +:10F27000C00086FFFCCF8091C00080648093C000F6 +:10F28000C601AA27BB270F940DF2BB27AD2D9C2DDD +:10F290008B2D0F940DF28A2D0F940DF20F94DCF14B +:10F2A000CC5DDE4FE881F981C452D140F99709F471 +:10F2B0004DCBF4E0EF2EF12C012D112D6E0C7F1CA7 +:10F2C000801E911EF2CD83E093EE62E00F94F5F183 +:10F2D0008AE192EE60E00F94C2F18091C00087FF56 +:10F2E000FCCF1091C6001F751093C6008091C0001E +:10F2F00086FFFCCF8091C00080648093C0000F9493 +:10F30000DCF1812F81548A3108F036C1163409F4BA +:10F3100095C0173490F4133409F44EC0143430F40B +:10F320001134F1F0123409F01DC130C0143409F465 +:10F3300059C0153409F016C16BC01A3409F4C4C0A1 +:10F340001B3438F4173409F48FC0183409F00AC19B +:10F35000A1C01B3409F4D2C01C3409F003C1E8C0B9 +:10F360008FEF81B90DC082B1809582B980E090E0C5 +:10F37000E0EDF7E03197F1F70196883C9105C1F790 +:10F380008091C00087FFEFCF12B8EFC08FEF84B934 +:10F390000DC085B1809585B980E090E0E0EDF7E0A3 +:10F3A0003197F1F70196883C9105C1F78091C00033 +:10F3B00087FFEFCF15B8D9C08FEF87B90DC088B1DF +:10F3C000809588B980E090E0E0EDF7E03197F1F7C3 +:10F3D0000196883C9105C1F78091C00087FFEFCF6F +:10F3E00018B8C3C08FEF8AB90DC08BB180958BB9A7 +:10F3F00080E090E0E0EDF7E03197F1F70196883C8E +:10F400009105C1F78091C00087FFEFCF1BB8ADC059 +:10F410008FEF8DB90DC08EB180958EB980E090E0F0 +:10F42000E0EDF7E03197F1F70196883C9105C1F7DF +:10F430008091C00087FFEFCF1EB897C08FEF80BBD1 +:10F440000DC081B3809581BB80E090E0E0EDF7E0F6 +:10F450003197F1F70196883C9105C1F78091C00082 +:10F4600087FFEFCF11BA81C08FEF83BB0DC084B38C +:10F47000809584BB80E090E0E0EDF7E03197F1F714 +:10F480000196883C9105C1F78091C00087FFEFCFBE +:10F4900014BA6BC08FEF809301010FC080910201FD +:10F4A00080958093020180E090E0E0EDF7E03197F5 +:10F4B000F1F70196883C9105C1F78091C00087FF64 +:10F4C000EDCF1092020151C08FEF809304010FC065 +:10F4D0008091050180958093050180E090E0E0ED4A +:10F4E000F7E03197F1F70196883C9105C1F78091DB +:10F4F000C00087FFEDCF1092050137C08FEF8093DA +:10F5000007010FC08091080180958093080180E079 +:10F5100090E0E0EDF7E03197F1F70196883C910536 +:10F52000C1F78091C00087FFEDCF109208011DC088 +:10F530008FEF80930A010FC080910B01809580931B +:10F540000B0180E090E0E0EDF7E03197F1F70196F4 +:10F55000883C9105C1F78091C00087FFEDCF1092E4 +:10F560000B0103C085E292EEEEC98091C00087FFD7 +:10F57000FCCF8091C600EAC988E392EEE4C98CE131 +:10F5800091EEE1C988249924933011F1943028F444 +:10F59000913089F09230B8F408C0953061F195301F +:10F5A000F0F0963009F048C043C02B3109F042C951 +:10F5B00091E06BE13FC96227C15DDE4F2883CF52E6 +:10F5C000D14092E037C9B22FA0E0622793E032C960 +:10F5D000822F90E0A82BB92B622794E02BC92E3004 +:10F5E00009F039C3622795E0C05DDE4F19821882A9 +:10F5F000C053D1401FC9E1E0F0E0EC0FFD1FC05D3A +:10F60000DE4F08811981C053D140E00FF11F2083E4 +:10F610000F5F1F4FC05DDE4F19830883C053D14079 +:10F6200062270A171B0709F005C9D80196E002C92D +:10F63000261709F010C303C0973009F0FBC87724E0 +:10F640009981933109F412C19431C8F4963009F4C8 +:10F65000D8C0973050F4923009F406C1933009F4C1 +:10F660006DC0913009F059C253C0913109F477C08F +:10F67000923108F0BBC0903109F04FC2F5C098310B +:10F6800009F487C0993150F4953109F4EFC09531F0 +:10F6900008F4C6C1963109F040C2C2C19A3109F4DA +:10F6A0006CC09A3108F491C09B3109F45BC09D3164 +:10F6B00009F033C29D81903359F48F81882311F46E +:10F6C0009EE11CC0813011F091E018C098E916C08D +:10F6D000892F807591F0903539F4E0E0F0E089E011 +:10F6E0008093570094910AC0983539F4E3E0F0E034 +:10F6F00089E080935700949101C090E01A821B82A8 +:10F700008D818C831D829E831F8227E030E009C299 +:10F710001A8288E08B8381E48C8386E58D8382E581 +:10F720008E8389E48F8383E5888780E589878FE5E9 +:10F730008A8782E38B872BE030E0F3C18A818139AD +:10F7400041F0823941F0803911F48FE005C080E04A +:10F7500003C082E001C08AE01A828B8344C0772410 +:10F76000739482C08D81882311F48EE12CC0813086 +:10F7700011F081E028C088E926C01A82E1E0F0E0BB +:10F7800089E08093570084918B831C8224E030E0D1 +:10F79000C8C18B81803589F48C81883039F4E2E0EE +:10F7A000F0E089E08093570084910DC0E0E0F0E044 +:10F7B00089E080935700849106C0E3E0F0E089E09F +:10F7C0008093570084911A82DFCF8D81836C99E0FA +:10F7D000E1E0F0E0082E90935700E89507B600FCB2 +:10F7E000FDCF1A821B8223E030E09BC180EC8A832C +:10F7F000CE5CDE4F188219821A821B82C253D1401E +:10F800008EC18A8190E0A0E0B0E0582F44273327D2 +:10F8100022278B8190E0A0E0B0E0DC0199278827C7 +:10F82000282B392B4A2B5B2B8D8190E0A0E0B0E098 +:10F83000282B392B4A2B5B2B8C8190E0A0E0B0E089 +:10F84000BA2FA92F982F8827282B392B4A2B5B2BCF +:10F85000220F331F441F551FC05EDE4F288339839C +:10F860004A835B83C052D1401A8259C13A81C95C34 +:10F87000DE4F3883C753D140CA5CDE4F1882C6536F +:10F88000D1408B81C82EDD24CA5CDE4F488159816E +:10F89000C653D140C42AD52A933109F082C0CE5C28 +:10F8A000DE4F88819981AA81BB81C253D1408050AB +:10F8B000904CA340B04030F583E0CE5CDE4FE88052 +:10F8C000F9800A811B81C253D140F70100935B008C +:10F8D00080935700E89507B600FCFDCFCE5CDE4F65 +:10F8E000088119812A813B81C253D14000501F4FAA +:10F8F0002F4F3F4FCE5CDE4F088319832A833B8313 +:10F90000C253D140C05EDE4F488159816A817B81FC +:10F91000C052D140DE011B9631E08C9111962C91A2 +:10F9200011971296C75CDE4F2883C953D140C85C3B +:10F93000DE4F1882C853D14090E0C85CDE4FE881AA +:10F94000F981C853D1408E2B9F2B0C01FA01609393 +:10F950005B0030935700E89511244E5F5F4F6F4F67 +:10F960007F4F0EEFE02E0FEFF02ECE0CDF1CC114F8 +:10F97000D10499F685E0C05EDE4F088119812A81A5 +:10F980003B81C052D140F80120935B008093570027 +:10F99000E89507B600FCFDCF81E180935700E8951C +:10F9A00035C0C05EDE4F88819981AA81BB81C0527B +:10F9B000D140B695A795979587957C018601ABE0D8 +:10F9C000AA2EB12CAC0EBD1E0BC0D5016D915D01F0 +:10F9D000C7010F947FFE0894E11CF11C01501040F8 +:10F9E0000115110591F7A60160E070E0440F551F65 +:10F9F000661F771FC05EDE4FE880F9800A811B8199 +:10FA0000C052D1404E0D5F1D601F711F1A82C05E33 +:10FA1000DE4F488359836A837B83C052D1407FC0C5 +:10FA2000FA80C55CDE4FF882CB53D140C65CDE4F16 +:10FA30001882CA53D1408B81C82EDD24C65CDE4FAC +:10FA400008811981CA53D140C02AD12A1A828981DA +:10FA5000BE016D5F7F4F843121F59601C05EDE4FA0 +:10FA6000E880F9800A811B81C052D1400BBFF701A9 +:10FA700087919691DB018C9311969C936E5F7F4FDB +:10FA8000D801C7010296A11DB11DC05EDE4F88835B +:10FA90009983AA83BB83C052D14022503040F1F6F3 +:10FAA00036C0C05EDE4F288139814A815B81C052F9 +:10FAB000D1400894C108D108760100E010E0089414 +:10FAC000C11CD11C0894E11CF11C011D111DE20E8A +:10FAD000F31E041F151F21BDBB27A52F942F832FB5 +:10FAE00082BD2F5F3F4F4F4F5F4FF89A80B5DB01CC +:10FAF0008D93BD012E153F054007510761F7C05E8C +:10FB0000DE4F288339834A835B83C052D1409601FC +:10FB10002D5F3F4FFB01108204C080EC8A8322E0FE +:10FB200030E08BE18093C6008091C00086FFFCCF5F +:10FB30008091C00080648093C000C15DDE4FF88179 +:10FB4000CF52D140F093C6008091C00086FFFCCF19 +:10FB50008091C00080648093C000432F3093C60022 +:10FB60008091C00086FFFCCF8091C00080648093AC +:10FB7000C000922F2093C6008091C00086FFFCCF6A +:10FB80008091C00080648093C0008EE08093C600A6 +:10FB90008091C00086FFFCCF8091C000806480937C +:10FBA000C00065E1C15DDE4FE880CF52D1406E25D7 +:10FBB00069276427FE01319610C090819093C6009A +:10FBC0008091C00086FFFCCF31968091C000806498 +:10FBD0008093C0006927215030402115310569F715 +:10FBE0006093C6008091C00086FFFCCF8091C0006A +:10FBF00080648093C00085B1805885B9772081F4F6 +:10FC0000C15DDE4F0881CF52D1400F5FC15DDE4F35 +:10FC10000883CF52D14090E0A0E0B0E00D941AF4F8 +:10FC200027982F9880E090E020ED37E0F901319798 +:10FC3000F1F7019684369105C9F700008091C00064 +:10FC40008D7F8093C00081E180935700E895EE2777 +:10FC5000FF270994FFCF90E00D941AF497FB092E2B +:10FC600007260AD077FD04D02ED006D000201AF443 +:10FC7000709561957F4F0895F6F7909581959F4F08 +:10FC80000895A1E21A2EAA1BBB1BFD010DC0AA1FDD +:10FC9000BB1FEE1FFF1FA217B307E407F50720F0F5 +:10FCA000A21BB30BE40BF50B661F771F881F991F70 +:10FCB0001A9469F760957095809590959B01AC01B9 +:10FCC000BD01CF010895AA1BBB1B51E107C0AA1FAC +:10FCD000BB1FA617B70710F0A61BB70B881F991FED +:10FCE0005A95A9F780959095BC01CD010895F99991 +:10FCF000FECF92BD81BDF89A992780B50895262F31 +:10FD0000F999FECF1FBA92BD81BD20BD0FB6F89400 +:0EFD1000FA9AF99A0FBE01960895F894FFCF63 +:040000033000E000E9 +:00000001FF diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/btn_leds_handle.h b/mc_labs/mc_lab_02/mc_lab2_esp/btn_leds_handle.h new file mode 100644 index 0000000..4e93ddd --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/btn_leds_handle.h @@ -0,0 +1,84 @@ +#ifndef BTN_LEDS_HANDLE_H +#define BTN_LEDS_HANDLE_H + +#include +// Set to true to define Relay as Normally Open (NO) +#define LED_MODE 1 + +// Assign GPIO to the relay +const int ledPin = D4; // Replace with the desired GPIO pin +const int btnPin = D5; // Replace with the desired GPIO pin + +bool btnChangedFlag; +bool btnPressed; +bool btnReleased; + +bool serialInFlag = false; + +IRAM_ATTR void btnIsrHigh() +{ + btnChangedFlag = true; + btnPressed = true; +} + +IRAM_ATTR void btnIsrLow() +{ + btnChangedFlag = true; + btnReleased = true; +} + +void btnInit() +{ + // todo: make two functions for: leds and button + pinMode(btnPin, INPUT_PULLUP); + attachInterrupt(digitalPinToInterrupt(btnPin), btnIsrHigh, RISING); + attachInterrupt(digitalPinToInterrupt(btnPin), btnIsrLow, FALLING); + btnChangedFlag = false; + btnPressed = false; + btnReleased = false; +} + +void ledsInit() +{ + pinMode(ledPin, OUTPUT); +#if (LED_MODE == 1) + digitalWrite(ledPin, HIGH); +#else + digitalWrite(ledPin, LOW); +#endif +} + +void btnLedsHandle() +{ + if (btnChangedFlag) + { + if (btnPressed) + { + digitalWrite(ledGPIO, LOW); + if (!serialInFlag) + { + Serial.write(0xB0); + }else{ + serialInFlag = false; + } + + btnPressed = false; + } + if (btnReleased) + { + digitalWrite(ledGPIO, HIGH); + if (!serialInFlag) + { + Serial.write(0xB1); + }else + { + serialInFlag = false; + } + + btnReleased = false; + } + btnChangedFlag = false; + } +} + +#endif //* BTN_LEDS_HANDLE_H \ No newline at end of file diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/mc_lab2_esp.ino b/mc_labs/mc_lab_02/mc_lab2_esp/mc_lab2_esp.ino new file mode 100644 index 0000000..773ba5c --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/mc_lab2_esp.ino @@ -0,0 +1,40 @@ + +#include +#include + +#include "btn_handle.h" +#include "wifi_config.h" + +#define SERIAL_SPD 115200 + + +void setup() +{ + // initialize UART0 + Serial.begin(SERIAL_SPD); + + ledsInit(); + btnInit(); + initWiFi(); + +} + +void loop() +{ + while (Serial.available()) + { + uint8_t inByte = Serial.read(); + if (inByte == 0xB0) //176 + { + btnChangedFlag = true; + btnPressed = true; + serialInFlag = true; + } + else + { + //could be other command or junk data + } + } + + btnLedsHandle(); +} diff --git a/mc_labs/mc_lab_02/mc_lab2_esp/wifi_config.h b/mc_labs/mc_lab_02/mc_lab2_esp/wifi_config.h new file mode 100644 index 0000000..cc401bd --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab2_esp/wifi_config.h @@ -0,0 +1,124 @@ +#ifndef WIFI_CONFIG_H +#define WIFI_CONFIG_H + +// Import required libraries +#include +#include "ESP8266WiFi.h" +#include "ESPAsyncWebServer.h" +#include "btn_handle.h" + +#define ESP_WIFI_MODE 2 //WIFI_STA // WIFI_AP //WIFI_AP_STA +#define WIFI_PORT 80 + +// Replace with your network credentials +const char* ssid = "WEMOS_ESP8266"; +const char* password = "PASSWORD"; + +const char index_html[] PROGMEM = R"rawliteral( + + + + + + +

ESP Pushbutton Web Server

+ + + + +)rawliteral"; + + +void notFound(AsyncWebServerRequest *request) { + request->send(404, "text/plain", "Not found"); +} + +// Create AsyncWebServer object on port 80 +AsyncWebServer server(WIFI_PORT); + +void initWiFi() +{ + +#if(ESP_WIFI_MODE == 1) + WiFi.mode(WIFI_STA); + // Connect to Wi-Fi network with SSID and password + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.println("Connecting to WiFi.."); + } + Serial.println(); + Serial.print("ESP IP Address: http://"); + Serial.println(WiFi.localIP()); + + Serial.print("RRSI: "); + Serial.println(WiFi.RSSI()); +#else// (ESP_WIFI_MODE == WIFI_AP) + WiFi.mode(WIFI_AP); + Serial.println("Setting AP (Access Point)…"); + // Remove the password parameter, if you want the AP (Access Point) to be open + //WiFi.softAP(ssid, password); + WiFi.softAP(ssid, NULL); + + IPAddress IP = WiFi.softAPIP(); + Serial.print("AP IP address: "); + Serial.println(IP); +#endif + + // Send web page to client + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ + request->send_P(200, "text/html", index_html); + }); + + // Receive an HTTP GET request + server.on("/on", HTTP_GET, [] (AsyncWebServerRequest *request) { + btnChangedFlag = true; + btnPressed = true; + request->send(200, "text/plain", "ok"); + }); + + // Receive an HTTP GET request + server.on("/off", HTTP_GET, [] (AsyncWebServerRequest *request) { + btnChangedFlag = true; + btnReleased = true; + request->send(200, "text/plain", "ok"); + }); + + server.onNotFound(notFound); + server.begin(); +} + +#endif //* WIFI_CONFIG_H \ No newline at end of file diff --git a/mc_labs/mc_lab_02/mc_lab_02.ino b/mc_labs/mc_lab_02/mc_lab_02.ino new file mode 100644 index 0000000..8289c10 --- /dev/null +++ b/mc_labs/mc_lab_02/mc_lab_02.ino @@ -0,0 +1,124 @@ +#include + +const int ledPin = 13; // the number of the LED pin +const int buttonPin = 22; // the number of the button pin + +// initialize the library by associating any needed LCD interface pin +// with the arduino pin number it is connected to +const int rs = 5, rw = 6, en = 7, d4 = 8, d5 = 9, d6 = 10, d7 = 11; +LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7); +33 +unsigned char pwmOCR_A = 0; +unsigned char pwmOCR_B = 0; +bool isCommand = true; +unsigned char command; +bool isFanAStarted = false; +bool isFanBStarted = false; + +void setup() { + // initialize UART0 + Serial.begin(9600); + // initialize digital pin LED_BUILTIN as an output. + pinMode(ledPin, OUTPUT); + digitalWrite(ledPin, LOW); + // initialize button pin + pinMode(buttonPin, INPUT_PULLUP); + + //LCD 16x2 + // set up the LCD's number of columns and rows: + lcd.begin(16, 2); + lcd.print("Start Client"); + + //Timer0 -- fast PWM + TCCR0A = (1 << WGM01) | (1 << WGM00) | (1 << COM0A1) | (1 << COM0B1) ; +// TCCR0B = (0 << CS02) | (1 << CS01) | (1 << CS00); // prescaler= + TCCR0B = (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler= + OCR0A = 0; + OCR0B = 0; + + //OC_Pins + DDRB |= 1 << 7; + DDRG |= 1 << 5; +} + +void loop() { + // read from port 0: + if (Serial.available()) { + int inByte = Serial.read(); + if (isCommand) { + //Start FAN_A + if (inByte == 0xA1) { + OCR0A = pwmOCR_A; + isFanAStarted = true; + lcd.setCursor(0, 0); + lcd.print("StartA OCRA="); + lcd.print(OCR0A); + lcd.print(" "); + } + //Stop FAN_A + else if (inByte == 0xA2) { + OCR0A = 0; + isFanAStarted = false; + lcd.setCursor(0, 0); + lcd.print("StopA OCRA="); + lcd.print(OCR0A); + lcd.print(" "); + } + //OCR_A command + else if (inByte == 0xA3) { + isCommand = false; + command = inByte; + } + //------------------------------- + //Start FAN_B + if (inByte == 0xB1) { + OCR0B = pwmOCR_B; + isFanBStarted = true; + lcd.setCursor(0, 1); + lcd.print("StartB OCRB="); + lcd.print(OCR0B); + lcd.print(" "); + } + //Stop FAN_B + else if (inByte == 0xB2) { + OCR0B = 0; + isFanBStarted = false; + lcd.setCursor(0, 1); + lcd.print("StopB OCRB="); + lcd.print(OCR0B); + lcd.print(" "); + } + //OCR_B command + else if (inByte == 0xB3) { + isCommand = false; + command = inByte; + } + } + else { + if (command == 0xA3) { + isCommand = true; + pwmOCR_A = inByte; + if (isFanAStarted) { + OCR0A = pwmOCR_A; + lcd.setCursor(7, 0); + lcd.print("OCRA="); + lcd.print(OCR0A); + lcd.print(" "); + } + } + //--------------------------- + if (command == 0xB3) { + isCommand = true; + pwmOCR_B = inByte; + if (isFanBStarted) { + OCR0B = pwmOCR_B; + lcd.setCursor(7, 1); + lcd.print("OCRB="); + lcd.print(OCR0B); + lcd.print(" "); + } + } + + } + } +} diff --git a/mc_labs/mc_lab_02/wokwi.toml b/mc_labs/mc_lab_02/wokwi.toml new file mode 100644 index 0000000..ac3e71a --- /dev/null +++ b/mc_labs/mc_lab_02/wokwi.toml @@ -0,0 +1,10 @@ +[wokwi] +version = 1 +firmware = +elf = + + +# Forward http://localhost:8180 to port 80 on the simulated ESP32: +[[net.forward]] +from = "localhost:8180" +to = "target:80" \ No newline at end of file diff --git a/mc_labs/mc_lab_04/lab_04_segments.pdf "b/mc_labs/mc_lab_04/\320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2264 (\320\234\320\232).pdf" similarity index 100% rename from mc_labs/mc_lab_04/lab_04_segments.pdf rename to "mc_labs/mc_lab_04/\320\227\320\260\320\262\320\264\320\260\320\275\320\275\321\217 \342\204\2264 (\320\234\320\232).pdf"