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