Contr1 ControllerSetting1 ESP8266WifiSettingsRoot1 Tags1 Inputs1 Outputs1 Variables1 0@0 LibraryRoot LibraryGroup-Базовые элементы LibraryGroup-Переключатель 0@0 409 0@-1482 145 261 0@-105 Groupinput GroupglobalVariable 1 UserBlockLibraryRootNode 0@0 0 7 3 Определение параметров и првязка к ним клемм 50@0 70@0 corner: 105.0d@20 50@0 corner: 125.0d@20 74@13.5d 50@10 70@10 44.0d@13.5d 50@0 corner: 70@20 0.0d 105.0d@10 125.0d@10 105.0d@0 corner: 125.0d@20 7.0d 27.0d vINIT 6 66b679ea-94a9-44b2-a7f0-dcef76ba1296 2 10@40 30@40 corner: 149.0d@60 10@40 corner: 169.0d@60 34@54.5d 10@50 30@50 10@40 corner: 30@60 180@40 200@40 corner: 331.0d@60 180@40 corner: 351.0d@60 210@54.5d 180@50 9.0d 111.0d Импульс_Key_Зуммер 8 480@510 500@510 corner: 540@570 480@510 corner: 560@570 511.5d@523.5d 480@530 corner: 500@550 480@560 500@560 480@550 corner: 500@570 660@330 680@330 corner: 736.31579005487d@510 660@330 corner: 756.31579005487d@510 682.65789502744d@344.5d B0 660@360 680@360 BitReg_8 d82c0e23-4b12-4a98-9277-5b647de200c2 c72fed24-afd8-48b6-ad12-ad40066aa01e B1 72cd34c9-b2ac-4799-9a82-08a70d91c5c5 3cd45614-1d75-42cf-b33e-4580ad785088 B2 54f93ea9-a146-4ef5-8481-7c3cc6c3539d 529d99a6-b333-46f8-bddf-0fb6bfaec3a7 B3 f8c5c3a2-d45b-4435-92df-746dcf13f776 b1290541-8338-4e4a-b1eb-829cd6f902d9 B4 b139da50-22ad-40eb-884d-3b104b4256ac dbee93d4-1261-4ac7-bbf3-47a549a383ec B5 76d9e1ec-0883-421c-9f4a-3796db32846d 3454ef34-b3a2-4f58-ad5a-22ce5b918acd B6 272627ae-0ab7-48db-8e55-99c800151220 f979c2e9-c850-4b5f-abd5-d8bed549557a B7 664a8415-bde3-4332-8f4e-71efb7c30997 5376a12e-1f49-4ffd-a013-6c2897760c68 Reg 92bf78b7-494e-453f-b773-8070337387ec e786071b-b45b-4ccd-b091-e4dab9bd0262 58e35bc8-c491-48d3-8e18-99289f16be52 BitReg_8 register=0; bitWrite(register, 0, B0); bitWrite(register, 1, B1); bitWrite(register, 2, B3); bitWrite(register, 3, B3); bitWrite(register, 4, B4); bitWrite(register, 5, B5); bitWrite(register, 6, B6); bitWrite(register, 7, B7); Reg = register ; 246 register ; byte 660@350 corner: 680@370 660@380 680@380 660@370 corner: 680@390 660@400 680@400 660@390 corner: 680@410 660@420 680@420 660@410 corner: 680@430 260@330 280@330 corner: 320@370 260@330 corner: 340@370 292.5d@343.5d 180@310 200@310 corner: 240@370 180@310 corner: 260@370 208.5d@323.5d 5 440@610 460@610 corner: 513.0d@710 440@610 corner: 533.0d@710 465.0d@623.5d 50@0 70@0 corner: 118.0d@40 50@0 corner: 138.0d@40 77.5d@13.5d addr 39 50@30 70@30 36.0d@33.5d lcd.direct adr b4afbec1-1803-4d65-863b-50dc2f7dbbd2 3dff5b22-132f-4ba1-a411-938c3d3e0e7b cols 858693d7-0001-42d6-a565-e3ad18f9ddfb 20532aa5-a093-40db-bf6a-9247519a8c87 rows dc056cbc-a65c-42ad-9e6e-da9f3f578658 f2132599-5eaa-45ee-baa0-2c8dd66e4bf5 code d5e3dabf-0ef0-4d2f-8fbc-d9b9b9d6c1ee c4a3c368-fae1-4a00-ab32-aced3633fb6e blink500 08c79160-0239-4d2a-b7ed-0a10002ec8df 7ea771a1-d442-4c75-b7b3-285a6433d0ef da9d5f0b-d337-4fe0-a64a-dfed3d62feff 1.lcd.direct:Управление дисплеем //--Управление LCD HD44780------------------------------------------------------------ if(!z.ok.custom) {RT_HW_Lcd_hd44780.setID_i2c(z, adr , cols , rows );} //z.cmndReboot=z. RT_HW_Lcd_hd44780.direct(z); code=z.num; blink500=z.blink500; 241 #include "RT_HW_LCD_HD44780.h" z ; RT_HW_LCD_HD44780_DEVICE 50@20 corner: 70@40 118.0d@20 corner: 138.0d@40 138.0d@30 lcd.i2c lcd d8d70436-9a85-48e1-b2ea-40449a7c2edf 1.lcd.i2c:Управление через i2c КОЛ_ВО_КОЛОНОК 16 62eb48e3-675b-4121-9c08-f0a6022ddbc4 20 41472ede-68c3-40f5-9123-afe46e8ff0cc КОЛ_ВО_СТРОК 57f3c11c-0dde-4bb1-aba2-090f0a3b50d6 4 f201b6ad-83e1-4bff-9e8f-c0c9c53ee2a5 ПЕРИОД_ПЕРЕЗАГРУЗКИ_В_ТИКАХ 120 1 тик=50мс; если =0, то перезагрузка отключена; 42dce9da-48c4-40b0-ab18-f2f608d97b2e 711fa1c6-938b-4183-991b-944ce7d91eff //--Управление LCD HD44780 через i2c---------------------------------------------- if(lcd==15){lcd=RT_HW_Lcd_hd44780.setDevice(lcd,'I', addr , КОЛ_ВО_КОЛОНОК , КОЛ_ВО_СТРОК , ПЕРИОД_ПЕРЕЗАГРУЗКИ_В_ТИКАХ );} RT_HW_Lcd_hd44780.directDevice(lcd); //------------------------------------------------------------------------------------------------------ 350 lcd=15; #include "RT_HW_LCD_HD44780.h" 48.0d 15.0d 118.0d@30 200@0 220@0 corner: 271.0d@40 200@0 corner: 291.0d@40 225.0d@13.5d 200@30 lcd.blink Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); 116 #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd 0208d30e-e072-45eb-aeaf-4784163f47c3 1.lcd.blink:вывод blink НОМЕР_КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР_СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ПЕРИОД_В_ТИКАХ 10 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 СИМВОЛ_0 4e34d413-5969-474b-aeb3-d5f6c41ef6c8 e47a54f1-c7b8-480b-80ed-909f7e65626f СИМВОЛ_1 c2843ae9-5fb2-4133-8682-20ed3d8161d7 * * a1809005-fedf-4911-875e-1ec853434672 //--Мерцание в позиции ------------------------------------------------------------------------- if(!id.custom) {RT_HW_Lcd_hd44780.setIdChar(id, lcd , НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ ,'F', ПЕРИОД_В_ТИКАХ);} RT_HW_Lcd_hd44780.printIdChar(id,1,0, СИМВОЛ_0 , СИМВОЛ_1 ); 270 id.custom=0; 13 #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_CHAR_ID 51.0d 220@30 790@130 810@130 corner: 852.0d@230 790@130 corner: 872.0d@230 815.0d@143.5d 790@150 corner: 810@170 EN 790@180 810@180 lcd.Str Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd b1cef113-794d-4ef6-afab-2aa12e4faa0b 18d8b4a3-7fd7-4f0e-9b3d-8e915753351e blink ed5589ac-4359-4aec-9c3b-823b0ff7b309 d7afd5b1-9c9c-419f-801b-c93762bb6bc2 Lcd.txt num 51133d12-c35a-4d71-a3e5-e1642c411f84 79c65bd2-f870-43ec-a3d7-e748ce0728c1 7d28d418-7439-4c6f-acf4-7b1fd5a9ba34 6.Lcd.txt:Вывод текста НОМЕР КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ПЕРИОД В ТИКАХ (50мс) 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 ДЛИНА ПОЛЯ 53892936-94cf-4040-ae32-cea853797b18 8eb4eb42-ea8b-4771-bc0b-fb838e6f38b7 ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ d81326c3-dddc-4c2e-a456-f27919c10884 L C b6c0accb-58ce-496d-988d-6138ad7052bc ТЕКСТ 1 FLProg 6a9c5c00-fd4e-4745-9231-c62c50fc952e A1= c36defd9-eff0-4a78-87d7-bfb25f338e26 ТЕКСТ 2 KaScada 2188d0c0-e18b-45e0-81c3-ee4e70063a0d f64cd377-9e4a-4029-b8e0-72effe07a4af ТЕКСТ 3 EIS d6139517-53ef-4353-846f-690a9cdb19fa dc954097-5eae-417e-9bdd-5eb561f74f03 TEKCT 4 ESP32 6f446c38-0d4c-465d-b55f-0a18b9899cf3 fd2bca23-3d0b-454d-bdce-72834f82beb3 ТЕКСТ 5 STM32 f2b6f62c-4272-4196-bf77-4695fe0d048d aee4cec2-88fe-490f-b7d6-e06251cc9747 //---Вывод переменной int----------------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setID_direct(id, lcd , НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ (50мс) );} id.modeBlink=0; if(ago!=num) {ago=num; if (ago!=0) id.run; switch(ago){default :break; case 1: text= ТЕКСТ 1 ; break; case 2: text= ТЕКСТ 2 ; break; case 3: text= ТЕКСТ 3 ; break; case 4: text= ТЕКСТ 4 ; break; case 5: text= ТЕКСТ 5 ; break; } } RT_HW_Lcd_hd44780.printString(id, ago, val, ДЛИНА ПОЛЯ , ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ , '@', text ); //-------------------------------------------------------------------------------------------------- 660 #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT text ; String ago ; int8_t val e0f585d0-09e3-4e54-8769-b4cec086b812 6.lcd.Str:вывод строковой переменной НОМЕР_КОЛОНКИ НОМЕР_СТРОКИ ПЕРИОД_В_ТИКАХ ДЛИНА_ПОЛЯ ВЫРАВНИВАНИЕ C //--Вывод строковой переменной -------------------------------------------------------------------- if(!id.custom) {RT_HW_Lcd_hd44780.setIdText(id, lcd , НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ , ДЛИНА_ПОЛЯ , ПЕРИОД_В_ТИКАХ ); } if (id.dir == 1) {if(ago!=val) {ago=val; id.event.fresh = 1;}} RT_HW_Lcd_hd44780.printTextSTR(id, EN, blink, ВЫРАВНИВАНИЕ , ago); 351 id.custom=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_TEXT_ID ago ; String 790@170 corner: 810@190 630@170 650@170 corner: 710@210 630@170 corner: 730@210 666.0d@183.5d EN 630@200 650@200 730@200 asimetricMulti 1000 500 Q 710@200 730@200 corner: 730@200 790@200 810@200 790@190 corner: 810@210 440@150 460@150 corner: 520@230 440@150 corner: 540@230 474.0d@163.5d 0 440@180 460@180 440@170 corner: 460@190 880@280 900@280 corner: 983.0d@300 880@280 corner: 1003.0d@300 910@293.5d 770@220 790@220 corner: 850@300 770@220 corner: 870@300 804.0d@233.5d 0 <<***>> 770@250 790@250 733.0d@253.0d 770@240 corner: 790@260 600@140 620@140 corner: 700@300 600@140 corner: 720@300 646.0d@153.5d En 600@170 614@170 600@160 corner: 614@180 34 300@120 320@120 corner: 360@180 300@120 corner: 380@180 331.5d@133.5d 0@150 20@150 corner: 80.0d@170 0@150 corner: 100.0d@170 24@164.5d 100.0d@160 52.0d Fiz_1_Key c234f455-0053-440e-ace2-6c86d92b7475 miso 12 SPI D6 digital 86.0d@160 14 360@470 380@470 corner: 420@530 360@470 corner: 440@530 392.0d@483.5d 250@470 270@470 corner: 330@510 250@470 corner: 350@510 288.5d@483.5d EN 250@500 270@500 250@490 corner: 270@510 330@490 corner: 350@510 350@500 2500 330@500 350@500 corner: 350@500 S 360@500 380@500 360@490 corner: 380@510 360@510 corner: 374@530 15 480@450 500@450 corner: 540@490 480@450 corner: 560@490 506.5d@464.5d 480@480 18 670@480 690@480 corner: 730@520 670@480 corner: 750@520 702.5d@493.5d 670@500 corner: 690@520 23 800@440 820@440 corner: 880@520 800@440 corner: 900@520 834.0d@453.5d 800@470 820@470 776.0d@473.5d 800@460 corner: 820@480 1 800@490 820@490 780.0d@493.5d 800@480 corner: 820@500 800@500 corner: 820@520 980@430 1000@430 corner: 1048.0d@450 980@430 corner: 1068.0d@450 1010@443.5d 980@430 corner: 1000@450 980@440 28.0d Menu 1000@440 24 930@570 950@570 corner: 990@630 930@570 corner: 1010@630 958.5d@583.5d 800@530 820@530 corner: 880@610 800@530 corner: 900@610 834.0d@543.5d 17 670@530 690@530 corner: 730@570 670@530 corner: 750@570 696.5d@544.5d 480@510 500@510 corner: 540@570 480@510 corner: 560@570 508.5d@523.5d 480@540 494@540 22 360@540 380@540 corner: 420@580 360@540 corner: 440@580 386.5d@554.5d I 360@570 374@570 360@560 corner: 374@580 420@560 corner: 440@580 440@570 420@570 440@560 corner: 440@570 480@560 500@560 560@560 540@560 560@560 corner: 560@560 670@560 690@560 750@560 730@560 750@560 corner: 750@560 800@560 820@560 800@550 corner: 820@570 800@580 820@580 776.0d@583.5d 800@570 corner: 820@590 21 650@580 670@580 corner: 730@620 650@580 corner: 750@620 689.0d@593.5d 650@610 670@610 650@600 corner: 670@620 730@600 corner: 750@620 750@610 2400 730@610 750@600 corner: 750@610 S 800@600 820@600 800@590 corner: 820@610 880@590 corner: 900@610 900@600 880@600 900@600 corner: 900@600 930@600 950@600 930@590 corner: 950@610 930@610 corner: 944@630 43 990@610 1010@610 corner: 1135.0d@630 990@610 corner: 1155.0d@630 1014@624.5d 990@610 corner: 1010@630 1135.0d@620 1155.0d@620 1135.0d@610 corner: 1155.0d@630 990@620 117.0d Короткое нажатие Key1 11 8225a4d0-b96c-4daf-8cb7-623a86701a08 1010@620 990@620 corner: 990@620 990@620 1010@620 990@610 corner: 1010@630 930@620 944@620 26 100@340 120@340 corner: 160@400 100@340 corner: 180@400 128.5d@353.5d 0@180 20@180 corner: 80.0d@200 0@180 corner: 100.0d@200 24@194.5d 100.0d@190 Fiz_2_Key 848af76d-4a47-4e99-a790-9635aec14b77 sck SPI D5 86.0d@190 37 70@10 90@10 corner: 130@110 70@10 corner: 150@110 101.5d@23.5d 70@40 90@40 70@30 corner: 90@50 70@50 corner: 90@70 0@210 20@210 corner: 80.0d@230 0@210 corner: 100.0d@230 24@224.5d 100.0d@220 Fiz_3_Key 586f0771-d6f6-4ae7-b993-8e997f9783d1 rx UART RX 86.0d@220 35 210@140 230@140 corner: 270@200 210@140 corner: 290@200 241.5d@153.5d 210@160 corner: 230@180 210@190 230@190 210@180 corner: 230@200 V+ 600@230 620@230 290@190 corner: 290@230 270@190 290@190 270@180 corner: 290@200 210@170 230@170 50@510 70@510 corner: 115.0d@530 50@510 corner: 135.0d@530 80@524.5d 50@520 25.0d Key3 180@380 200@380 corner: 240@440 180@380 corner: 260@440 208.5d@393.5d 180@410 194@410 180@430 660@480 680@480 260@430 corner: 260@480 262@425.5d corner: 369.0d@434.5d 551.0d@475.5d corner: 658.0d@484.5d Поворот лотка в лево 240@430 260@430 200@430 70@520 60@80 corner: 60@520 102.0d@215.5d corner: 127.0d@224.5d 183.0d@165.5d corner: 208.0d@174.5d 43.0d@75.5d corner: 68.0d@84.5d 23.0d@515.5d corner: 48.0d@524.5d Key3 70@80 90@80 70@70 corner: 90@90 0@240 20@240 corner: 80.0d@260 0@240 corner: 100.0d@260 24@254.5d 86.0d@240 corner: 100.0d@260 100.0d@250 Fiz_4_Key c63b74bd-12b3-4cae-ac2d-2d2630877fef tx UART TX 86.0d@250 36 200@210 220@210 corner: 260@270 200@210 corner: 280@270 231.5d@223.5d 200@230 corner: 220@250 200@260 220@260 200@250 corner: 220@270 V- 600@250 620@250 280@250 corner: 280@260 260@260 280@260 260@250 corner: 280@270 200@240 220@240 50@550 70@550 corner: 116.0d@570 50@550 corner: 136.0d@570 80@564.5d 50@560 26.0d Key4 180@460 200@460 corner: 240@520 180@460 corner: 260@520 208.5d@473.5d 180@490 194@490 180@480 corner: 194@500 180@500 corner: 200@520 660@460 680@460 270@460 corner: 270@510 262@505.5d corner: 375.0d@514.5d 545.0d@455.5d corner: 658.0d@464.5d Поворот лотка в право 240@510 260@510 240@500 corner: 260@520 180@510 200@510 70@560 70@100 corner: 70@560 102.0d@245.5d corner: 128.0d@254.5d 172.0d@235.5d corner: 198.0d@244.5d 42.0d@95.5d corner: 68.0d@104.5d 22.0d@555.5d corner: 48.0d@564.5d Key4 70@100 90@100 70@90 corner: 90@110 38 170@70 190@70 corner: 230@110 170@70 corner: 250@110 196.5d@84.5d 170@90 corner: 190@110 250@90 270@90 corner: 389.0d@110 250@90 corner: 409.0d@110 274@104.5d 250@90 corner: 270@110 389.0d@100 409.0d@100 389.0d@90 corner: 409.0d@110 250@100 Импульс_Key_Зуммер f22d5753-dacd-4f21-a6ec-d86cbdf13bd5 270@100 250@100 corner: 250@100 230@100 250@100 230@90 corner: 250@110 170@100 190@100 150@100 corner: 150@100 130@100 150@100 130@90 corner: 150@110 70@60 90@60 50@470 70@470 corner: 115.0d@490 50@470 corner: 135.0d@490 80@484.5d 50@480 Key2 180@360 200@360 70@480 50@60 corner: 50@480 102.0d@185.5d corner: 127.0d@194.5d 73.0d@365.5d corner: 98.0d@374.5d 43.0d@55.5d corner: 68.0d@64.5d 23.0d@475.5d corner: 48.0d@484.5d Key2 100@370 120@370 100@360 corner: 120@380 100@380 corner: 120@400 27 200@280 220@280 corner: 260@340 200@280 corner: 280@340 231.5d@293.5d 200@310 220@310 200@300 corner: 220@320 200@320 corner: 220@340 29 280@300 300@300 corner: 340@340 280@300 corner: 360@340 306.5d@314.5d 280@330 33 360@300 380@300 corner: 440@340 360@300 corner: 460@340 399.0d@313.5d 360@330 ETM 600@270 620@270 460@270 corner: 460@330 440@330 460@330 200 380@330 360@330 corner: 360@330 340@330 360@330 300@330 280@330 corner: 280@330 260@330 280@330 260@320 corner: 280@340 200@330 220@330 30 200@360 220@360 corner: 280@400 200@360 corner: 300@400 238.5d@373.5d 200@380 corner: 220@400 31 280@360 300@360 corner: 340@420 280@360 corner: 360@420 311.5d@373.5d 280@380 corner: 300@400 280@410 300@410 280@400 corner: 300@420 32 400@380 420@380 corner: 460@420 400@380 corner: 480@420 426.5d@394.5d 400@400 corner: 420@420 ExFM 600@290 620@290 480@290 corner: 480@410 460@410 480@410 460@400 corner: 480@420 400@410 420@410 360@410 corner: 360@410 340@410 360@410 340@400 corner: 360@420 280@390 300@390 280@390 corner: 280@390 280@390 300@390 280@380 corner: 300@400 200@390 1500 220@390 180@330 corner: 180@390 160@390 180@390 160@380 corner: 180@400 100@390 120@390 42 930@470 950@470 corner: 988.0d@490 930@470 corner: 1008.0d@490 954@483.5d 930@470 corner: 950@490 988.0d@480 1008.0d@480 988.0d@470 corner: 1008.0d@490 930@480 30.0d Меню 82e67756-421c-4027-b865-0fa3a4b740cd 950@480 100@390 corner: 100@620 902@506.5d corner: 930.0d@513.5d 950.0d@436.5d corner: 978.0d@443.5d 900.0d@616.5d corner: 928.0d@623.5d 70.0d@386.5d corner: 98.0d@393.5d 900.0d@476.5d corner: 928.0d@483.5d Menu 880@510 900@510 880@500 corner: 900@520 800@510 820@510 750@510 corner: 750@510 730@510 750@510 730@500 corner: 750@520 670@510 T 690@510 570@480 corner: 570@610 562@475.5d corner: 677.0d@484.5d 553.0d@505.5d corner: 668.0d@514.5d 533.0d@605.5d corner: 648.0d@614.5d Длинное нажатие Key1 540@480 560@480 500@480 440@480 corner: 440@540 420@520 440@520 420@510 corner: 440@530 360@520 R 374@520 80@40 corner: 80@570 102.0d@155.5d corner: 126.0d@164.5d 334.0d@515.5d corner: 358.0d@524.5d 334.0d@565.5d corner: 358.0d@574.5d 274.0d@145.5d corner: 298.0d@154.5d 44.0d@35.5d corner: 68.0d@44.5d Key1 300@150 320@150 300@140 corner: 320@160 300@170 320@170 300@160 corner: 320@180 360@160 corner: 380@180 380@170 360@170 380@170 corner: 380@190 MU 600@190 620@190 600@180 corner: 620@200 MD 600@210 620@210 600@200 corner: 620@220 600@220 corner: 620@240 600@240 corner: 620@260 600@260 corner: 620@280 600@280 corner: 620@300 750@180 770@180 corner: 851.0d@200 750@180 corner: 871.0d@200 780@193.5d 750@180 corner: 770@200 750@190 61.0d Меню.Name 550@40 570@40 corner: 630@120 550@40 corner: 650@120 584.0d@53.5d 550@70 570@70 550@60 corner: 570@80 550@80 corner: 570@100 550@110 570@110 550@100 corner: 570@120 680@20 700@20 corner: 742.0d@120 680@20 corner: 762.0d@120 705.0d@33.5d 680@50 700@50 680@40 corner: 700@60 680@70 700@70 680@60 corner: 700@80 680@90 700@90 680@80 corner: 700@100 680@100 corner: 700@120 680@110 C 42.0d 700@110 650@110 corner: 650@110 630@110 650@110 630@100 corner: 650@120 550@90 570@90 770@190 40 760@120 780@120 corner: 849.0d@140 760@120 corner: 869.0d@140 784@133.5d 760@130 849.0d@130 869.0d@130 Меню.Name 53d0c192-1d70-4392-a059-f9a16db4bd07 780@130 720@130 corner: 720@250 Name 29.0d 700@250 720@250 700@240 corner: 720@260 700@260 corner: 720@280 S 770@290 784@290 720@290 corner: 720@290 AG 17.0d 700@290 720@290 700@280 corner: 720@300 720@270 Menu 223676050 Clock 25114385 Graphics.ColorValue blue r0g0b31 Save 170811777 Graphics.ColorValue black r0g0b0 customText 1.1 Save on Save off Chas 94061088 dec 1.2 Minuta 78084620 1.3 59 1 100 Pid Hot 83244604 Time 150643427 Graphics.ColorValue cyan r0g31b31 2.1 20000 Kp 182455203 Graphics.ColorValue brown r15g7b7 2.2 150 0.1 Ki 239115479 2.3 0.1 19.5 Kd 117882616 2.4 0.1 0.4 2 Service 53073332 tO Correct 110205736 3.1 -5 0.01 tW Correct 165572374 3.2 0.01 H% Correct 71010809 3.3 0.01 3 Lotki 199244162 Lotok auto 234798203 4.1 4 Set Temp 238655316 Set temp Hot W 95161091 5.1 0.1 37.5 5 DoubleAcceleration 2000 4000 250 ValStr 32.0d 700@270 720@270 corner: 720@270 1 770@270 790@270 770@260 corner: 790@280 770@280 corner: 784@300 850@280 corner: 870@300 870@290 Q 850@290 41 890@240 910@240 corner: 981.0d@260 890@240 corner: 1001.0d@260 914@253.5d 890@240 corner: 910@260 981.0d@250 1001.0d@250 981.0d@240 corner: 1001.0d@260 890@250 63.0d Меню.ValStr 9 6c5a67d1-3039-4989-9d0c-f1f36293457c 910@250 870@250 corner: 870@290 880@290 900@290 880@280 corner: 900@300 Меню.ValStr 440@200 460@200 440@190 corner: 460@210 440@220 460@220 440@210 corner: 460@230 520@210 corner: 540@230 540@220 520@220 540@220 corner: 540@220 790@220 810@220 790@210 corner: 810@230 790@160 C 810@160 260@630 280@630 corner: 330.00000050193d@710 260@630 corner: 350.00000050193d@710 284.00000025097d@643.5d 260@650 corner: 280@670 EN 260@680 274@680 lcd.Txt*1 Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd c28d4071-556d-4511-8586-5c21d5738182 111f8b53-5aeb-4ed5-a868-15b3ad6262dc blink e7061d2d-c8b7-4d3b-b474-6f8b1eeddd04 6e022e27-8738-4bf2-9309-9bea2ede1d0b 03425715-b0aa-4196-9d6a-3c42bbfc41b3 8.lcd.Txt*1:Вывод одной строки НОМЕР_КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР_СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ДЛИНА_ПОЛЯ 53892936-94cf-4040-ae32-cea853797b18 8eb4eb42-ea8b-4771-bc0b-fb838e6f38b7 ВЫРАВНИВАНИЕ d81326c3-dddc-4c2e-a456-f27919c10884 L C b6c0accb-58ce-496d-988d-6138ad7052bc TEKCT_0 ~ afc2fa4d-6c89-417c-b84c-c1f697e75510 dht: 74f7ac3c-8b5e-4a24-b0ba-90aeb5de80e4 ПЕРИОД_В_ТИКАХ 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 //----Однократный вывод текста---------------------------------------------------- if (!id.custom) {RT_HW_Lcd_hd44780.setIdText(id,lcd, НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ , ДЛИНА_ПОЛЯ , ПЕРИОД_В_ТИКАХ );} //if(id.dir==1) {id.event.fresh=1;} RT_HW_Lcd_hd44780.printTextPGM(id, EN, blink, ВЫРАВНИВАНИЕ , textN); 306 id.custom=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_TEXT_ID text0 [] PROGMEM= TEKCT_0 ; const char textN =text0; const char* ago ; uint8_t 260@670 corner: 274@690 260@700 280@700 260@690 corner: 280@710 260@660 3 строка 25@-24.473684329405d 45.0d 3@12.0d 285@605.52631567059d corner: 336.0d@625.52631567059d left C tO> 50.000000501934d 280@660 230@760 250@760 corner: 291.57894776468d@860 230@760 corner: 311.57894776469d@860 253.78947388234d@773.5d 230@780 corner: 250@800 EN 230@810 244@810 lcd.Val Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd 032db346-dd60-4a07-ba84-26700083cfae f9550fd8-aaf3-49b4-8d32-62385b02d95d blink 53a3c1bf-712b-4041-9197-c9a203a9b092 02180623-0037-45a1-a2b7-e02797bb3392 Lcd.txt num 51133d12-c35a-4d71-a3e5-e1642c411f84 79c65bd2-f870-43ec-a3d7-e748ce0728c1 7d28d418-7439-4c6f-acf4-7b1fd5a9ba34 6.Lcd.txt:Вывод текста НОМЕР КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ПЕРИОД В ТИКАХ (50мс) 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 ДЛИНА ПОЛЯ 53892936-94cf-4040-ae32-cea853797b18 8eb4eb42-ea8b-4771-bc0b-fb838e6f38b7 ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ d81326c3-dddc-4c2e-a456-f27919c10884 L C b6c0accb-58ce-496d-988d-6138ad7052bc ТЕКСТ 1 FLProg 6a9c5c00-fd4e-4745-9231-c62c50fc952e A1= c36defd9-eff0-4a78-87d7-bfb25f338e26 ТЕКСТ 2 KaScada 2188d0c0-e18b-45e0-81c3-ee4e70063a0d f64cd377-9e4a-4029-b8e0-72effe07a4af ТЕКСТ 3 EIS d6139517-53ef-4353-846f-690a9cdb19fa dc954097-5eae-417e-9bdd-5eb561f74f03 TEKCT 4 ESP32 6f446c38-0d4c-465d-b55f-0a18b9899cf3 fd2bca23-3d0b-454d-bdce-72834f82beb3 ТЕКСТ 5 STM32 f2b6f62c-4272-4196-bf77-4695fe0d048d aee4cec2-88fe-490f-b7d6-e06251cc9747 //---Вывод переменной int----------------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setID_direct(id, lcd , НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ (50мс) );} id.modeBlink=0; if(ago!=num) {ago=num; if (ago!=0) id.run; switch(ago){default :break; case 1: text= ТЕКСТ 1 ; break; case 2: text= ТЕКСТ 2 ; break; case 3: text= ТЕКСТ 3 ; break; case 4: text= ТЕКСТ 4 ; break; case 5: text= ТЕКСТ 5 ; break; } } RT_HW_Lcd_hd44780.printString(id, ago, val, ДЛИНА ПОЛЯ , ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ , '@', text ); //-------------------------------------------------------------------------------------------------- #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT text ; String ago ; int8_t val 60488ee1-b546-4138-b4b5-9747fff366fd 4.lcd.Val:Вывод переменной полный НОМЕР_КОЛОНКИ НОМЕР_СТРОКИ ДЛИНА_ПОЛЯ ЗАГОЛОВОК v= a= СУФФИКС Если '~', то суффикс не выводится 3354e4eb-00a6-46e3-a737-ca6f81a182fc ; ~ dc8a87a0-8178-4815-9fa9-e807760f2583 ВЫРАВНИВАНИЕ N,L,C,R L L ТИП_ПЕРЕМЕННОЙ D,0,1,2,3,H,h,B,b,T 630c2144-74f7-404b-bcfb-e09294102ad2 D D D,T,H,h,B,b 3c934441-495e-46d6-bbce-3817b8fe392f ПЕРИОД_В_ТИКАХ //---Вывод переменной (D,0,1,2,3,H,h,B,b,T)--------------------------------------- if (!id.custom) {RT_HW_Lcd_hd44780.setIdVal(id, lcd , НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ , ДЛИНА_ПОЛЯ , ПЕРИОД_В_ТИКАХ );} if ( id.dir == 1) {if (ago !=val) {ago = val; id.event.fresh = 1;}} RT_HW_Lcd_hd44780.printIdVal(id,EN, blink, ВЫРАВНИВАНИЕ , ТИП_ПЕРЕМЕННОЙ ,ago, СУФФИКС ,text_PGM); 372 id.custom=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_VAL_ID ago ; int16_t text_PGM [] PROGMEM = ЗАГОЛОВОК ; const char 230@800 corner: 244@820 230@830 250@830 230@820 corner: 250@840 820@70 840@70 corner: 924.0d@90 820@70 corner: 944.0d@90 850@84.0d 690@50 710@50 corner: 790@130 690@50 corner: 810@130 731.5d@63.5d 810@80 820@90 840@90 corner: 942.0d@110 820@90 corner: 962.0d@110 850@104.5d 820@100 82.0d Минута Ds18b20 440@760 460@760 corner: 501.57894776468d@860 440@760 corner: 521.57894776468d@860 463.78947388234d@773.5d 440@790 460@790 440@810 454@810 440@830 460@830 440@850 4 строка 20@-24.473684329405d 3@12.0d 460@735.52631567059d corner: 511.0d@755.52631567059d ~ L D 41.578947764685d 460@850 840@100 810@100 corner: 810@100 Min 19.0d 790@100 810@100 820@110 840@110 corner: 946.0d@130 820@110 corner: 966.0d@130 850@124.5d 820@120 Секунда Ds18b20 840@120 820@160 840@160 corner: 920@200 820@160 corner: 940@200 841.0d@174.5d 820@190 940@180 960@180 corner: 1076.0d@200 940@180 corner: 1096.0d@200 970@194.5d 940@190 Генератор секунда 960@190 940@190 corner: 940@190 Q 920@190 940@190 Value 840@190 810@120 corner: 810@190 Sec 20.0d 790@120 810@120 D D scl D1 sda D2 DS3231 H 8.0d 790@80 810@80 corner: 810@80 820@80 840@80 64.0d Час Ds18b20 230@850 250@850 230@840 corner: 250@860 230@790 3@12.0d 250@735.52631567059d corner: 301.0d@755.52631567059d ~ L D 250@790 340@760 360@760 corner: 408.94736890978d@840 340@760 corner: 428.94736890978d@840 363.47368445489d@773.5d 340@790 EN 340@810 354@810 lcd.txt 0facf1ca-da5d-4666-b8fd-4a7e2b4a1a29 650f6e20-2c47-438e-932b-e9d38a4a0779 blink eb841c97-865a-42de-a7f9-164b51bcea51 5e40c259-0826-40cf-b7ee-001251e51e5d Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd Lcd.txt num 51133d12-c35a-4d71-a3e5-e1642c411f84 79c65bd2-f870-43ec-a3d7-e748ce0728c1 7d28d418-7439-4c6f-acf4-7b1fd5a9ba34 6.Lcd.txt:Вывод текста НОМЕР КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ПЕРИОД В ТИКАХ (50мс) 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 ДЛИНА ПОЛЯ 53892936-94cf-4040-ae32-cea853797b18 8eb4eb42-ea8b-4771-bc0b-fb838e6f38b7 ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ d81326c3-dddc-4c2e-a456-f27919c10884 L C b6c0accb-58ce-496d-988d-6138ad7052bc ТЕКСТ 1 FLProg 6a9c5c00-fd4e-4745-9231-c62c50fc952e A1= c36defd9-eff0-4a78-87d7-bfb25f338e26 ТЕКСТ 2 KaScada 2188d0c0-e18b-45e0-81c3-ee4e70063a0d f64cd377-9e4a-4029-b8e0-72effe07a4af ТЕКСТ 3 EIS d6139517-53ef-4353-846f-690a9cdb19fa dc954097-5eae-417e-9bdd-5eb561f74f03 TEKCT 4 ESP32 6f446c38-0d4c-465d-b55f-0a18b9899cf3 fd2bca23-3d0b-454d-bdce-72834f82beb3 ТЕКСТ 5 STM32 f2b6f62c-4272-4196-bf77-4695fe0d048d aee4cec2-88fe-490f-b7d6-e06251cc9747 //---Вывод переменной int----------------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setID_direct(id, lcd , НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ (50мс) );} id.modeBlink=0; if(ago!=num) {ago=num; if (ago!=0) id.run; switch(ago){default :break; case 1: text= ТЕКСТ 1 ; break; case 2: text= ТЕКСТ 2 ; break; case 3: text= ТЕКСТ 3 ; break; case 4: text= ТЕКСТ 4 ; break; case 5: text= ТЕКСТ 5 ; break; } } RT_HW_Lcd_hd44780.printString(id, ago, val, ДЛИНА ПОЛЯ , ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ , '@', text ); //-------------------------------------------------------------------------------------------------- #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT text ; String ago ; int8_t 5f224125-5151-4fca-9d40-eb16f2ea8970 7.lcd.txt:Вывод текста,полный C //---Вывод переменной int----------------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setID_direct(id, lcd , НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ (50мс) );} id.EN=EN; id.modeBlink= blink; //if(!id.run) { if(ago!=num) {ago=num; if (ago!=0) id.run=true; switch(ago){default : case 1: text= String(F("ТЕКСТ 1")) ; break; case 2: text= String(F("ТЕКСТ 2")) ; break; case 3: text= String(F("ТЕКСТ 3")) ; break; case 4: text= String(F("TEKCT 4")) ; break; case 5: text= String(F("ТЕКСТ 5")) ; break; } } //} RT_HW_Lcd_hd44780.printText(id, text , ДЛИНА ПОЛЯ , ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ ); //-------------------------------------------------------------------------------------------------- 743 #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT text ; String ago ; int8_t Blink 340@830 360@830 lcd.Blink 9e8f210f-5d5a-4cb2-b7f6-85e515abb27a f94887d0-aeb9-49a2-990d-28a8797cff8b ed66f776-702c-40d6-b611-5c26b057d34b 1.lcd.Blink:вывод blink НОМЕР_КОЛОНКИ НОМЕР_СТРОКИ ПЕРИОД_В_ТИКАХ СИМВОЛ_0 4e34d413-5969-474b-aeb3-d5f6c41ef6c8 e47a54f1-c7b8-480b-80ed-909f7e65626f СИМВОЛ_1 c2843ae9-5fb2-4133-8682-20ed3d8161d7 * a1809005-fedf-4911-875e-1ec853434672 //--Мерцание в позиции ------------------------------------------------------------------------- if(!id.custom) {RT_HW_Lcd_hd44780.setIdChar(id, lcd , НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ ,'F', ПЕРИОД_В_ТИКАХ);} RT_HW_Lcd_hd44780.printIdChar(id, EN , Blink , СИМВОЛ_0 , СИМВОЛ_1 ); 279 id.dir=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT 4d1552df-0bcb-4ef7-a228-6dc6c59b6f4f : id.custom=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_CHAR_ID 48.947368909778d 360@790 440@330 460@330 corner: 513.0d@430 440@330 corner: 533.0d@430 465.0d@343.5d 440@350 corner: 460@370 EN 440@380 454@380 lcd.Float Lcd.blink code 57b8bf84-311c-4ac8-a587-cc7fdec0f275 6b1518e6-bd9e-47f3-b8f9-3be9310fb7b9 ba0bdb57-b657-44b0-82d0-b1955a0fcf0b 2.Lcd.blink if(!id.custom) {RT_HW_Lcd_hd44780.setID_direct(id, code , 1,1, 10);}; RT_HW_Lcd_hd44780.printFlicker(id, '*',' '); #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT lcd 1ce04d93-22ea-47d2-89a2-555d16f077e5 f5164d6c-d525-4577-b54f-6c91e36b313a blink d5bf41d5-b485-4808-8ec3-8c53a7a653de c331f923-1947-4758-bbc6-9b26b5fe1340 Lcd.txt num 51133d12-c35a-4d71-a3e5-e1642c411f84 79c65bd2-f870-43ec-a3d7-e748ce0728c1 7d28d418-7439-4c6f-acf4-7b1fd5a9ba34 6.Lcd.txt:Вывод текста НОМЕР КОЛОНКИ 2097887e-8128-42ff-ade0-7f38ab92793c ed92af3d-3319-4624-992b-918934ff6bc5 НОМЕР СТРОКИ 22ddc91f-b97a-4252-aefe-b6fb3f377668 3af5262b-864b-448a-8b4d-fae6ccc07f18 ПЕРИОД В ТИКАХ (50мс) 7ade0029-3ba9-46a7-933a-938809a86f79 4e10b5e8-1f74-4fad-8a15-f555b0216449 ДЛИНА ПОЛЯ 53892936-94cf-4040-ae32-cea853797b18 8eb4eb42-ea8b-4771-bc0b-fb838e6f38b7 ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ d81326c3-dddc-4c2e-a456-f27919c10884 L C b6c0accb-58ce-496d-988d-6138ad7052bc ТЕКСТ 1 FLProg 6a9c5c00-fd4e-4745-9231-c62c50fc952e A1= c36defd9-eff0-4a78-87d7-bfb25f338e26 ТЕКСТ 2 KaScada 2188d0c0-e18b-45e0-81c3-ee4e70063a0d f64cd377-9e4a-4029-b8e0-72effe07a4af ТЕКСТ 3 EIS d6139517-53ef-4353-846f-690a9cdb19fa dc954097-5eae-417e-9bdd-5eb561f74f03 TEKCT 4 ESP32 6f446c38-0d4c-465d-b55f-0a18b9899cf3 fd2bca23-3d0b-454d-bdce-72834f82beb3 ТЕКСТ 5 STM32 f2b6f62c-4272-4196-bf77-4695fe0d048d aee4cec2-88fe-490f-b7d6-e06251cc9747 //---Вывод переменной int----------------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setID_direct(id, lcd , НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ (50мс) );} id.modeBlink=0; if(ago!=num) {ago=num; if (ago!=0) id.run; switch(ago){default :break; case 1: text= ТЕКСТ 1 ; break; case 2: text= ТЕКСТ 2 ; break; case 3: text= ТЕКСТ 3 ; break; case 4: text= ТЕКСТ 4 ; break; case 5: text= ТЕКСТ 5 ; break; } } RT_HW_Lcd_hd44780.printString(id, ago, val, ДЛИНА ПОЛЯ , ФОРМАТ ВЫРАВНИВАНИЯ ПОЛЯ , '@', text ); //-------------------------------------------------------------------------------------------------- #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_DIRECT text ; String ago ; int8_t val f5a98435-2010-4d72-827a-ff98506c4301 5.lcd.Float:вывод переменной НОМЕР_КОЛОНКИ НОМЕР_СТРОКИ ДЛИНА_ПОЛЯ ЗАГОЛОВОК v= H= СУФФИКС Если '~', то суффикс не выводится 3354e4eb-00a6-46e3-a737-ca6f81a182fc % ~ dc8a87a0-8178-4815-9fa9-e807760f2583 ВЫРАВНИВАНИЕ N,L,C,R L L КОЛ_ВО_ЗНАКОВ_ПОСЛЕ_ЗАПЯТОЙ 0,1,2,3 531b0b9e-6d14-4323-afc0-df337416f517 1 2 1d8d66bd-7659-48c0-bca0-bec3305abd70 ПЕРИОД_В_ТИКАХ //--Вывод в lcd переменной float---------------------------------------------------- if(!id.custom) { RT_HW_Lcd_hd44780.setIdVal(id, lcd , НОМЕР_КОЛОНКИ , НОМЕР_СТРОКИ , ДЛИНА_ПОЛЯ , ПЕРИОД_В_ТИКАХ ); } if(id.dir==1) {RT_HW_Lcd_hd44780.device.ibuff32 =RT_HW_Lcd_hd44780.floatToInt32( val ,RT_HW_Lcd_hd44780.getPointFromChar( КОЛ_ВО_ЗНАКОВ_ПОСЛЕ_ЗАПЯТОЙ ) ); if (buff != RT_HW_Lcd_hd44780.device.ibuff32) {buff = RT_HW_Lcd_hd44780.device.ibuff32; id.event.fresh = 1;}} RT_HW_Lcd_hd44780.printIdVal(id,EN,blink, ВЫРАВНИВАНИЕ ,КОЛ_ВО_ЗНАКОВ_ПОСЛЕ_ЗАПЯТОЙ,buff, СУФФИКС ,text_PGM); 599 id.custom=0; #include "RT_HW_LCD_HD44780.h" id ; RT_HW_LCD_HD44780_PARAM_VAL_ID text_PGM [] PROGMEM = ЗАГОЛОВОК; const char buff ; int32_t point ; uint8_t 440@370 corner: 454@390 440@400 460@400 440@390 corner: 460@410 140@310 160@310 corner: 220@390 140@310 corner: 240@390 174.0d@323.5d 140@330 corner: 160@350 440@700 460@700 570@130 590@130 corner: 694.0d@150 570@130 corner: 714.0d@150 600@145.0d 460@90 480@90 corner: 540@150 460@90 corner: 560@150 494.5d@104.0d 200@70 220@70 corner: 265.0d@130 200@70 corner: 285.0d@130 225.0d@83.5d EN 200@100 214@100 ds1820_new 32bd8af4-f64d-479e-9a35-f8d9a15feaca e8462a12-4eb1-4232-a20a-658c4a65e030 pin a730f3a4-eb0c-4255-8ac1-84f4061c8526 0a64618a-9537-45fd-afa6-749141a6eff5 t c7ee3e87-5efe-474f-b3dd-e2fa7bbb858c 732232cf-57ff-426b-bfeb-7db2a6c47fbd d4c9c2ba-6e41-4b5c-9676-1665a9fc889d 5.ds1820_new if(dir==0) {ds.begin(pin); dir=1;} if(dir==1) {if ( !ds.search(addr)) {ds.reset_search(); timeStart=millis(); dir=2; } else {if (OneWire::crc8(addr, 7) != addr[7]) {timeStart=millis(); dir=2; } else {dir=3;} }} if(dir==2) {if ((millis()-timeStart)>250) dir=1;} 283 #include <OneWire.h> ds ; OneWire dir =0; uint8_t i ; byte present = 0; byte type_s ; byte data [12]; byte addr [8]; byte timeStart ; uint32_t T 7d58ae04-72de-4653-b2b6-0e71ac0abdb2 ПЕРИОД_ОПРОСА_МС Период опроса a35a1f85-a7fc-4341-a0d4-e0a17bf5ba09 4c94a1b9-9695-4c77-adfe-b8e7ef39b1ae meter(); #include "OneWire.h" --Создание объекта для ds1820 ds ; OneWire --Тип датчика - новый/старый (0/1) mode ; uint8_t --Период опроса сенсора period ; int --Номер шага step =0; uint8_t --Буфер для данных data [10]; uint8_t --Результат raw ; int16_t --Буфер timeStart ; uint32_t timeDelay ; uint32_t crc ; uint8_t cntErr ; uint8_t if(step==0) {if((int8_t)pin<0) {return;} period=ПЕРИОД_ОПРОСА_МС; if(period<1000) {period=1000;} ds.begin(pin); T=0.1; step++;} if(step==1) {if(EN) {timeStart=millis(); ds.reset(); step++; return;} } if(step==2) {ds.write(0xCC); ds.write(0x44,1); timeDelay=millis(); step++; return;} //----Запуск преобразования с учетом сенсоров с "паразитным питанием" if(step==3) {if( (millis() - timeDelay)<800) {return;}; step++;} //----Пауза для преобразования сенсором; if(step==4) {ds.reset(); step++; return;} //----Сброс шины; if(step==5) {if( ds.write(0xCC); ds.write(0xBE,mode); step++; return;} //----Запрос на чтение параметров; if(step==6) {ds.read_bytes(data, 9); crc=OneWire::crc8(data, 8); step++; return;} //---- if(step==7) {if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; T_float=NAN;} step++; return;} //----Выход, если несовпадение CRC; raw = (data[1] << 8) | data[0]; //---Вычисление измеренного значения; if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }} else {uint8_t cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms } cntErr=0; T=(float)raw / 16.0; step++;} if(step==8) {if((millis()-timeStart) <1000) {return;}; step=1;return;} 1530 void meter 200@90 corner: 214@110 200@120 220@120 187.0d@123.5d 200@110 corner: 220@130 err 14.0d 265.0d@100 285.0d@100 7c432315-3faa-49e6-ac23-cc0f1d609a77 dd414df8-bd28-4269-8f2e-5f8b7ad741d6 5d2b3c28-fcf4-4977-9ff8-b95d2ece01d4 ============Блок чтения с DS1820================================================ 1.Блок опрашивает значения температуры с сенсора ds1820. 2.Блоку не требуется указание адрес сенсора на шине - требуется только, чтобы на шине находился только один датчик. 3.Блок позволяет работать с датчиками с "паразитным" питанием - режим выбирается параметром "РЕЖИМ_ПИТАНИЯ". 4.Блок опрашивает сенсор с периодом= "ПЕРИОД ОПРОСА В МС". 5.Можно приостанавливать опрос через вход EN, при этом начатое измерение будет выполнено до конца. 6.При 5-ти кратной ошибке обмена, устанавливается флаг err, T=-0.1; 7.В отличии от стандартного блока FLProg, у которого при измерении возникает задержка >17мс, у данного блока несколько задержек разнесенных по времени -1мс,1.3мс, 4.7мс (для AV328). ------------------------------------------------------------ Блок использует только библиотеку "OneWire.h" - это немного адаптированная библиотека с именем RT_50_HW_OneWire-master_PaulStoffregen. ------------------------------------------------------------- ecoins@mail.ru 12.08.2020 1060 РЕЖИМ_ПИТАНИЯ 1834915e-98e4-4b63-93f7-d9564e5280ff d838e8e6-869d-4147-9910-425f122ec825 if(step==0) {if((int8_t)pin<0) {return;} period=ПЕРИОД_ОПРОСА_МС; if(period<1000) {period=1000;} ds.begin(pin); T=-0.1; step++;} if(step==1) {if(EN) {timeStart=millis(); ds.reset(); step++; return;} } if(step==2) {ds.write(0xCC); ds.write(0x44,1); timeDelay=millis(); step++; return;} //----Запуск преобразования с учетом сенсоров с "паразитным питанием" if(step==3) {if( (millis() - timeDelay)<800) {return;}; step++;} //----Пауза для преобразования сенсором; if(step==4) {ds.reset(); step++; return;} //----Сброс шины; if(step==5) {ds.write(0xCC); ds.write(0xBE,mode); step++; return;} //----Запрос на чтение параметров; if(step==6) {ds.read_bytes(data, 9); crc=OneWire::crc8(data, 8); step++; return;} //---- if(step==7) {if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; err=0; T=-0.1;} step++; return;} //----Выход, если несовпадение CRC; raw = (data[1] << 8) | data[0]; //---Вычисление измеренного значения; if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }} else {uint8_t cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms } cntErr=0; err=0; T=(float)raw / 16.0; step++;} if(step==8) {if((millis()-timeStart) <1000) {return;}; step=1;return;} 1536 265.0d@90 corner: 285.0d@110 265.0d@110 corner: 285.0d@130 285.0d@120 ds1820 0c067488-5cae-464e-a0a0-dd6538a33157 5.ds1820 - Один сенсор на пине ============Блок чтения с DS1820================================================ 1.Блок опрашивает значения температуры с сенсора ds1820. 2.Блоку не требуется указание адрес сенсора на шине - требуется только, чтобы на шине находился только один датчик. 3.Блок позволяет работать с датчиками с "паразитным" питанием - режим выбирается параметром "РЕЖИМ_ПИТАНИЯ" (в отладке). 4.Блок опрашивает сенсор с периодом= "ПЕРИОД ОПРОСА В МС". 5.Можно приостанавливать опрос через вход EN, при этом начатое измерение будет выполнено до конца. 6.При 5-ти кратной ошибке обмена, устанавливается флаг err, температура T=-0.1; 7.В отличии от стандартного блока FLProg, у которого при измерении возникает задержка >17мс, у данного блока несколько задержек разнесенные во времени - 1мс,1.3мс, 4.7мс (для AV328). 8.Опрос параметра занимает 5-6 программных прерываний. Рекомендуется не превышать период программных перываний 200мс. Блок использует только библиотеку "OneWire.h" - это немного адаптированная библиотека с именем RT_50_HW_OneWire-master_PaulStoffregen. ------------------------------------------------------------------------------------------------------------- Примечание: Рекомендуется подключать блок как оперативную, быструю или свободную задачу. -------------------------------------------------------------------------------------- ecoins@mail.ru 12.08.2020 1366 if(step==0) {if((int8_t)pin<0) {return;} period=ПЕРИОД_ОПРОСА_МС; if(period<1000) {period=1000;} ds.begin(pin); T=-0.1; step++;} if(step==1) {if(EN) {timeStart=millis(); ds.reset(); step++; return;} } if(step==2) {ds.write(0xCC); ds.write(0x44,1); timeDelay=millis(); step++; return;} //----Запуск преобразования с учетом сенсоров с "паразитным питанием" if(step==3) {if( (millis() - timeDelay)<800) {return;}; step++;} //----Пауза для преобразования сенсором; if(step==4) {ds.reset(); step++; return;} //----Сброс шины; if(step==5) {ds.write(0xCC); ds.write(0xBE,mode); step++; return;} //----Запрос на чтение параметров; if(step==6) {ds.read_bytes(data, 9); crc=OneWire::crc8(data, 8); step++; return;} //---- if(step==7) {if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; err=0; T=-0.1;} step++; return;} //----Выход, если несовпадение CRC; raw = (data[1] << 8) | data[0]; //---Вычисление измеренного значения; if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }} else {uint8_t cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms } cntErr=0; err=0; T=(float)raw / 16.0; step++;} if(step==8) {if((millis()-timeStart) <1000) {return;}; step=1;return;} 1537 265.0d@120 285.0d@120 corner: 285.0d@120 I1 460@120 480@120 460@110 corner: 480@130 290@140 310@140 corner: 390@180 290@140 corner: 410@180 322.0d@153.5d 410@170 Q 390@170 410@140 corner: 410@170 I2 460@140 480@140 460@130 corner: 480@150 540@130 corner: 560@150 560@140 540@140 560@140 corner: 560@140 570@140 590@140 570@130 corner: 590@150 10.0d 84.0d Ds18b20 На яйцо 1 140@360 160@360 140@350 corner: 160@370 S 140@380 160@380 140@370 corner: 160@390 400@10 420@10 corner: 486.0d@150 400@10 corner: 506.0d@150 435.5d@24.5d 0@10 20@10 corner: 100@50 0@10 corner: 120@50 32.0d@23.5d 120@40 Q 100@40 120@40 corner: 120@40 122@36.5d corner: 154.0d@43.5d 366.0d@36.5d corner: 398.0d@43.5d Period period 400@40 420@40 PID tick 5990cc8e-8421-4ca8-ac33-1851f581e1e7 тактирование блока a47c9b47-715f-4057-b87b-388a7e78d7c9 Value 9bc2da38-73a5-4afe-98d4-10ad0b9b1d6f входная величина 2375b850-78cd-48b7-8d77-0216be7faca8 Set d93c1c08-e6ab-44ed-8279-3677439f7725 уставка 09bd6579-2524-4374-900a-029628f485a3 Kp 224febce-1f7f-4909-b5b6-4f4ab3f3d129 пропорциональная составляющая 3dfe45df-64c2-4487-b52f-a492ea28b246 Ki f78172ce-e204-4e92-bd65-55e4be9806fc интегральная составляющая 4bae2e38-7f86-43ac-9960-8cd21c61f445 Kd b3035d22-af3b-490d-90ec-48f1e5c8331d дифференциальная составляющая 78867cbe-ece8-4a3f-a3fc-061d5434780b Max_int 66196775-570f-49a5-a965-fed6a88a76e0 ограничение дифференциала 659743a0-164c-4ce5-9a4d-ddb54e203936 Y_PID 75a9b898-97e9-4f5a-8052-f0f260bcd312 выходное воздействие 315b0a14-1b72-4b56-a898-bb13b93d2ae1 PWM_out e1cc7544-672c-45fd-84f0-89154f51bafc выход на нагреватель/охладитель 9d1dbee5-d698-43f1-afb0-08e30d0fa82c up_3valve 85aefe8e-df64-4ed7-93f7-6804810a54e3 открыть трехходовой кран 23873e24-4ef6-4be1-a78c-b2c83414f914 down_3valve b900024e-3e27-4497-b2af-65028162f85d закрыть трехходовой кран 62fed513-590c-46fd-919e-05e288a4d3a2 5ce9c5cf-34c0-40a7-a174-9015369d40a5 PID if (en) { } c90a9a5e-dd53-4d50-bc0a-ecca18040743 170d9374-b8c8-4bcc-833b-64a6def5b0c8 5d64dc8e-74df-4dc0-91a5-e12d3e285369 245077a1-41ce-4b7c-8426-5ef1c2f7a0c5 b20142d0-cd24-4d43-9561-86afc4497c1b b6b2d816-7866-474c-838f-07b2d29f8a03 d265e501-9ff6-47b8-bdb7-2b4ce5cf580a 2c22e18b-16fa-4557-8ff0-d4acc985dc40 630decbe-ab46-4493-86d7-419657f94f17 40477d90-212d-428c-8134-4d4158222439 43f4b82e-77e7-4473-acc1-e6bd6a7da39d 1d7afe60-9bc1-4374-8b3b-92ee03461920 период ПИД и ШИМ в милисекундах 400@30 corner: 420@50 400@50 corner: 420@70 140@220 160@220 corner: 220@300 140@220 corner: 240@300 174.0d@233.5d 0@220 20@220 corner: 100@260 0@220 corner: 120@260 32.0d@233.5d 100@240 corner: 120@260 120@250 100@250 120@250 corner: 120@250 0 140@250 160@250 140@240 corner: 160@260 140@270 160@270 140@260 corner: 160@280 140@290 160@290 140@280 corner: 160@300 220@280 corner: 240@300 240@290 Q 220@290 240@80 corner: 240@290 242@285.5d corner: 351.0d@294.5d 289.0d@75.5d corner: 398.0d@84.5d Уставка температуры 400@80 420@80 400@70 corner: 420@90 0@60 20@60 corner: 100@100 0@60 corner: 120@100 32.0d@73.5d 120@90 100@90 120@90 corner: 120@100 122@85.5d corner: 136.0d@94.5d 384.0d@95.5d corner: 398.0d@104.5d Kp 400@100 420@100 пропорциональная составляющая >= 0 400@90 corner: 420@110 0@110 20@110 corner: 100@150 0@110 corner: 120@150 32.0d@123.5d 120@140 100@140 130@120 corner: 130@140 122@136.5d corner: 133.0d@143.5d 387.0d@116.5d corner: 398.0d@123.5d Ki 400@120 420@120 интегральная составляющая >= 0 400@110 corner: 420@130 0@160 20@160 corner: 100@200 0@160 corner: 120@200 32.0d@173.5d 100@180 corner: 120@200 120@190 100@190 120@140 corner: 120@190 122@186.5d corner: 136.0d@193.5d 384.0d@136.5d corner: 398.0d@143.5d Kd 400@140 420@140 дифференциальная составляющая >= 0 400@130 corner: 420@150 ok 12.0d 486.0d@100 506.0d@100 тактирование блока (сигнал с генератора и RTrig) интегральная составляющая > 0 ограничение интегральной состовляющей в выходном сигнале Err 8ed8e0d9-beeb-409d-956d-ba5484e82bac Ошибка входных данных 97a03a86-57b0-4f2f-a5bd-5cc408d826ea выходное воздействие -100..+100 Y_PWM d99d73c2-161a-4586-b99a-cfe07688f58e выходное воздействие 0..100% f13e0cc8-6b2b-488a-b25a-4b75f63fb78b Err ab70f12b-9a0c-430b-8a4b-287ba30289cc ошибка входных данных 06be2e26-d2d5-4c32-93d2-b9646b9c9848 5e3da54a-8cc0-4965-9201-84005876fee7 if (en) { err = false; if (Kp >= 0) and (Ki > 0) and (Kd > 0) { E_pid = set - value; Pr = Kp * E_pid; Integr = Integr + ( E_pid / Ki ); Df = Kd * ( E_pid - E_pid_old ); Y_pid = Pr + Integr + Df; E_pid_old = E_pid; } else { err = true; } } 262 E_pid ; float E_pid_old ; float Pr ; float Integ ; float Df ; float 4c052d7c-5fb7-4452-9b35-a43324a13bee 78999638-89ef-4771-b088-3512cfe4636b Данный самописный PID-регулятор с успехом используется на ПЛК известного Российского производителя на промышленных объектах. Регулирует температуру и давление в трубопроводах посредством трехходовых кранов. Также управляет частотными преобразователями трехфазных двигаталей по интерфейсу 4-20мА. 295 if (tick) { Err = false; if ( (Kp >= 0) and (Ki > 0) and (Kd > 0) ) { E_pid = Set - Value; Pr = Kp * E_pid; Integ = Integ + ( E_pid / Ki ); Integ = constrain( Integ, -Max_int, Max_int ); Df = Kd * ( E_pid - E_pid_old ); Y = Pr + Integ + Df; E_pid_old = E_pid; } else { Err = true; } Y_PID = int (Y); Y_PID = constrain( Y_PID, -100, 100 ); Y_PWM = map(Y_PID, -100, 100, 0, 100); } 408 E_pid ; float E_pid_old ; float Pr ; float Integ ; float Df ; float Y ; float 14cfe269-dbc1-4860-8240-5c26ecee5721 Данный самописный PID-регулятор с успехом используется в системах на ПЛК известного Российского производителя на промышленных объектах. Регулирует температуру и давление в трубопроводах посредством трехходовых кранов. Также управляет частотными преобразователями трехфазных двигаталей по интерфейсу 4-20мА. Err = false; if (tick) { if ( (Kp >= 0) and (Ki > 0) and (Kd > 0) ) { E_pid = Set - Value; Pr = Kp * E_pid; Integ = Integ + ( E_pid / Ki ); Integ = constrain( Integ, -Max_int, Max_int ); Df = Kd * ( E_pid - E_pid_old ); Y = Pr + Integ + Df; E_pid_old = E_pid; } else { Err = true; } Y_PID = int (Y); Y_PID = constrain( Y_PID, -100, 100 ); Y_PWM = map( Y_PID, -100, 100, 0, 100 ); } 410 E_pid ; float E_pid_old ; float Pr ; float Integ ; float Df ; float Y ; float выходное воздействие -100..+100% (для трехходовых) выходное воздействие 0..100% (для нагревателя) f6dbf899-6789-429d-8934-ed6d17c6ee7e данные изменилисы f6621c7d-8855-4430-995a-f18abbcd5df8 7ed8c374-de0d-4399-9032-f4ef729ccb7a Данный самописный PID-регулятор с успехом используется в системах на ПЛК известного Российского производителя на промышленных объектах. Регулирует температуру и давление в трубопроводах посредством трехходовых кранов. Также управляет частотными преобразователями трехфазных двигаталей по интерфейсу 4-20мА. Автор: Boroda. 321 ok = false; Err = false; if (tick) { if ( (Kp >= 0) and (Ki > 0) and (Kd > 0) ) { E_pid = Set - Value; Pr = Kp * E_pid; Integ = Integ + ( E_pid / Ki ); Integ = constrain( Integ, -Max_int, Max_int ); Df = Kd * ( E_pid - E_pid_old ); Y = Pr + Integ + Df; E_pid_old = E_pid; Y_PID = int (Y); Y_PID = constrain( Y_PID, -100, 100 ); Y_PWM = map( Y_PID, -100, 100, 0, 100 ); ok = true; } else { Err = true; } } 438 данные изменились 486.0d@90 corner: 506.0d@110 PWR 486.0d@120 506.0d@120 выходная мощность 0..1000 (0..+100,0%) (для аналоговых ИМ) 486.0d@110 corner: 506.0d@130 580@90 600@90 corner: 660@170 580@90 corner: 680@170 614.0d@103.5d 580@120 600@120 556.0d@123.5d 580@110 corner: 600@130 580@130 corner: 600@150 580@160 594@160 580@150 corner: 594@170 700@150 720@150 corner: 858.0d@170 700@150 corner: 878.0d@170 730@164.5d 700@160 118.0d Выход PiD на симистор 310@80 330@80 corner: 386.31579005487d@260 310@80 corner: 406.31579005487d@260 332.65789502744d@94.5d 310@110 330@110 310@100 corner: 330@120 310@130 330@130 310@120 corner: 330@140 310@150 330@150 310@140 corner: 330@160 310@170 330@170 310@160 corner: 330@180 310@190 330@190 310@180 corner: 330@200 310@210 330@210 310@200 corner: 330@220 310@230 330@230 310@220 corner: 330@240 310@240 corner: 330@260 750@190 770@190 corner: 827.36842164703d@290 750@190 corner: 847.36842164703d@290 773.68421082351d@204.5d EN 750@220 764@220 mcp23x17 97a520da-0c56-48e9-825e-00b74b71e26b 7a910c09-c236-4efc-91cd-c4aefb7901ba mcp.AB mcp 0a323118-7b5a-4db3-8cf8-665013497fae 181acc1d-7656-420a-b869-2da0e68e3ab7 A ff014b34-8778-49a9-a30f-fe25f120d487 b6dc5752-a6cd-4bfc-b807-84bf3746f699 B 6306baef-b15a-4b05-ace0-4378fc2486d5 93e22d44-8f9c-4b36-9191-e14bfb644fed 88011128-6fd8-463f-b934-50df5cfecabc 02.mcp.AB:вывод в регистры AB ПЕРИОД ОБНОВЛЕНИЯ (в тиках 10мс) dec4f0ee-229e-4074-9fbd-a559d89a694e 22d2e9cc-510f-46cf-b790-e95eadb6ce6b e1b053f1-81dc-4779-8768-cee3b0a144e8 adr mode 46db83cd-1dd0-4a1c-ad45-0a88f22f873b 9a8dbc74-6165-408e-a028-1dba2635028d 5222d8c8-e9aa-453f-b4ad-a758082611b3 01.mcp.AB:вывод в регистры AB БЛОК ВВОДА_ВЫВОДА MCP23017. Блок содержит два 8-разрядных регистра A и B, кадый из которых может настроен на вывод или ввод. Обмен с регистрами осуществляется через шину i2c по адресу=adr или через SPI через пин cs=adr. Если adr <0, устройство не используется. Для i2c: Обычно mcp23017 выпускаются с базовым адресом 0x20 (32 десятичный). Это адрес по умолчанию установлен в библиотеке как "базовый адрес". Пространство адресов может меняться входами a0,a1,a2 mcp23017 - всего восемь адресов. Если аdr в диапазоне 0-7, то к этому значению будет прибавлено значение базового адреса. Алгоритм поиска устройства на шине i2c стандартный для библиотек ecoins. --------------------------------------------------------------------------------------------------------------------------------- Обмен с устройством осуществляется не чаще параметра ПЕРИОД ОБНОВЛЕНИЯ (в тиках 10мс). Вывод може быть постоянный или по изменению входных параметров. --------------------------------------------------------------------------------------------------------------------------------- Режимы работы устанавливаются через пользовательские параметры, из которых формируется регистр управления mode: bit0: 0/1 - подключение: i2c / SPI; bit1: 0/1 - регистр А: вход / выход; bit2: 0/1 - регистр В: вход / выход; bit3: 0/1 - тип выходов: обычный / открытый выход; bit4: 0/1 - инверсия выходов: без инверсии / с инверсией; bit5: 0/1 - режим записи выходов: всегда / по изменению входных значений; bit6: 0/1 - тип входов: без подтяжки к +Vcc / c подтяжкой к +Vcc; bit7: 0/1 - инверсия входов: без инверсии / с инверсией; ----------------------------------------------------------------------------------------------------------------------------------- ecoins@mail.ru 12.07.19; 21.07.19; 28.10.19. new 07.04.2020 1843 ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ 0/1 i2c/SPI 11b55c63-f8bf-473a-a67b-5729598bcad8 I 2ab33426-f189-430e-8a10-ed7853d2ef5a РЕЖИМ РЕГИСТРА А 0/1- вход/выход 52765991-794d-466f-bce9-44ef99bb21cb 1b9d4afe-dc36-4f17-99d6-09dc19355e3a РЕЖИМ РЕГИСТРА B 0/1- вход/выход 6d0b3850-22c7-4c3a-99b1-173308f84400 ec387e77-2b21-402a-877a-058695c65342 РЕЖИМ ВЫХОДОВ 0/1 - обычный выход/открытый выход 44a0582d-19d2-482f-91a7-e4333de6e6c4 f89da492-c39d-4ce1-8f1e-b4271ae11189 ИНВЕРСИЯ ВЫХОДОВ 0/1 - нет инверсии выходов/инверсия выходов d12537cd-5bd3-4aee-877b-0a1b85a848b6 38bf66d7-60e6-4e06-8368-17b1f34e5da7 РЕЖИМ ЗАПИСИ ВЫХОДНЫХ ЗНАЧЕНИЙ 0/1 всегда/по изменению 6c3e9ac0-f9cc-4a19-8509-bf27bebf839a e61c910d-3149-42af-b39a-5ec34e8470b8 ПОДТЯЖКА ВХОДОВ К Vcc 0/1 - нет подтяжки/подтяжка к +Vcc fbf3c7c7-c603-43db-9c01-8a72cf19d788 aa98a3f2-330b-46e6-8d35-ce72d399ae9a ИНВЕРСИЯ ВХОДОВ 0/1 -нет инверсии/инверсия входов 691bfa9a-a89b-4fb1-ae98-27280d5eb8ff 836ad0a5-ad3d-4955-98fb-eaad3681bdb0 //-----Вывод в mcp23017 if (!z.custom) {z.mode=0; bitWrite(z.mode,0, ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ ); bitWrite(z.mode,1, РЕЖИМ РЕГИСТРА А ); bitWrite(z.mode,2, РЕЖИМ РЕГИСТРА B ); bitWrite(z.mode,3, РЕЖИМ ВЫХОДОВ ); bitWrite(z.mode,4, ИНВЕРСИЯ ВЫХОДОВ ); bitWrite(z.mode,5, РЕЖИМ ЗАПИСИ ВЫХОДНЫХ ЗНАЧЕНИЙ ); bitWrite(z.mode,6, ПОДТЯЖКА ВХОДОВ К Vcc ); bitWrite(z.mode,7, ИНВЕРСИЯ ВХОДОВ ); RT_HW_mcp23017.setID_device(z, (int8_t)adr,ПЕРИОД ОБНОВЛЕНИЯ (в тиках 10мс) ); } //RT_HW_mcp_23017.device (mcp); mode=z.mode; //------------------------------------------------------------------------------------------------- 628 z.custom=0; #include "RT_HW_MCP23017.h" z ; RT_HW_MCP23017_DEVICE mode ; uint8_t outA 094199f9-cb99-48aa-a3dd-14ab26370dd0 08e2598f-d0f0-441a-b4df-10f89b57985c outB 6ebe6d9c-6384-4426-92eb-7a2c329d6fb6 cc21771f-3906-4019-8c2b-f22a5b40ee8e c71075da-3e47-4925-83f8-fe0b12fb164a ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС РЕЖИМ_РЕГИСТРА_A 0/1- ввод/вывод РЕЖИМ_РЕГИСТРА_B 0/1- ввод/вывод ИНВЕРСИЯ РЕГИСТРА_А ИНВЕРСИЯ РЕГИСТРА_В ВХОДА РЕГИСТРА_A 0/1 - без подтяжки/ с подтяжкой к +Vcc ВХОДА РЕГИСТРА_В 0/1 - без подтяжки/ с подтяжкой к +Vcc 1fb2c269-4b78-45fd-9428-51d878ff3819 b367804a-b80c-4a9b-b628-0cc66e98ad1e РЕЖИМ ЗАПИСИ //-----Вывод в mcp23017 if (!z.ok.custom) {z.mode=0; bitWrite(z.mode,0, ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ ); //--bit0: 0/1 ->i2c/SPI; bitWrite(z.mode,1, РЕЖИМ_РЕГИСТРА_A ); //--bit1: 0/1 ->вывод/ввод; bitWrite(z.mode,2, РЕЖИМ_РЕГИСТРА_B ); //--bit2: 0/1 ->вывод/ввод; bitWrite(z.mode,3, ИНВЕРСИЯ РЕГИСТРА_А ); //--bit3: 0/1 ->без инверсии/ с инверсией; bitWrite(z.mode,4, ИНВЕРСИЯ РЕГИСТРА_В ); //--bit4: 0/1 ->без инверсии/ с инверсией; ; bitWrite(z.mode,5, ВХОДА РЕГИСТРА_A ); //--bit5: 0/1 ->без подтяжки/ с подтяжкой к Vcc; bitWrite(z.mode,6, ВХОДА РЕГИСТРА_В ); //--bit6: 0/1 ->без подтяжки/ с подтяжкой к Vcc; bitWrite(z.mode,7, РЕЖИМ ЗАПИСИ ); //--bit5: 0/1 ->в каждом цикле/ по изменениям значения; RT_HW_mcp23017.setID_device(z, (int8_t)adr, ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС ); } //RT_HW_mcp_23017.device (mcp); mode=z.mode; outA=z.regA; outB=z.regB; //------------------------------------------------------------------------------------------------- 987 z.ok.custom=0; #include "RT_HW_MCP23017.h" z ; RT_HW_MCP23017_DEVICE inA inB 2e8e2041-f3ad-4250-90ac-ae91ea9b30c9 00_mcp23x17:ввод/вывод регистров A,B БЛОК ВВОДА_ВЫВОДА MCP23017. Блок содержит два 8-разрядных регистра A и B, кадый из которых может настроен на вывод или ввод. Настройка режимов работы регистров А и В: w - вывод с записью в каждом цикле; W -вывод с записью по изменению; r -ввод; R -ввод с инверсией и подтяжкой входов к +Vcc Обмен с регистрами осуществляется через шину i2c по адресу=adr или через SPI через пин cs=adr. Если adr <0, устройство не используется. Для i2c: Обычно mcp23017 выпускаются с базовым адресом 0x20 (32 десятичный). Это адрес по умолчанию установлен в библиотеке как "базовый адрес". Пространство адресов может меняться входами a0,a1,a2 mcp23017 - всего восемь адресов. Если аdr в диапазоне 0-7, то к этому значению будет прибавлено значение базового адреса. Алгоритм поиска устройства на шине i2c стандартный для библиотек ecoins. --------------------------------------------------------------------------------------------------------------------------------- Обмен с устройством осуществляется не чаще параметра ПЕРИОД ОБНОВЛЕНИЯ (в тиках 10мс). Вывод може быть постоянный или по изменению входных параметров. --------------------------------------------------------------------------------------------------------------------------------- Режимы работы устанавливаются через пользовательские параметры, из которых формируется регистр управления mode: bit0: 0/1 - подключение: i2c / SPI; bit1: 0/1 - регистр А: вход / выход; bit2: 0/1 - регистр В: вход / выход; bit3: 0/1 - тип выходов: обычный / открытый выход; bit4: 0/1 - инверсия выходов: без инверсии / с инверсией; bit5: 0/1 - режим записи выходов: всегда / по изменению входных значений; bit6: 0/1 - тип входов: без подтяжки к +Vcc / c подтяжкой к +Vcc; bit7: 0/1 - инверсия входов: без инверсии / с инверсией; ----------------------------------------------------------------------------------------------------------------------------------- ecoins@mail.ru 12.07.19; 21.07.19; 28.10.19. new 07.04.2020 2017 РЕЖИМ РЕГИСТРА_А aee3ecaf-a995-4b82-86a1-2b7bdf962b27 W W 5b2166f0-8718-4d0b-af19-c332e0a5a0be РЕЖИМ РЕГИСТРА_В a42c586a-4d87-48da-a187-068226f81a6f W W 8a87ae01-1c27-4140-a64b-a31164f99ad3 ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ 'i' -i2c; 's' -SPI 8072dca6-5e9a-41c5-af47-636d6c496942 i i 70ccce9c-d3fa-43b4-aea5-168e660a39d2 ИНИЦИАЛИЗИРОВАТЬ ИНТЕРФЕЙСЫ c8b7ba52-0872-45b4-9a4b-372dac9b5749 N Y ca60dc20-e812-4f4f-8cc0-6e50b74271bf //-----Вывод в mcp23017 if(EN){ if (!z.ok.custom) { if( ИНИЦИАЛИЗИРОВАТЬ ИНТЕРФЕЙСЫ == 'Y') RT_HW_mcp23017.hive.permit_bus=true; RT_HW_mcp23017.setID_device(z, (int8_t)adr, ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ , РЕЖИМ РЕГИСТРА_А , РЕЖИМ РЕГИСТРА_В , ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС );} RT_HW_mcp23017.direct (z, A , B); } //tun=z.tuning; inA=z.inA; inB=z.inB; //------------------------------------------------------------------------------------------------- 454 #include "RT_HW_MCP23017.h" z ; RT_HW_MCP23017_DEVICE 750@210 corner: 764@230 750@240 770@240 750@230 corner: 770@250 750@250 corner: 770@270 736.31579005487d@500 756.31579005487d@500 750@280 corner: 750@500 758.31579005487d@495.5d corner: 801.31579005487d@504.5d 705.0d@275.5d corner: 748.0d@284.5d Registr B 750@280 770@280 750@270 corner: 770@290 18.0d 827.36842164703d@260 847.36842164703d@260 827.36842164703d@250 corner: 847.36842164703d@270 827.36842164703d@280 847.36842164703d@280 827.36842164703d@270 corner: 847.36842164703d@290 750@260 57.368421647027d 770@260 406.31579005487d@250 corner: 406.31579005487d@260 408.31579005487d@245.5d corner: 452.31579005487d@254.5d 704.0d@255.5d corner: 748.0d@264.5d Registr A 386.31579005487d@250 406.31579005487d@250 386.31579005487d@240 corner: 406.31579005487d@260 310@250 Bit_Reg_8 31460175-184d-465c-9ffb-f43c8960cfb1 Bit_Reg_8 register=0; bitWrite(register, 0, B0); bitWrite(register, 1, B1); bitWrite(register, 2, B2); bitWrite(register, 3, B3); bitWrite(register, 4, B4); bitWrite(register, 5, B5); bitWrite(register, 6, B6); bitWrite(register, 7, B7); Reg = register ; 56.315790054871d 330@250 720@160 680@160 corner: 680@160 660@160 680@160 660@150 corner: 680@170 580@140 600@140 506.0d@140 corner: 506.0d@140 pwm 23.0d 486.0d@140 506.0d@140 open 34820891-d422-4290-95ca-51aeea963eb3 открытие дискретного клапана 2a9d3a91-6cf8-4944-97ba-fb003381c1ff close 836745c6-46fc-4bea-bc2f-e5c46a3fb32c закрытие дискретного клапана 33b4d3f5-0311-41a8-8aa8-468fdf2b50f8 pwm 890f5fb2-becd-4bcc-aff5-4104a96e4e9e ШИМ на нагреватель b2f9a78c-ec80-4e5e-9e10-048602fe0792 7eae5812-c3a8-46f1-8369-7aeba1df129c ok = false; time = millis() - time_old; if (time > period) { time_old = millis(); E_pid = Set - Value; Pr = Kp * E_pid; Integ = Integ + ( E_pid / Ki ); Integ = constrain( Integ, -Max_int, Max_int ); Df = Kd * ( E_pid - E_pid_old ); Y = Pr + Integ + Df; E_pid_old = E_pid; Y_PID = int (Y); Y_PID = constrain( Y_PID, -100, 100 ); Y_PWM = map( Y_PID, -100, 100, 0, 100 ); ok = true; } 397 E_pid ; float E_pid_old ; float Pr ; float Integ ; float Df ; float Y ; float time ; long time_old ; long 486.0d@130 corner: 506.0d@150 400@60 PID_v3 8bf73e50-2148-40cb-ab79-614ad0a2bcf5 PID_v3 Классический ПИД регулятор. Регулятор может управлять нагревателем/холодильником и аналоговыми ИМ. ------------------------------------------------------------------------------------------------------------------------- Расчет мощности идет по формуле PWR = Kp*E(t)+сумма(E(t)/Ki)+Kd*dE(t), где E(t) - рассогласование (уставка - вход), dE(t) - дельта рассогласования по сравнению с предыдущим измерением, Kp,Ki,Kd - коэфф ПИД. ------------------------------------------------------------------------------------------------------------------------ Входы блока: period - период работы ПИД и ШИМ в милисекундах. Value - входная величина Set - уставка Kp - коэффициент пропорциональной составляющей >= 0 Ki - коэффициент интегральной составляющей >= 0 (интеграл отключается при Ki=0) Kd - коэффициент дифференциальной составляющей >= 0 ------------------------------------------------------------------------------------------------------------------------ Параметры пользователя: MaxPow - максимальная мощность на выходе, % MinPow - минимальная мощность на выходе, % MinPulse - минимальное время импульса на дискретных выходах, мс ------------------------------------------------------------------------------------------------------------------------ Выходы блока: PWR - выходная мощность 0..1000 (0..+100,0%) pwm - медленный ШИМ на нагреватель/холодильник ------------------------------------------------------------------------------------------------------------------------ Просто о составляющих ПИД (для простоты в качестве регулируемого параметра возьмем температуру): ("уставка" - "текущая температура") = ошибка регулирования. Пропорциональная составляющая - мощность на выходе равна ("ошибка регулирования") * Kp, чем больше коэфф. Kp, тем больше мощность. Если уставка = 40, температура = 30, Kp = 2, то мощность = 20%. Если температура = уставке, то Пропорц = 0. Интегральная составляющая - каждый период работы регулятора мощность на выходе будет увеличиваться или уменьшаться на величину ("ошибка регулирования") / Ki, можно сказать, что интегр. составл. это накопитель мощности и чем меньше коэфф. Ki, тем быстрее мощность будет возрастать или уменьшаться. Если уставка = 40, температура = 30, Ki = 5, то мощность будет прибавляться на 2% каждый период. Если температура = уставке, то мощность не меняется. Дифференциальная составляющая - мощность на выходе равна: ("ошибка регулирования сейчас" - "ошибка регулирования в прошлом периоде") * Kd. Этот параметр следит за скоростью изменения температуры. Если коэфф Kd = 6, сейчас ошибка регулирования = 5, а в предыдущий период была = 10 (т.е. температура возросла на 5 градусов), то мощность на выходе будет равна (-5*6) = -30%. Дифф составляющая уменьшила мощность, потому как температура очень сильно начала подниматься. Если температура стабильна, то Дифф = 0. Полная мощность ПИД-регулятора считается по формуле PWR = (пропорц + интегр + дифф). Допустим мощность, накопленная в интегральной составляющей = 42%, тогда в нашем случае PWR = 20+42-30 = 32%. Из этого примера видно, как "П" и "Д" оперативно помогают медленно меняющейся "И" корректировать выходную мощность в зависимости от текущего состояния объекта регулирования. -------------------------------------------------------------------------------------------------------------------------- Автор: Boroda. 3342 MaxPow максимальная мощность на выходе, % aed3d637-8bff-4a8d-a323-53f21e98357d 08f63c69-b224-4e1d-874b-8b53a09d0d67 MinPow минимальная мощность на выходе, % 91918907-ce2a-493d-bfd7-fcf0eb2a5db7 eac7e8bf-f32a-4df4-85a8-c49b017ba62a MinPulse минимальное время импульса на дискретных выходах, мс fdafe58d-f887-41d8-87d9-5015a629e428 b200a7cf-4092-48d8-aec3-59bbda62049d // PID_v2 ok = false; time = millis() - time_old; if (time > period) // период работы ПИД { time_old = millis(); time = 0; E_pid = (Set - Value) * 10; // *10 так как диапазон выходных данных до 1000, чтоб получить мощность с дискретностью 0,1% Pr = Kp * E_pid; // пропорциональная составляющая Pr = constrain( Pr, (-1000.0), (1000.0) ); // ограничиваем +/-1000 if (Ki>0) { Integ = Integ + ( E_pid / Ki ); // интегральная составляющая Integ = constrain( Integ, (MinPow * 10), (MaxPow * 10) ); // ограничиваем интегральную составляющую 0..100% } else { Integ = 0; } Df = Kd * ( E_pid - E_pid_old ); // дифференциальная составляющая Df = constrain( Df, (-1000.0), (1000.0) ); // ограничиваем +/-1000 E_pid_old = E_pid; PWR = int(Pr + Integ + Df); // считаем текущую мощность PWR = constrain( PWR, (MinPow * 10), (MaxPow * 10)); // ограничиваем текущую мощность 0..100% if ( PWR > 0 ) { pwm = true; } // если мощность больше нуля, то включаем выход PWM temp1 = ( (period * abs(PWR)) / 1000 ); // вычисляем время импульса от общего периода ШИМ if (temp1 < MinPulse) { pwm = false; } // если импульс короче Min_pulse, то отключаем выход PWM ok = true; // расчет произведен } if (time >= temp1) { pwm = false; } // если время вышло, то отключаем выход PWM 1278 E_pid ; float E_pid_old ; float Pr ; float Integ ; float Df ; float time ; unsigned long time_old ; unsigned long temp1 ; unsigned long 66.0d 420@60 250@60 corner: 250@380 242@376.0d corner: 325.0d@384.0d 315.0d@56.0d corner: 398.0d@64.0d Тем. тек для PiD 220@380 240@380 220@370 corner: 240@390 140@340 160@340 570@220 590@220 corner: 699.0d@240 570@220 corner: 719.0d@240 600@234.5d 460@180 480@180 corner: 540@240 460@180 corner: 560@240 494.5d@194.0d 200@160 220@160 corner: 259.47368458037d@240 200@160 corner: 279.47368458037d@240 226.23684229019d@173.5d EN 200@190 214@190 bme280 afd76321-c243-4d29-9374-ccde074f84d0 74742f7e-11ba-4be7-8fd2-e9432e4b8441 adr 46f9b6a5-b639-47d6-b33b-5eb9907c6d6c 26fefc2b-fb56-48fe-98a0-cf5230d6d229 err 6e17af8b-c3e7-47e8-92fd-c0faa67b1205 cca7eca0-43a3-4fcf-8ff5-8fcda0bc67cb T 51280c4d-c719-4bd2-a4c2-3f8e9d119a5a Температура в градусах С 8f02bd03-372b-440c-8640-497d3d231945 H e200e949-59ad-47e5-b384-a28582dee47e Влажность в % aa64d150-f398-4bc6-a11e-c81b3eda0d8e P e78fdf24-0cee-4a9a-8f84-45bdad96ca43 Давление в кПа 509c5d6d-36ab-4276-9b1b-240186fff79e A 32b1a9ad-1274-41ad-99b3-a906fa5680ae Высота над уровнем моря в м 3c8c0c80-36ea-470c-9417-2c9ea5fd8b80 015ac691-2293-4200-ae1e-4ddf85d6ba90 3.bme280:Сенсор Bosh T,H,P Блок чтения сенсора BME280 (температура, влажность, атмосферное давление, высота) 1. Поддерживает подключение через i2c(проверено), SPI(в работе), через 4-пина - программный SPI (в работе). 2. Поддерживает одновременную работу с несколькими сенсорами (в т.ч. и с разными интерфейсами подключения); 3. Точность измерения 20 разрядов АЦП для температуры и давления и 16 разрядов АЦП для влажности. 4. Измерение производится через программные прерывания - длительность цикла не более 300 мкс при скорости шины i2c 400кГц. 5. Измерения каждого параметра (T,H,P) занимает 2 программных вхождения. В терминах FLProg/EIS рекомендуется использовать блок в "свободной" задаче. 6. Периодичность вызова определяется параметрами id.periodTemper(default=20 - 1сек), id.periodHum(default=40 -2 сек), id.period.Press(default=60 -3 сек)- значения в тиках. Максимальное значение 255. 1 тик=50мс. Если значение параметра=0, соответствующий параметр не опрашивается. 7. При обрыве связи на время более 5сек (параметр id.periodErr=100) взводится флаг id.err и устанавливаются значения по умолчанию id.T=20.5 (градусы С); id.H=40.5(%); id.P=1000.5(кПа); id.A=35.5(м); 8. При восстановление связи повторно считываются из сенсора и записываются в сенсор коректирующие коэффициенты и настроечные параметры и производятся измерения. 9. При обновлении данных взводится флаг id.fresh, который сбрасывается пользователем. 10. Подробное использование параметров приведено в datasheet BME280 BOSH. ----------------------------------------------------------------------------------------------------------------------------------- ecoins@mail.ru 07.08,20 v.1.1 1660 ИНТЕРФЕЙС I - i2c; S -SPI; P- 4-пина (softSPI) 48418a91-e092-4aaa-9b39-a7e988aa2e69 I a4e2413d-e5e5-4679-8eeb-cb9b1e15928f //--Блок BME280 (температура, влажность, атмосферное давление, высота) if(!id.custom) {RT_HW_bme280.setID(id, ИНТЕРФЕЙС ,(int8_t)adr);} RT_HW_bme280.directDevice(id); if(id.fresh) {id.fresh=0; T=id.T; H=id.H; P=id.P; A=id.A; err=id.err;} 237 id.custom=0; #include "RT_HW_BME280.h" --Создание объекта с данными под сенсор. id ; RT_HW_BME280_ID ec8b2224-edce-461e-b11b-6cc7cce92bc6 //--Блок BME280 (температура, влажность, атмосферное давление, высота) if(!id.custom) {RT_HW_bme280.setID(id, ИНТЕРФЕЙС ,(int8_t)adr);} if(EN) {RT_HW_bme280.directDevice(id); if(id.fresh) {id.fresh=0; T=id.T; H=id.H; P=id.P; A=id.A; err=id.err;}} 247 200@180 corner: 214@200 259.47368458037d@190 279.47368458037d@190 259.47368458037d@180 corner: 279.47368458037d@200 259.47368458037d@200 corner: 279.47368458037d@220 460@280 480@280 corner: 540@340 460@280 corner: 560@340 494.5d@294.0d 460@310 300@330 320@330 corner: 400@370 300@330 corner: 420@370 332.0d@343.5d 420@360 Q 400@360 420@330 corner: 420@360 460@330 480@330 560@320 580@320 corner: 677.0d@340 560@320 corner: 697.0d@340 590@334.0d 560@330 77.0d HTU влажность 440@470 460@470 corner: 513.0d@570 440@470 corner: 533.0d@570 465.0d@483.5d 440@500 460@500 440@490 corner: 460@510 440@520 454@520 440@510 corner: 454@530 440@540 460@540 440@530 corner: 460@550 440@550 corner: 460@570 440@560 2 строка 26@-24.473684329405d 3@12.0d 466@445.52631567059d corner: 517.0d@465.52631567059d ~ L 1 53.0d 460@560 580@330 560@330 corner: 560@330 540@330 560@330 480@310 279.47368458037d@230 corner: 279.47368458037d@310 259.47368458037d@230 279.47368458037d@230 259.47368458037d@220 corner: 279.47368458037d@240 279.47368458037d@210 htu21 c74caa1c-834a-4d73-8102-2128db5b1264 2.htu21:i2c cенсор T,H Блок сенсора HTU21 (температура, влажность). 1. Поддерживает подключение через i2c. 2. Измерение производится через программные прерывания. В режиме обращения к сенсору через i2c длительность цикла не более 300 мкс (при скорости шины i2c 400кГц). В режиме ожидания события по времени не более 14мкс (для AVR328). 5. Измерения каждого параметра (T,H) занимает 2 программных вхождения (разделенные длительностью 60мс); 6. В терминах FLProg/EIS рекомендуется использовать блок в "свободной" задаче. Возможно использовать и в быстрых,оперативных и фоновых задачах. 7. Периодичность вызова определяется параметрами пользователя. По умолчанию периоды: температура - 1200мс (не менее 1000мс); влажность - 2000мс (не менее 1500мс); значения в тиках. Максимальное значение 255. 1 тик=50мс. Если значение параметра=0, соответствующий параметр не опрашивается. 7. При обрыве связи на время более 5сек (параметр id.periodErr=100) взводится флаг id.err и устанавливаются значения по умолчанию id.T=20.5 (градусы С); id.H=40.5(%); id.P=1000.5(кПа); id.A=35.5(м); 8. При восстановление связи повторно считываются из сенсора и записываются в сенсор коректирующие коэффициенты и настроечные параметры и производятся измерения. 9. При обновлении данных взводится флаг id.fresh, который сбрасывается пользователем. 10. Подробное использование параметров приведено в datasheet BME280 BOSH. ----------------------------------------------------------------------------------------------------------------------------------- ecoins@mail.ru 07.08,20 v.1.1 1581 ПЕРИОД_ОПРОСА_ТЕМПЕРАТУРЫ_МС 1200 ПЕРИОД_ОПРОСА_ВЛАЖНОСТИ_МС f4c6012d-67fb-490c-a320-dbc4b2e2b0f9 1d8789a8-037f-4d3b-887d-6ce67e19a9d9 //--Блок HTU21 (температура, влажность) if(id.custom==0) {RT_HW_htu21.setID(id, ПЕРИОД_ОПРОСА_ТЕМПЕРАТУРЫ_МС , ПЕРИОД_ОПРОСА_ВЛАЖНОСТИ_МС );} RT_HW_htu21.direct(id,EN); err=id.err; T=id.valTmp; H=id.valHum; 208 #include "RT_HW_HTU21.h" --Создание объекта с данными под сенсор. id ; RT_HW_HTU21_ID 39.473684580372d 259.47368458037d@210 279.47368458037d@210 corner: 279.47368458037d@210 460@210 480@210 300@240 320@240 corner: 400@280 300@240 corner: 420@280 332.0d@253.5d 400@260 corner: 420@280 420@270 400@270 420@230 corner: 420@270 460@230 480@230 560@230 540@230 560@230 corner: 560@230 570@230 590@230 89.0d HTU температура 440@420 460@420 440@410 corner: 460@430 440@360 1 строка 44.0d 3@12.0d 466@305.5263156706d corner: 516.0d@325.5263156706d ~ L 1 460@360 260@350 280@350 corner: 330.00000050193d@430 260@350 corner: 350.00000050193d@430 284.00000025097d@363.5d 260@370 corner: 280@390 260@400 274@400 260@390 corner: 274@410 260@420 280@420 260@410 corner: 280@430 260@380 1 строка 3@12.0d 285@325.5263156706d corner: 335.0d@345.5263156706d C tW> 280@380 260@490 280@490 corner: 330.00000050193d@570 260@490 corner: 350.00000050193d@570 284.00000025097d@503.5d 260@520 260@540 274@540 260@560 280@560 2 строка 3@12.0d 285@465.52631567059d corner: 336.0d@485.5263156706d C H%> 280@520 138.0d@30 corner: 138.0d@790 140.0d@26.5d corner: 155.0d@33.5d 183.0d@26.5d corner: 198.0d@33.5d 773.0d@156.5d corner: 788.0d@163.5d 663.0d@46.5d corner: 678.0d@53.5d 423.0d@636.5d corner: 438.0d@643.5d 243.0d@656.5d corner: 258.0d@663.5d 213.0d@786.5d corner: 228.0d@793.5d 323.0d@786.5d corner: 338.0d@793.5d 423.0d@786.5d corner: 438.0d@793.5d 423.0d@356.5d corner: 438.0d@363.5d 243.0d@376.5d corner: 258.0d@383.5d 423.0d@496.5d corner: 438.0d@503.5d 243.0d@516.5d corner: 258.0d@523.5d lcd 440@640 460@640 440@660 440@680 460@680 3 строка 3@12.0d 466@585.52631567059d corner: 517.0d@605.52631567059d ~ L 1 454@660 180@340 194@340 260@360 240@360 260@360 corner: 260@360 260@360 280@360 340@360 Свет 27@-22.368421145093d 3@10.0d 287@307.63157885491d corner: 318.0d@325.63157885491d center 320@360 340@360 corner: 340@440 342@356.5d corner: 357.0d@363.5d 643.0d@436.5d corner: 658.0d@443.5d B4 660@440 680@440 660@430 corner: 680@450 660@450 corner: 680@470 660@470 corner: 680@490 660@490 corner: 680@510 736.31579005487d@490 corner: 756.31579005487d@510 660@500 680@500 560@500 corner: 560@560 540@560 560@560 540@550 corner: 560@570 480@540 500@540 200@50 169.0d@50 corner: 169.0d@50 149.0d@50 169.0d@50 149.0d@40 corner: 169.0d@60 180@70 200@70 corner: 337.0d@90 180@70 corner: 357.0d@90 210@84.5d 20@70 40@70 corner: 165.0d@90 20@70 corner: 185.0d@90 44@84.5d 20@80 185.0d@80 165.0d@80 180@80 corner: 180@80 180@80 200@80 180@70 corner: 200@90 Короткое нажатие Key1 10@110 30@110 corner: 99.0d@130 10@110 corner: 119.0d@130 34@123.5d 10@120 30@120 10@110 corner: 30@130 180@110 200@110 corner: 289.0d@130 180@110 corner: 309.0d@130 210@123.5d 180@110 corner: 200@130 180@120 Меню.Name.1 200@120 119.0d@120 corner: 119.0d@120 99.0d@120 119.0d@120 99.0d@110 corner: 119.0d@130 10@130 30@130 corner: 101.0d@150 10@130 corner: 121.0d@150 34@143.5d 10@140 30@140 10@130 corner: 30@150 180@130 200@130 corner: 290.0d@150 180@130 corner: 310.0d@150 210@143.5d 180@130 corner: 200@150 180@140 Меню.ValStr.1 200@140 121.0d@140 corner: 121.0d@140 101.0d@140 121.0d@140 101.0d@130 corner: 121.0d@150 10@150 30@150 corner: 68.0d@170 10@150 corner: 88.0d@170 34@163.5d 10@160 30@160 10@150 corner: 30@170 180@150 200@150 corner: 258.0d@170 180@150 corner: 278.0d@170 210@163.5d 180@160 Меню.1 200@160 88.0d@160 corner: 88.0d@160 68.0d@160 88.0d@160 68.0d@150 corner: 88.0d@170 251.0d 200@70 220@70 corner: 342.0d@90 200@70 corner: 362.0d@90 224@85.0d 60@10 80@10 corner: 161.0d@150 60@10 corner: 181.0d@150 85.0d@24.5d control 33.0d 161.0d@40 181.0d@40 RT.Диспетчер uart c6dc98fc-9703-43cc-8c4a-2487a1d84a78 df33d449-e44d-4240-ad80-08ba9b33fda3 c7300995-ce24-481b-9c8c-5536c400fd4e 168bedd0-e985-41ce-aa37-b180bcdbcf4f quick 9422d83d-8171-44e2-bff3-b55c42d94719 8a884944-e63a-40bc-a567-3777f259315c fast dd571a9c-c671-4753-83c1-a872487de4fe 627d2840-166b-4fd4-b2fa-d0cc67864d16 slow 0fe2fcd6-bff9-4527-8594-c7dada842a34 fd05407b-d461-4768-9f4f-e54d0e0f9787 back 089ca824-182a-47a9-b732-2fb613fea029 27b2c581-9a95-41b7-b5b1-f4fe49ca3104 frdm cd8f08f8-92ef-4c5c-b182-93380642f799 4fd2d748-be54-4c9b-ad44-61c59fa06a68 71e4be07-8ef9-4c4c-9e19-f3ee7c695727 RT.Диспетчер head 68fd8407-4102-4a11-b295-2ccc29d06708 ffbbae92-335a-4455-bde2-cae2cbd10788 813be28b-8d1c-443f-8c39-892d8f48824a 161.0d@30 corner: 181.0d@50 200@50 220@50 corner: 364.0d@70 200@50 corner: 384.0d@70 224@65.0d 200@50 corner: 220@70 364.0d@60 384.0d@60 364.0d@50 corner: 384.0d@70 200@60 136.0d Номер оперативной задачи c4e0251e-b2d9-402f-9eb0-78f6e76946a7 220@60 181.0d@60 corner: 181.0d@60 161.0d@60 181.0d@60 161.0d@50 corner: 181.0d@70 161.0d@70 corner: 181.0d@90 200@90 220@90 corner: 355.0d@110 200@90 corner: 375.0d@110 224@105.0d 200@100 355.0d@100 375.0d@100 127.0d Номер медленной задачи 7b45fe5e-0fca-4555-b283-74f280d2fe8b 220@100 181.0d@100 corner: 181.0d@100 161.0d@100 181.0d@100 161.0d@90 corner: 181.0d@110 200@110 220@110 corner: 344.0d@130 200@110 corner: 364.0d@130 224@125.0d 200@110 corner: 220@130 344.0d@120 364.0d@120 344.0d@110 corner: 364.0d@130 200@120 116.0d Номер фоновой задачи ba39c42f-eb76-4ea2-bf7a-4fa83faca09d 220@120 181.0d@120 corner: 181.0d@120 161.0d@120 181.0d@120 161.0d@110 corner: 181.0d@130 200@130 220@130 corner: 353.0d@150 200@130 corner: 373.0d@150 224@145.0d 200@130 corner: 220@150 353.0d@140 373.0d@140 353.0d@130 corner: 373.0d@150 200@140 125.0d Номер свободной задачи 1dd7993b-b62d-4f64-9f58-d803f38445c1 220@140 181.0d@140 corner: 181.0d@140 161.0d@140 181.0d@140 161.0d@130 corner: 181.0d@150 181.0d@80 RT.Диспетчер 7b1ffb11-7fd4-4f52-a5a3-ec1513229dcd 1.RT.Диспетчер: Планирование вызова задач Блок диспетчера задач. 1. Запускает планировщик событий и задач (диспетчер). 1.1.Блок имеет выходы номеров задач, номера задач сменяются с заданной периодичностью: quick – номера оперативных задач (по умолчанию 5 задач, период смены задачи 10 мс); fast – номера быстрых задач (по умолчанию 4 задач, период смены задачи 25 мс); slow – номера медленных задач (по умолчанию 4 задачи, период смены задачи 250 мс); back – номера фоновых задач (по умолчанию 5 задач, период смены задачи 100 мс); frdm - номера свободных задач (без периода) (по умолчанию 25 задач) номера последовательно изменяются в циклах, когда номера предыдущих задач равны 0); 1.2.Кол-во задач могут быть изменены внешним блоком, который должен запускаться 1 раз перед первым вызовом диспетчера: RT_HW_Base.shed.quick.qnt, RT_HW_Base.shed.fast.qnt, RT_HW_Base.shed.slow.qnt, RT_HW_Base.shed.back.qntж 1.3.Номера задач изменяются циклически. Например для quick ->1,2,3,4,5,1,2,3,4,5 и т.д.) 1.4.В каждом цикле только одна задача может быть отлична от нуля. 1.5.При одновременной готовности к вызову нескольких типов (quick, fast и т.д.) задач, они вызываетсяпо приоритету quick,fast,slow,back,frdm. 1.6.Номера задач quick,fast,slow,back устанавливаются на один цикл, затем они сбрасывается в 0 до установки по времени следующего номера задач. 2.Блок запускает инициализацию консоли, на которую могут выдаваться отладочные сообщения. 3.В каждом цикле на выходе control изменяется значение (0/1). Это выход предусмотрен для наблюдения логическим анализатором. 1554 //-----Управление задачами------------------------------------------------------------- RT_HW_Base.sheduler(); //--Вызов диспетчера задач; control=bitRead(RT_HW_Base.shed.blink,0); quick=RT_HW_Base.shed.quick.num; fast =RT_HW_Base.shed.fast.num; slow =RT_HW_Base.shed.slow.num; back=RT_HW_Base.shed.back.num; frdm= RT_HW_Base.shed.frdm.num; //-------------------------------------------------------------------------------------------------------- 460 #include "RT_HW_BASE.h" 81.0d 161.0d@80 181.0d@80 corner: 181.0d@80 200@80 220@80 200@70 corner: 220@90 342.0d@80 362.0d@80 342.0d@70 corner: 362.0d@90 114.0d Номер быстрой задачи 62012ac0-17a6-409e-ae99-baec1b86347d 500@60 500@60 corner: 780.0d@136.0d Оперативная задача: период= 10ms; кол-во задач=5; Быстрая задача: период= 50ms; кол-во задач=4; Медленная задача: период=250ms; кол-во задач=4; Фоновая задача: период=100ms; кол-во задач=5; Свободная задача: период=loop(); кол-во задач=25; Оперативная задача: период= 10ms; кол-во задач=5; 269.0d 3@12.0d Быстрая задача: период= 50ms; кол-во задач=4; 267.0d 3@26.0d Медленная задача: период=250ms; кол-во задач=4; 3@40.0d Фоновая задача: период=100ms; кол-во задач=5; 3@54.0d Свободная задача: период=loop(); кол-во задач=25; 274.0d 3@68.0d 231.0d Формирование параметров из меню == 560@350 560@350 corner: 856.0d@384.0d Эта задача работает со строками - это занимает время. Лучше её вызывать как быструю задачу - это 1 раз в 100мс Эта задача работает со строками - это занимает время. 278.0d 3@12.0d Лучше её вызывать как быструю задачу - это 1 раз в 100мс 290.0d 3@26.0d 728.0d Вывод на дисплей 20@90 20@90 corner: 371.0d@186.0d Вывод на дисплей использует библиотеку, которая длч оптимизации времени процессора осуществляет вывод одного символа через выполнение несколько микроопераций. Для вывода строки 10 символов приходиться делать иногда несколько десятков (это по смыслу, но не точно) вхождений в блок. ПОЭТОМУ ЭТА ЗАДАЧА ВСЕГДА СВОБОДНАЯ !!! Вывод на дисплей использует библиотеку, которая длч оптимизации 345.0d 3@13.0d времени процессора осуществляет вывод одного символа 293.0d 3@25.0d через выполнение несколько микроопераций. 230.0d 3@40.0d Для вывода строки 10 символов приходиться делать иногда 303.0d 3@54.0d несколько десятков (это по смыслу, но не точно) вхождений в блок. 338.0d 3@69.0d ПОЭТОМУ ЭТА ЗАДАЧА ВСЕГДА СВОБОДНАЯ !!! 244.0d 3@83.0d 3@88.0d 70@50 70@50 corner: 148.0d@71.0d Дисплей 20x4 72.0d 3@13.0d 190@50 190@50 corner: 333.0d@70.0d Вывод в 1 колонку 1 строки 137.0d 3@12.0d 958.0d Сенсоры влажности и температуры 468.0d Плата выходов контроллера MCP23017 668.0d Часы реального времени 590@50 610@50 corner: 690@130 590@50 corner: 710@130 627.0d@64.0d 490@50 510@50 corner: 570@90 490@50 corner: 590@90 529.0d@63.5d 410@30 430@30 corner: 470@90 410@30 corner: 490@90 438.5d@43.5d 300@10 320@10 corner: 360@70 300@10 corner: 380@70 331.5d@23.5d 160@10 180@10 corner: 260@50 160@10 corner: 280@50 181.0d@24.5d 20@60 40@60 corner: 120@100 20@60 corner: 140@100 52.0d@73.5d 140@90 120@90 Hour 590@100 610@100 140@40 corner: 140@100 Value 160@40 180@40 280@40 Q 260@40 280@40 corner: 280@40 300@40 320@40 150@130 170@130 corner: 250@170 150@130 corner: 270@170 171.0d@144.5d 20@130 40@130 corner: 120@170 20@130 corner: 140@170 52.0d@143.5d 140@160 120@160 Min 590@120 610@120 140@120 corner: 140@160 150@160 170@160 270@160 250@160 270@60 corner: 270@160 300@60 320@60 380@60 360@60 380@60 corner: 380@60 410@60 430@60 270@130 290@130 corner: 370@170 270@130 corner: 390@170 302.0d@143.5d 390@160 370@160 390@80 corner: 390@160 410@80 430@80 490@80 470@80 490@80 corner: 490@80 490@80 510@80 590@80 570@80 590@80 corner: 590@80 EN 590@80 610@80 298.0d Поворот лотков 360@100 380@100 corner: 440@360 360@100 corner: 460@360 395.0d@114.5d Sel 360@350 380@350 v0 360@130 380@130 352.0d@133.5d v1 43200 360@150 380@150 328.0d@153.5d v2 21600 360@170 380@170 328.0d@173.5d v3 11400 360@190 380@190 329.0d@193.5d v4 10800 360@210 380@210 329.0d@213.5d v5 8640 360@230 380@230 334.0d@233.5d v6 7200 360@250 380@250 334.0d@253.5d v7 6172 360@270 380@270 334.0d@273.5d v8 5400 360@290 380@290 334.0d@293.5d v9 4800 360@310 380@310 334.0d@313.5d v10 4320 360@330 380@330 334.0d@333.5d Q 440@350 460@350 441.0d PiD нагреватель увлажнитель 488.0d 9600 arduinoIDE allInOne landscape all 225 4096 193244538 183144842 57 ESP8266 NodeMcu v3 109802410 default