0@0
LibraryRoot
LibraryGroup-Оформление
LibraryGroup-Базовые элементы
LibraryGroup-Триггеры
LibraryGroup-Счетчики
LibraryGroup-Сравнение
LibraryGroup-Переключатель
LibraryGroup-Строки
0@-126
211
0@-760
163
292
0@-336
root
input
output
globalVariable
2
37762029-2e24-48e6-af44-fbc95a42959a
LibraryGroup-Шаговый двигатель
LibraryGroup-ШД AlexCrane
0@-693
1
6
160@60
180@60 corner: 342.0d@80
160@60 corner: 362.0d@80
184@74.5d
160@70
180@70
152.0d@73.5d
160@60 corner: 180@80
342.0d@70
362.0d@70
342.0d@60 corner: 362.0d@80
9.0d
154.0d
Количество шагов в программе
14
380@10
380@10 corner: 779.0d@46.0d
4
left
Несколько косячно, но работает. Писалось без оптимизаций на скоруюю руку.
Как пример пойдет.
Несколько косячно, но работает. Писалось без оптимизаций на скоруюю руку.
393.0d
3@13.0d
10.0d
Как пример пойдет.
99.0d
3@28.0d
3
100@20
120@20 corner: 272.0d@40
100@20 corner: 292.0d@40
125.0d@35.0d
ШД основной для 1х ШД v1.1
46b26a3e-27dd-47e8-a666-9fac62c24486
ШД основной для 1х ШД v1.1
Блок ШД для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Основной блок для управления одним ШД
Совместно использовать с блоком ШД1
274
period
100
50
Период прерывания, мкс, Менять Оторожно
41695f6c-ad2c-4843-8dc1-d29c1575da1b
761f7340-3f25-42dd-a366-852384a4cbf5
Timer1.initialize( period ); // инициализация таймера 1,
Timer1.attachInterrupt ( timerInterrupt, period ); // задаем обработчик прерываний
143
#include
<TimerOne.h>
#include
<AccelStepper.h>
Длительность импульса, вставлять больше 100 крайне не рекомендуется
#define
lengthPulse
10
if (Continuous01) {Ready01 = false; Stepper01.runSpeed();}
else { Ready01 = true; if (EnSteps01temp) {Ready01 = !Stepper01.run(); if (!Ready01) {EnSteps01temp = false;}} }
174
void
timerInterrupt
152.0d
171.0d
Читаем состояние кнопок и концевиков
70@20
90@20 corner: 220.0d@40
70@20 corner: 240.0d@40
94@34.5d
250@20
270@20 corner: 421.0d@40
250@20 corner: 441.0d@40
274@34.5d
250@20 corner: 270@40
0.0d
421.0d@30
441.0d@30
421.0d@20 corner: 441.0d@40
250@30
143.0d
Старт поиска концевика пер
5
270@30
240.0d@30 corner: 240.0d@30
226.0d@30
240.0d@30
122.0d
Старт поиска концевика
~3
digital
250@60
270@60 corner: 346.0d@80
250@60 corner: 366.0d@80
274@74.5d
70@60
90@60 corner: 145.0d@80
70@60 corner: 165.0d@80
94@74.5d
165.0d@70
47.0d
Концевик
0
2
151.0d@70
165.0d@70 corner: 165.0d@70
250@70
270@70
346.0d@70
366.0d@70
68.0d
Концевик пер
70@110
90@110 corner: 160.0d@130
70@110 corner: 180.0d@130
94@124.5d
250@110
270@110 corner: 348.0d@130
250@110 corner: 368.0d@130
274@124.5d
250@120
348.0d@120
368.0d@120
70.0d
Переменник 1
15
270@120
180.0d@120 corner: 180.0d@120
160.0d@120
180.0d@120
62.0d
Переменник
A0
analogInput
211.0d
Инициализация поиска концевика
340@60
360@60 corner: 400@100
340@60 corner: 420@100
366.5d@74.5d
10
230@40
250@40 corner: 290@100
230@40 corner: 310@100
258.5d@53.5d
8
30@60
50@60 corner: 201.0d@80
30@60 corner: 221.0d@80
54@74.5d
30@70
221.0d@70
201.0d@70
221.0d@70 corner: 221.0d@70
230@70
250@70
9
30@80
50@80 corner: 126.0d@100
30@80 corner: 146.0d@100
54@94.5d
30@90
146.0d@90
126.0d@90
146.0d@90 corner: 146.0d@90
230@90
244@90
310@90
Q
290@90
310@90 corner: 310@90
I
340@90
360@90
480@110
500@110 corner: 598.0d@150
480@110 corner: 618.0d@150
504@134.5d
480@120
500@120
460.0d@123.5d
480@140
90.0d
Поиск концевика1
En
500@140
7
480@160
500@160 corner: 533.0d@200
480@160 corner: 553.0d@200
504@183.5d
480@170
500@170
460.0d@173.5d
480@190
7.0d
25.0d
CCW
500@190
480@210
500@210 corner: 543.0d@250
480@210 corner: 563.0d@250
504@233.5d
480@220
500@220
456.0d@223.5d
480@240
35.0d
Enable
12
mosi
11
SPI
~11
500@240
480@60
500@60 corner: 668.0d@100
480@60 corner: 688.0d@100
504@84.5d
500
480@70
500@70
460.0d@73.5d
480@90
160.0d
Скорость для поиска концевика
500@90
480@260
500@260 corner: 591.0d@300
480@260 corner: 611.0d@300
504@284.0d
480@270
500@270
456.0d@273.5d
480@290
8.0d
83.0d
Включить шаги 1
En
500@290
480@310
500@310 corner: 586.0d@350
480@310 corner: 606.0d@350
504@334.5d
480@320
500@320
472.0d@323.5d
480@340
78.0d
Шаг программы
500@340
13
480@360
500@360 corner: 564.0d@400
480@360 corner: 584.0d@400
504@384.5d
480@370
500@370
456.0d@373.5d
480@390
56.0d
Программа
500@390
420@90 corner: 420@390
400@90
420@90
40@10
40@10 corner: 287.0d@30.0d
При сработанном концевике поиск не включаем
241.0d
3@12.0d
550@170
550@170 corner: 713.0d@190.0d
Задаем направление вращения
157.0d
3@12.0d
550@220
550@220 corner: 671.0d@241.0d
Включаем драйвер ШД
115.0d
3@13.0d
481.0d
Если вдруг во время работы ШД сработает концевик, то обнулим координаты обязательно
Поиск концевика без отката от него
160@30
180@30 corner: 220@70
160@30 corner: 240@70
186.5d@44.5d
30@50
50@50 corner: 126.0d@70
30@50 corner: 146.0d@70
54@64.5d
30@60
146.0d@60
126.0d@60
146.0d@60 corner: 146.0d@60
I
160@60
180@60
280@90
300@90 corner: 398.0d@130
280@90 corner: 418.0d@130
304@114.5d
280@100
300@100
256.0d@103.5d
280@120
300@120
280@50
300@50 corner: 447.0d@70
280@50 corner: 467.0d@70
304@65.0d
280@60
447.0d@60
467.0d@60
139.0d
Установка нулевой позиции
300@60
310@140
330@140 corner: 394.0d@180
310@140 corner: 414.0d@180
334@164.5d
310@150
330@150
290.0d@153.5d
310@170
330@170
240@60 corner: 240@170
Q
220@60
240@60
261.0d
Основная плата для управления ШД
120@180
140@180 corner: 173.0d@200
120@180 corner: 193.0d@200
144@193.5d
120@190
20
220@20
240@20 corner: 396.0d@240
220@20 corner: 416.0d@240
294.0d@34.5d
60@40
80@40 corner: 178.0d@60
60@40 corner: 198.0d@60
84@54.5d
60@50
198.0d@50
178.0d@50
198.0d@50 corner: 198.0d@50
Continuous01
220@50
240@50
ШагДвиг_mod
FindEndSwitch
3dd2a884-0b23-4cb1-a919-c8fcdd913331
При true постоянно шагаем для поиска концевика по CCW
dd7e7512-0e44-4b12-a3f1-2bfb7f9fd8e0
SpeedEndSwitch
0da09e76-9abd-4209-8994-3906b4e99e09
Скорость ШД для поиска концевика
e8002159-6d09-4b1f-97de-6f287b7a5e9f
ШагДвиг Установка
En
22502748-2126-49f6-a695-bae1e55d0464
3d062544-2c05-4514-9cbe-cbdff30ee30f
MaxSpeed
b4f1be77-2577-4f2d-8375-3e1ea4216d92
Максимальная скорость вращения ротора двигателя (шагов/секунду)
d146d221-19f1-4a4d-b6ca-5801a5a3af91
Acceleration
12308427-b97e-437d-bd1c-aee97865b6ec
Ускорение вращения (шагов/секунду^2)
e0c65a93-e82f-4d23-a7a7-679313d04991
c4e4c49d-0b43-4310-82ce-026db0767636
Установка параметров шагового двигателя
Step
Пин управления шагами контроллера
66f1483d-3159-450f-8e82-e654741e6c57
8bc42495-0960-4300-adb7-22efc1573ceb
Dir
Пин направления вращения контроллера
c31d485e-f907-4651-bd19-51f5b0a023b8
72abb887-5e2a-4587-aebd-f3908812b2a9
If (En) {
Stepper1.setMaxSpeed(MaxSpeed);
Stepper1.setAcceleration(Acceleration);
}
83
1 - режим "external driver" (A4988)
Stepper1
(1, Step, Dir);
AccelStepper
EnSteps
Speed
Acceleration
ШагДвиг
En
Скорость
Ускорение
Шагов
4b139470-65a1-49a3-8a95-6418d90824c2
Количество шагов, которые должен сделать двигатель
011babd7-655e-464f-b4be-4f06bf7e3d31
Готов
f75858a5-7f06-4bf0-9caa-3515dd3118a4
Двигатель закончил движение
d1e9f08d-ba11-403b-8751-573ef2a3a8cb
198f8292-fe38-4914-8ded-a59a71b45bbe
Управление шаговым двигателем через контроллер А4988
If (En) {
SetStepperMaxSpeed(Скорость);
SetStepperAcceleration(Ускорение);
StepperMove(Шагов);
}
Готов = Stepper.distanceToGo() == 0;
Stepper.run();
148
#include
<AccelStepper.h>
1 - режим "external driver" (A4988)
Stepper
(1, Step, Dir);
AccelStepper
curMaxSpeed
= 0;
int
curAcceleration
= 0;
int
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
87
void
SetStepperMaxSpeed
int
MaxSpeed
if (curAcceleration != Acceleration) {
Stepper.setAcceleration(Acceleration);
curAcceleration = Acceleration;
}
111
void
SetStepperAcceleration
int
Acceleration
Stepper.move(Distance);
23
void
StepperMove
int
Distance
Steps
CCW
1749a012-0c84-41fa-bf04-5a19d56a9907
По часовой стрелке
385bd673-ed11-4ff5-b385-63a75de09b57
Ready
Позиция
3e95bd51-7ae3-449f-9b9d-986ce8be7e53
Текущая позиция двигателя
0d87726d-d3cb-406f-b42d-bc70bcf6c19c
0681950a-4e83-4f02-b52f-192689d207f9
If (En) {
SetStepperMaxSpeed(Скорость);
SetStepperAcceleration(Ускорение);
StepperMove(Шагов);
}
Готов = !Stepper.run();
Позиция = Stepper.currentPosition();
157
Position
0eeb9b7f-900c-46d1-bb27-99aec13d1572
if (En) {
SetStepperMaxSpeed(Speed);
SetStepperAcceleration(Acceleration);
StepperMove(Steps*(CCW ? 1 : -1));
}
Ready = !Stepper.run();
Position = Stepper.currentPosition();
173
Stepper.move(Distance);
24
SetZeroPosition
60c5b2c1-55c8-41ea-a856-60fc36f95afe
Установка начальной позиции в 0. Использовать через RTrig
b8593427-7917-4c17-a926-7694d939e155
AbsSteps
25f628bb-19fc-47b3-a5c9-e3b95ca997d8
Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последенй позиции
98054e13-9c74-4d04-bede-871f2478e134
8e86d344-9473-4f19-8548-4591a220e880
Управление шаговым двигателем через контроллер А4988 mod
Блог ШагДвиг для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h
Входы:
FindEndSwitch - При true постоянно шагаем для поиска концевика по CCW, имеет больший приоритет перед EnSteps
SpeedEndSwitch - Скорость ШД для поиска концевика
EnSteps - при true начинаем шагать
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения
CCW - true крутить по часовой, иначе против
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
AbsSteps - Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последенй позиции
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
769
if (FindEndSwitch) {Stepper.setSpeed(SpeedEndSwitch*(CCW ? -1 : 1)); Stepper.runSpeed()}
else{
if (EnSteps) {
SetStepperMaxSpeed(Speed);
SetStepperAcceleration(Acceleration);
if (AbsSteps) {StepperMoveA(Steps*(CCW ? -1 : 1));}
else {StepperMove(Steps*(CCW ? -1 : 1));}
}
Ready = !Stepper.run();
Position = Stepper.currentPosition();
if (SetZeroPosition) {Stepper.setCurrentPosition(0);}
}
389
Stepper.move(Distance);
void
StepperMove
long
Distance
Stepper.moveTo(AStep);
22
void
StepperMoveA
long
AStep
220@40 corner: 240@60
0@60
20@60 corner: 188.0d@80
0@60 corner: 208.0d@80
24@74.5d
0@70
208.0d@70
188.0d@70
208.0d@70 corner: 208.0d@70
SpeedContinuous01
220@70
240@70
220@60 corner: 240@80
10@80
30@80 corner: 177.0d@100
10@80 corner: 197.0d@100
34@95.0d
10@90
197.0d@90
177.0d@90
197.0d@90 corner: 197.0d@90
SetZeroPosition01
220@90
240@90
220@80 corner: 240@100
60@100
80@100 corner: 171.0d@120
60@100 corner: 191.0d@120
84@114.0d
60@110
191.0d@110
171.0d@110
191.0d@110 corner: 191.0d@110
EnSteps01
220@110
240@110
на переднем фронте начинаем шагать, использовать через RTrig
220@100 corner: 240@120
MaxSpeed01
2000
220@130
240@130
194.0d@133.5d
220@120 corner: 240@140
Acceleration01
800
220@150
240@150
200.0d@153.5d
220@140 corner: 240@160
120@160
140@160 corner: 174.0d@180
120@160 corner: 194.0d@180
144@173.5d
120@170
194.0d@170
26.0d
Шаги
174.0d@170
194.0d@170 corner: 194.0d@170
Steps01
220@170
240@170
220@160 corner: 240@180
220@180 corner: 240@200
19
120@200
140@200 corner: 195.0d@220
120@200 corner: 215.0d@220
144@213.5d
120@210
215.0d@210
Абс.шаги
16
195.0d@210
215.0d@210 corner: 215.0d@210
AbsSteps01
220@210
240@210
220@200 corner: 240@220
StopAccel01
220@230
240@230
ШагДвиг_mod_INT_v2
Continuous
SpeedContinuous
MaxSpeed
Против часовой стрелки
StopAccel
feb8597c-6c86-4cf8-a3f6-33b79fea3e86
Остановка с использованием текущей скорости и ускорения
e63ef32a-1278-4528-be56-9a9bd875735c
a3ce2693-d1c9-40a7-a191-f8250fdb2d78
ШагДвиг_mod (step/dir) INT
Блог ШагДвиг для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Входы:
Continuous - При true постоянно шагаем, имеет больший приоритет перед EnSteps
SpeedContinuous - Скорость ШД для "постоянно шагаем"
Эти два входа можно использовать для поиска концевика и просто чтобы покрутить двигателем, но без ускорений
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
EnSteps - при переднем фронте начинаем шагать. Использовать через RTrig
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения (hint: можно и отрицательные)
CCW - true крутить против часовой, иначе по
AbsSteps - Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последеней позиции
StopAccel - Остановка с использованием текущей скорости и ускорения
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
1063
period
Период прерывания, мкс, Менять Оторожно
41695f6c-ad2c-4843-8dc1-d29c1575da1b
761f7340-3f25-42dd-a366-852384a4cbf5
if (SetZeroPosition) {Stepper.setCurrentPosition(0);}
if (Continuous) {
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
if (curSpeed != SpeedContinuous) {
Stepper.setSpeed(SpeedContinuous*(CCW ? -1 : 1));
curSpeed = SpeedContinuous;
}}
else{
if (EnSteps) {
noInterrupts();
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
if (curAcceleration != Acceleration) {
Stepper.setAcceleration(Acceleration);
curAcceleration = Acceleration;
}
if (AbsSteps) {Stepper.moveTo(Steps*(CCW ? -1 : 1));}
else {Stepper.move(Steps*(CCW ? -1 : 1));}
interrupts();
}
if (StopAccel) {Stepper.stop;}
}
Position = Stepper.currentPosition();
703
Timer1.initialize( period ); // инициализация таймера 1,
Timer1.attachInterrupt ( timerInterrupt, period ); // задаем обработчик прерываний
Stepper.setMinPulseWidth(lengthPulse);
181
#include
<TimerOne.h>
#include
<AccelStepper.h>
Длительность испульса, вставлять больше 100 крайне не рекомендуется
#define
lengthPulse
10
1 - режим "external driver" (A4988)
Stepper
(1, Step, Dir);
AccelStepper
curSpeed
= 0;
int
curMaxSpeed
= 0;
int
curAcceleration
= 0;
int
if (Continuous) {Ready = Stepper.runSpeed();}
else Ready = !Stepper.run();
75
void
timerInterrupt
220@220 corner: 240@240
470@200
490@200 corner: 526.0d@220
470@200 corner: 546.0d@220
494@213.5d
470@210
526.0d@210
546.0d@210
28.0d
Готов
490@210
416.0d@210 corner: 416.0d@210
Ready01
42.0d
396.0d@210
416.0d@210
396.0d@200 corner: 416.0d@220
18
430@220
450@220 corner: 477.0d@240
430@220 corner: 497.0d@240
454@233.5d
430@230
477.0d@230
497.0d@230
19.0d
Pos
450@230
416.0d@230 corner: 416.0d@230
Position01
50.0d
396.0d@230
416.0d@230
396.0d@220 corner: 416.0d@240
220@190
ШД1_v1.1
CCW01
66c390af-6e1c-44f5-b7a2-af2f9da1ef6e
ШД1_v1.1
Блок ШД1 для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Входы:
Continuous - При true постоянно шагаем, имеет больший приоритет перед EnSteps
SpeedContinuous - Скорость ШД для "постоянно шагаем"
Эти два входа можно использовать для поиска концевика и просто чтобы покрутить двигателем, но без ускорений
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
EnSteps - при переднем фронте начинаем шагать. Использовать через RTrig
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения (hint: можно и отрицательные)
CCW - true крутить против часовой, иначе по
AbsSteps - Если true то шагаем по абсолютным координатам от нулевой позиции, иначе идем относительно последней позиции
StopAccel - Остановка с использованием текущей скорости и ускорения
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
1059
Step01
Dir01
if (SetZeroPosition01) {Stepper01.setCurrentPosition(0); curSpeed01=0; }
if (Continuous01) {
if (curMaxSpeed01 != MaxSpeed01) {
Stepper01.setMaxSpeed(MaxSpeed01);
curMaxSpeed01 = MaxSpeed01;}
if (curSpeed01 != SpeedContinuous01) {
Stepper01.setSpeed(SpeedContinuous01*(CCW01 ? -1 : 1));
curSpeed01 = SpeedContinuous01;}
}
else{
if (EnSteps01) {
EnSteps01temp = true;
if (curMaxSpeed01 != MaxSpeed01) {
Stepper01.setMaxSpeed(MaxSpeed01);
curMaxSpeed01 = MaxSpeed01;}
if (curAcceleration01 != Acceleration01) {
Stepper01.setAcceleration(Acceleration01);
curAcceleration01 = Acceleration01;}
if (AbsSteps01) {Stepper01.moveTo(Steps01*(CCW01 ? -1 : 1));}
else {Stepper01.move(Steps01*(CCW01 ? -1 : 1));}
}
if (StopAccel01) {Stepper01.stop();}
}
Position01 = Stepper01.currentPosition();
801
Stepper01.setMinPulseWidth(lengthPulse);
40
1 - режим "external driver" (A4988)
Stepper01
(1, Step01, Dir01);
AccelStepper
curSpeed01
= 0;
int
curMaxSpeed01
= 0;
int
curAcceleration01
= 0;
int
EnSteps01temp
= false;
bool
156.0d
240@190
193.0d@190 corner: 193.0d@190
173.0d@190
193.0d@190
321.0d
Выполняем заданное количество программ
20@160
40@160 corner: 76.0d@180
20@160 corner: 96.0d@180
44@173.5d
20@170
140@140
160@140 corner: 200@200
140@140 corner: 220@200
168.5d@153.5d
140@170
20@180
40@180 corner: 104.0d@200
20@180 corner: 124.0d@200
44@194.5d
20@190
124.0d@190
104.0d@190
124.0d@190 corner: 124.0d@190
140@190
160@190
230@160
250@160 corner: 290@200
230@160 corner: 310@200
256.5d@174.5d
230@190
380@160
400@160 corner: 480@240
380@160 corner: 500@240
429.0d@173.5d
380@190
250@230
270@230 corner: 330@290
250@230 corner: 350@290
284.5d@244.0d
20@250
40@250 corner: 202.0d@270
20@250 corner: 222.0d@270
44@264.5d
20@260
222.0d@260
202.0d@260
222.0d@260 corner: 222.0d@260
I1
250@260
270@260
I2
250@280
270@280
244.0d@283.5d
350@280
Q
330@280
350@210 corner: 350@280
Max
380@210
400@210
R
380@230
400@230
520@180
540@180 corner: 604.0d@220
520@180 corner: 624.0d@220
544@204.5d
520@190
540@190
496.0d@193.5d
520@210
540@210
500@210 corner: 500@210
>L
14.0d
480@210
500@210
520@220
540@220 corner: 626.0d@240
520@220 corner: 646.0d@240
544@234.5d
520@230
626.0d@230
646.0d@230
540@230
500@230 corner: 500@230
V
480@230
500@230
up
C
400@190
440@40
460@40 corner: 500@100
440@40 corner: 520@100
468.5d@53.5d
340@20
360@20 corner: 420@80
340@20 corner: 440@80
371.5d@34.0d
70@40
90@40 corner: 176.0d@60
70@40 corner: 196.0d@60
94@54.5d
70@50
196.0d@50
176.0d@50
196.0d@50 corner: 196.0d@50
I1
340@50
360@50
70@60
90@60 corner: 252.0d@80
70@60 corner: 272.0d@80
94@74.5d
70@70
272.0d@70
252.0d@70
272.0d@70 corner: 272.0d@70
I2
340@70
360@70
440@70
<=
420@70
440@70 corner: 440@70
440@70
460@70
440@90
520@80
540@80 corner: 631.0d@100
520@80 corner: 651.0d@100
544@94.0d
520@90
631.0d@90
651.0d@90
540@90
520@90 corner: 520@90
500@90
520@90
460@90
310@90 corner: 310@190
290@190
310@190
I
250@190
220@190 corner: 220@190
200@190
220@190
160@170
96.0d@170 corner: 96.0d@170
76.0d@170
96.0d@170
371.0d
Выполнение программы 1
==
360@50
380@50 corner: 414.0d@90
360@50 corner: 434.0d@90
384@73.5d
360@60
380@60
340.0d@63.5d
230@50
250@50 corner: 290@90
230@50 corner: 310@90
256.5d@64.5d
25
140@30
160@30 corner: 220@90
140@30 corner: 240@90
171.5d@44.0d
26
0@50
20@50 corner: 106.0d@70
0@50 corner: 126.0d@70
24@64.5d
0@60
20@60
0@50 corner: 20@70
106.0d@50 corner: 126.0d@70
126.0d@60
106.0d@60
126.0d@60 corner: 126.0d@60
I1
140@60
160@60
I2
140@80
160@80
134.0d@83.5d
240@80
==
220@80
230@80 corner: 230@80
230@80
250@80
310@80
290@80
360@110
380@110 corner: 413.0d@150
360@110 corner: 433.0d@150
384@133.5d
360@120
380@120
336.0d@123.5d
360@110 corner: 380@130
360@130 corner: 380@150
360@140
380@140
310@80 corner: 310@140
360@80
380@80
231.0d
Выполнение программы 2
360@50
380@50 corner: 414.0d@90
360@50 corner: 434.0d@90
384@73.5d
360@60
380@60
340.0d@63.5d
230@50
250@50 corner: 290@90
230@50 corner: 310@90
256.5d@64.5d
140@30
160@30 corner: 220@90
140@30 corner: 240@90
171.5d@44.0d
0@50
20@50 corner: 106.0d@70
0@50 corner: 126.0d@70
24@64.5d
0@60
126.0d@60
106.0d@60
126.0d@60 corner: 126.0d@60
140@60
160@60
140@80
160@80
132.0d@83.5d
240@80
220@80
230@80 corner: 230@80
230@80
250@80
310@80
290@80
360@110
380@110 corner: 413.0d@150
360@110 corner: 433.0d@150
384@133.5d
360@120
380@120
340.0d@123.5d
360@140
380@140
310@80 corner: 310@140
360@80
380@80
Программа 3 Пропорциональное управление
160@0
180@0 corner: 240@60
160@0 corner: 260@60
191.5d@14.0d
0@20
20@20 corner: 106.0d@40
0@20 corner: 126.0d@40
24@34.5d
0@30
126.0d@30
106.0d@30
126.0d@30 corner: 126.0d@30
I1
160@30
180@30
I2
160@50
180@50
152.0d@53.5d
340@10
360@10 corner: 415.0d@30
340@10 corner: 435.0d@30
364@23.5d
340@20
415.0d@20
435.0d@20
360@20
600@140
620@140 corner: 654.0d@180
600@140 corner: 674.0d@180
624@163.5d
420@210
440@210 corner: 500@250
420@210 corner: 520@250
452.5d@223.5d
280@190
300@190 corner: 389.0d@250
280@190 corner: 409.0d@250
305.0d@204.5d
en
280@220
300@220
Filtr_median_10
period
d96c2961-fff2-4449-8388-5999d963410b
период работы в милисекундах
84b3a024-284e-43f6-81ff-41fd4fff8cb3
in
78b943eb-acec-4bd9-934f-45bcb7c005c7
82d19dd8-844c-4667-b63f-c950b7900a44
out
0d7b91be-0457-4d0f-a8e8-762c61bcfe27
5bb75863-99a4-4647-abce-808582004e46
ok
f7f451ac-00fb-4616-a2df-cb7e9dbf6c27
ab8af86d-9a8f-4730-9c14-09d1d5a292cf
cadbd814-f8f8-47f2-ba47-b4a23888ab88
Filtr_median_10
// Filtr_median_10
time = millis() - time_old;
ok = false;
if (time>period)
{
time_old = millis();
N = 0;
Loop_1:
if (N >= 10) {GOTO Post_loop;}
out = AdcF[N];
M = 0; S1 = 0; S2 = 0;
Loop_2:
if (out < AdcF[M])
{
S1++;
if (S1 > 5) {N++; GOTO Loop_1;}
}
if (out > AdcF[M])
{
S2++;
if (S2 > 5) {N++; GOTO Loop_1;}
}
M++;
if (M < 10) {GOTO Loop_2;}
Post_loop:
AdcF[0] = AdcF[1];
AdcF[1] = AdcF[2];
AdcF[2] = AdcF[3];
AdcF[3] = AdcF[4];
AdcF[4] = AdcF[5];
AdcF[5] = AdcF[6];
AdcF[6] = AdcF[7];
AdcF[7] = AdcF[8];
AdcF[8] = AdcF[9];
ok = true;
}
611
time
;
unsigned long
time_old
;
unsigned long
N
;
byte
M
;
byte
S1
;
byte
S2
;
byte
AdcF
[10];
integer
13f96943-4e94-4927-8910-6f61c9e59167
17fa1b6e-f4f7-4699-92a0-48e7b694a80f
time
;
unsigned long
time_old
;
unsigned long
N
;
byte
M
;
byte
S1
;
byte
S2
;
byte
AdcF
[10];
integer
разрешение работы
30@230
50@230 corner: 128.0d@250
30@230 corner: 148.0d@250
54@244.5d
30@240
148.0d@240
128.0d@240
148.0d@240 corner: 148.0d@240
280@240
300@240
409.0d@240
Filtr_median_10
8211eec7-9298-4b1e-936a-1dc34de300c6
Filtr_median_10
Медианный фильтр на 10.
Работает при en=1.
Принцип работы:
Есть ряд значений (11,10,12,100,500,30,10,9,10,12,11), которые запомнил фильтр.
Фильтр раскладывает их по возрастанию (9,10,10,10,11,11,12,12,30,100,500) и на выход выдает средний член этого ряда (11).
Алгоритм и описание отсюда: http://electronix.ru/forum/index.php?s=&showtopic=114436&view=findpost&p=1180687
Автор: Boroda
384
// Filtr_median_10
if (en)
{
array[9] = in;
for (N=0; N<10; N++) // 0 до 9
{
out = array[N]; S1 = 0; S2 = 0;
for (M=0; M<10; M++) // 0 до 9
{
if (out < array[M]) { S1++; if (S1>5) {break;} }
if (out > array[M]) { S2++; if (S2>5) {break;} }
}
if (M>=10) {break;}
}
for (N=0; N<9; N++) {array[N] = array[(N+1)];}
}
335
N
;
byte
M
;
byte
S1
;
byte
S2
;
byte
array
[10];
int
89.0d
17.0d
389.0d@240
409.0d@240 corner: 409.0d@240
I
420@240
440@240
520@240
1023
500@240
520@150 corner: 520@240
600@150
620@150
600@140 corner: 620@160
600@160 corner: 620@180
600@170
620@170
340@30
360@30 corner: 451.0d@70
340@30 corner: 471.0d@70
364@54.0d
340@40
360@40
320.0d@43.5d
340@60
360@60
340@70
360@70 corner: 393.0d@110
340@70 corner: 413.0d@110
364@93.5d
340@80
360@80
316.0d@83.5d
340@100
360@100
260@20 corner: 260@220
240@50
260@50
==
331.0d
110@10
130@10 corner: 185.0d@50
110@10 corner: 205.0d@50
135.0d@24.5d
lcd.begin
lcdBeginWire
addr
0cbb0d56-c71d-4dd8-9c09-644a77d635a2
Адрес LCD десятичный
a6fd035c-9ac8-49a9-8e0b-c2f9672ea72e
lcd.beginWire
event
6eeee19a-df7c-4d58-9d60-3ef7bd79e40f
8408774b-7bee-43be-82ac-cd66560cc1f5
4a79b299-60c3-4f5c-9411-7da77ce04bec
lcd.beginWire - управление Lcd на шине lcd
63,20,4,0
ТИП ИНТЕРФЕЙСА
'P' - через пины (обмен тетрадами), 'I' - через i2c, 'S' - через SPI
7b365250-e395-41ca-982d-551950d1a803
I
bcefedc2-c824-442f-9273-ef2630fbb8c6
НОМЕР ДИСПЛЕЯ
b8e93434-17e1-4a0a-82fe-b26008176ed8
dc856e5e-59ec-422c-8b06-5e21d9e2a8c5
КОЛ_ВО КОЛОНОК
88ed9508-c0ef-4a86-ae9b-7c0394ed2cd0
6e55c2ce-ccf4-49f1-a074-f4e789e25b14
КОЛ_ВО СТРОК
2c5ba6b2-c5fd-4666-87ee-93c5d923d1a8
aa13b04f-b642-4e0b-aa15-a2a5c0c7cded
ПЕРИОД_HOT
60
в секундах
5bf1a7a9-149a-4330-a0b9-082919724353
в мс
2424b97c-ed39-4963-8a81-1155e5facb02
РЕЖИМ_RT
Y - режим реального времени, N - без режима реального времени
3707c0ac-91b4-4f8e-b99d-a00031ca7b4d
Y
=1 - режим реального времени
f2bafcd5-9f35-41ac-b61f-8ac8809b33d7
ДЕЛИТЕЛЬ
255
246363f4-7cef-4e21-ab35-54f91be1042c
063ad25d-12ef-4066-8b54-e87c3dffd761
АДРЕС_ДЕСЯТИЧНЫЙ
63
b3b29e7f-6ba4-409c-8dd3-c7984da02bff
45b1c849-ea87-4cfb-bec8-fc0affe6a1dc
//---------------------- БЛОК ИНИЦИАЛИЗАЦИИ ДИСПЛЕЯ ------------------
//--Контроль----> номер дисплея, deviceID, кол-во колонок, кол-во строк, период Hot в сек, режим RT ('T','N'),делитель (0-255), адрес на шине i2c(десятичный)
if(!z.init) {RT_HW_Lcd_hd44780.setBeginWire( НОМЕР ДИСПЛЕЯ ,z, КОЛ_ВО СТРОК , ПЕРИОД_HOT , РЕЖИМ_RT , ДЕЛИТЕЛЬ , АДРЕС_ДЕСЯТИЧНЫЙ );} RT_HW_Lcd_hd44780.printBegin(zLcd);
event = RT_HW_Lcd_hd44780.dividerTask(zLcd);
//---------------------------------------------------------------------------------------------------
/*
if(EN) {
if( !z.init ) {
RT_HW_Wire.begin(); //--Настройка i2c выполнится только если она ранее не выполнялась
RT_HW_Lcd_hd44780.setDeviceID( НОМЕР ДИСПЛЕЯ , z, 'I', КОЛ_ВО КОЛОНОК , КОЛ_ВО СТРОК , АДРЕС_ДЕСЯТИЧНЫЙ );
RT_HW_Lcd_hd44780.setPeriodHot(z, (ПЕРИОД_HOT) *1000UL);
z.rt= РЕЖИМ_RT;
} ;
if( RT_HW_Lcd_hd44780.eventMillis (z.timePeriodHot, z. periodHot)) {z.run=true;} //--Установка "run" для повторной (для надежности) инициализации
RT_HW_Lcd_hd44780.begin (z); // --Инициализация по флагу z.run
} //--------------------------------------------------------------------------------------------------
*/
1243
---------------------- БЛОК ИНИЦИАЛИЗАЦИИ ДИСПЛЕЯ ------------------
#include
"RT_HW_LCD_HD44780.h"
#include
"RT_HW_Wire.h"
z
;
RT_HW_LCD_HD44780_DeviceID
---------------------------------------------------------------------------------------------------
control
8dac3c4f-3dde-4864-bfa1-31bd3e2922d9
lcdBeginWire - управление Lcd на шине lcd
Y
//---------------------- БЛОК ИНИЦИАЛИЗАЦИИ ДИСПЛЕЯ ------------------
//--Контроль----> номер дисплея, deviceID, кол-во колонок, кол-во строк, период Hot в сек, режим RT ('T','N'),делитель (0-255), адрес на шине i2c(десятичный)
if(!z.init) {
RT_HW_Wire.begin(); //--Настройка i2c выполнится только если она ранее не выполнялась
RT_HW_Lcd_hd44780.setBeginWire( НОМЕР ДИСПЛЕЯ ,z, КОЛ_ВО КОЛОНОК, КОЛ_ВО СТРОК , ПЕРИОД_HOT , РЕЖИМ_RT , ДЕЛИТЕЛЬ , addr );}
RT_HW_Lcd_hd44780.printBegin(z);
control = RT_HW_Lcd_hd44780.dividerTask(z);
//---------------------------------------------------------------------------------------------------
652
da9964db-d3df-4c4c-8a4c-de5ba4fb602b
1.lcd.begin - управление Lcd на шине i2c
БЛОК УПРАВЛЕНИЯ ДИСПЛЕЕМ ТИПА LCD HD-44780
Блок осуществляет инициализацию и контроля LCD.
Допускается "горячее" подключение или "переподключение" во время работы.
Непосредственный вывод выполняется через дополнительные блоки.
Вход: addr - адрес (десятичный) на шине i2c;
Параметры:
НОМЕР ДИСПЛЕЯ - от 1 до 15. Предусмотрена одновременная работа многих дисплеев.
КОЛ_ВО КОЛОНОК - кол-во колонок в дисплее;
КОЛ-ВО СТРОК - кол-во строк в дисплее;
------------------------------------------------------------------------------------------
ecoins@mail.ru 01.10.19
568
Номер дисплея от 1 до 8
Ко-во колонок - от 8 до 20
Кол-во строк от 1 до 4
//====== БЛОК ИНИЦИАЛИЗАЦИИ И КОНТРОЛЯ LCD. Параметры ->lcd,id,col,row,addr;
switch(z.dir){
default:
case 1: break;
case 0: Wire.begin(); RT_HW_Lcd_hd44780.device_setID( НОМЕР ДИСПЛЕЯ ,z, КОЛ_ВО КОЛОНОК , КОЛ_ВО СТРОК , addr ); break;
case 2: RT_HW_Lcd_hd44780.begin(z,0);
break;
}
//---------------------------------------------------------------------------------------------------
410
#include
"RT_HW_LCD_HD44780.h"
z
;
RT_HW_LCD_HD44780_DEVICE
39
110@40
130@40
96.0d@43.5d
55.0d
320@60
340@60 corner: 381.0d@120
320@60 corner: 401.0d@120
345.0d@73.5d
EN
320@90
334@90
lcdInt16
4b6f0df5-fc72-4965-8313-6eba673c73dc
0ff214d2-ca55-4c97-b354-bcd6cc732d38
lcd.Blink
RT_LcdBlink
RT_Lcd_Float
EN
7c0e692e-9eb8-44f8-9f84-b96ed7170192
6a77b665-a1c7-4b16-bb38-c7d79f9da138
RT_Lcd_ConfigFloat
lcd
8723a50c-891e-4814-8372-a2ce9b25b710
3081f5e3-33e0-45d3-b778-5dc536834597
col
92b55601-0684-4671-8daa-a214adabccbf
c0294930-507c-4cdf-9436-aea514678fac
row
bb4ff648-82ab-4ee3-8086-0d613a8d0f8b
3a6460fd-219a-4894-95e6-c5831a0f6873
len
237e26a2-5424-4d7b-8d06-9135d7aa3893
963b23d9-84ec-4761-9a50-f15dbeaff6f2
point
e48ccea7-0b94-4d17-96b5-16a0d993b24d
22536794-8451-4a36-aa00-a30dae39a332
alig
9b664619-0b4d-4f5b-ba7d-4106e7290266
02d334f7-609c-4299-bc96-505f1d30cf91
val
4cf2bd25-7f1b-475e-b21f-eeb5e0a4dc86
ff456029-2219-4c02-a4ec-2a96a19a3f55
a41d65d8-a50e-4ce1-a794-fe15c5277376
RT_LiquidCrystal_ID_FLOAT id0_DHT_t1;
642afabf-054e-4d43-b15f-9f14e901382d
RT_Lcd_Float
if (! start ) { start=true;
//RT_Lcd.configFloat (ID, col, row, lcd, len, point, alig);
ID.lcd=lcd; ID.col=col; ID.row=row; ID.init=true; ID.fresh=true;
ID.alig= RT_Lcd.convertAligFromChar(alig);
ID.step=0; ID.val= val; ID.len=len; ID.point=point;
}
273
ID
;
RT_LiquidCrystal_ID_FLOAT
start
=0;
bool
RUN
b98019d0-2d49-4b14-b781-59d636b042d6
4e95a6e1-d737-488f-8c7a-648b70504702
sign1
sign2
RT_LcdBlink
fresh
dd38d6b1-6775-4e79-8aff-5658d5a3ea95
b3421ed8-173d-4179-b761-cd24c10ddd68
40ae13cc-8b5c-467f-a7f7-4ecde19525cb
RT_LcdBlink - вывод числа
if (! INIT) {
ID.lcd=lcd; ID.col=col; ID.row=row; ID.init=true; ID.fresh=true; ID.alig= RT_Lcd.convertAligFromChar(alig);
ID.step=0; ID.val= val; ID.len=len; ID.point=point;
}
RT_Lcd.PrintBlink (step, fresh, blink, 0, 0,'<', '>', 0);
244
INIT
=0;
bool
step
=0;
uint8_t
fresh
=0;
uint8_t
blink
=0;
uint8_t
period
9c17e633-c7aa-400f-bbc8-f44494450ac8
RT_LcdBlink - мерцание символом
if (EN) if (RT_HW_LCD_periodMillis( timeStart,period)) {fresh=1;};
RT_Lcd.PrintBlink (step, fresh, blink, col, row, sign1, sign2, lcd);
138
step
=0;
uint8_t
fresh
=0;
uint8_t
blink
=0;
uint8_t
timeStart
;
uint32_t
lcd
9e1a4a7d-b5c7-4c44-b056-56667b38c7de
6b033be2-f9f4-4633-8611-693f36e75608
col
49ec0170-133f-4257-96d6-a61968bca22f
290a6d84-43de-45f8-8e7d-bb0f6b36087d
row
20444a5e-d87b-43a3-aea3-a9bdc4d0800d
50467ca5-9ff9-4566-b25d-e7fbf79a17d2
sym
ca5f6d10-f2b6-49dd-8ad7-df3ac8ab556d
b437fbaf-cde6-4241-af65-b065a6c169be
f89aab16-c014-4c30-b521-7dde30c971ba
lcd.Blink -мерцание символом
Символ 2
af1aba93-8e7a-41cc-8b2f-c0f6e86a18d6
5de6d7a1-422b-42b6-b984-190c9c3b7fd0
//-----------Инициализация блока мерцания символом
if( ! x.init)
{RT_HW_Lcd_hd44780.setDataID (x, col , row );
sign1=Symbol_1;
sign2=Symbol_2;
fresh=1;
}
//---------Вывод мерцающего символа
if(RUN) x.fresh=1;
RT_HW_Lcd_hd44780.printBlink (*RT_HW_Lcd_hd44780.prt[lcd], x, sym, Символ 2 );
310
#include
"RT_HW_Main.h"
#include
<Wire.h>
#include
"RT_LiquidCrystal.h"
x
;
RT_HW_LCD_HD44780_DataID
val
1e52895b-f6e6-4b83-a724-0f27ef188c62
lcdInt16 -вывод числа (DEC,HEX,BIN)
НОМЕР ДИСПЛЕЯ
c0416ecc-2064-4ddb-9643-3d8736deb305
2138de8d-417a-4f1f-945c-325647f93101
КОЛОНКА
963bdf27-37ac-42d2-9f1c-05e2307c36b3
fd1d2572-ccd2-4600-a268-aa78307cfc7c
СТРОКА
1e471073-2d61-4ed9-b148-a78123f47933
e8d5690a-cf39-4290-b2fb-31906966e2f3
ДЛИНА
05b66ac6-8596-467a-ad49-fd10eb66e7b6
63ca9829-2306-4e08-b7e6-00a2d3c66737
ПЕРИОД
250
335a9307-0bbb-4a1b-b2a6-f86b817935b4
f79b131f-34e2-445a-b46a-6103b6a19a78
ВЫРАВНИВАНИЕ
N,L,C,R
2d243ce7-f539-4e7e-9acc-4910c65c4ba6
L
L
f4a74ded-d889-4c67-82e3-2b881131ed41
ФОРМАТ ВЫВОДА
'D' - DEC, 'H' - HEX, 'B' - BIN
a4fd2125-7c2a-4091-b56b-a5d0ec64f373
D
D
0d4ce472-e745-4e2c-965b-9066f594725f
ЗАГОЛОВОК
@
30963709-7f28-42c3-a146-1b025c277038
e6e3d3d0-77ec-4d19-a30c-3a1eaa682b3f
//---------------------- ВЫВОД INT16 В LCD ---------------------------------------------------
if(EN){
if(RT_HW_Lcd_hd44780.getDividerEvent(id)) { if( !id.init) {RT_HW_Lcd_hd44780.setInt16 (НОМЕР ДИСПЛЕЯ, id,КОЛОНКА,СТРОКА,ПЕРИОД, ДЛИНА ,ВЫРАВНИВАНИЕ,ФОРМАТ ВЫВОДА );} RT_HW_Lcd_hd44780.printInt16(id,val);}
}
//-----------------------------------------------------------------------------------------------------------
423
#include
"RT_HW_LCD_HD44780.h"
id
;
RT_HW_LCD_HD44780_DataID
char x= ФОРМАТ ВЫВОДА;
switch(x) {
default:
case 'N': id.s=String(id.val); break;
case 'D': id.s=String(id.val,DEC); break;
case 'H': id.s=String(id.val,HEX); break;
case 'B': id.s=String(id.val,BIN); break;
}
216
void
setPrintData
210@100
230@100 corner: 257.0d@120
210@100 corner: 277.0d@120
234@113.5d
210@110
277.0d@110
257.0d@110
277.0d@110 corner: 277.0d@110
320@110
340@110
lcd.int
673cb915-dc41-47a4-a3da-38119d664b80
4.lcd.int -вывод числа int
//======БЛОК ВЫВОДА INT16 В ДИСПЛЕЙ
Блок выводит в LCD переменную int16. Вывод осуществляется в форматах DEC,HEX,BIN
Вход: EN - разрешение работы. Через этот вход также достигается снижение затрат процессорного времени;
val - переменная в формате int16_t (int)
НОМЕР ДИСПЛЕЯ - обращается к инициализированному блоку RTlcdBegin с таким же номером;
КОЛОНКА - номер колонки;
СТРОКА - номер строки;
ДЛИНА - разрешенная длина выводимого поля. Если =0, выводит до конца строки;
ПЕРИОД - (мс) период изменения символа на дисплее;
ВЫРАВНИВАНИЕ - выравнивание текста в поле: N - без выравнивания, L -влево, С -по центру, R -вправо;
-----------------------------------------
ecoins@mail.ru 12.07.19
711
НОМЕР ДИСПЛЕЯ
c0416ecc-2064-4ddb-9643-3d8736deb305
НОМЕР КОЛОНКИ
963bdf27-37ac-42d2-9f1c-05e2307c36b3
НОМЕР СТРОКИ
1e471073-2d61-4ed9-b148-a78123f47933
ВЫРАВНИВАНИЕ ЗАГОЛОВКА
959f195a-f1dd-4091-af94-fdff2825e244
L
L
41418a96-e0ec-4a78-b084-bc26308c14e7
ДЛИНА ЗАГОЛОВКА
05b66ac6-8596-467a-ad49-fd10eb66e7b6
ТЕКСТ ЗАГОЛОВКА
x=
b7fde13b-b312-4c68-bd85-bc1c367ee3a5
67ea8554-eed9-4903-bddb-1a609d95b46a
ВЫРАВНИВАНИЕ ЗНАЧЕНИЯ
N,L,C,R
2d243ce7-f539-4e7e-9acc-4910c65c4ba6
L
L
ФОРМАТ ВЫВОДА
'D' - DEC, 'H' - HEX, 'B' - BIN
a4fd2125-7c2a-4091-b56b-a5d0ec64f373
D
D
ДЛИНА ЗНАЧЕНИЯ
abc3910a-edf2-4f65-bcaf-aa42d53eef9f
f95d516e-0f48-4ed4-8d57-0cd8dc8f0470
ПЕРИОД В ТИКАХ
250
335a9307-0bbb-4a1b-b2a6-f86b817935b4
//======БЛОК ВЫВОДА INT16 В ДИСПЛЕЙ. Параметры ->lcd,id,col,row,period,aligHead,lenHead,aligVal,lenVal,modeVal
switch(id.dir){default: case 1:break; case 0:if(EN){RT_HW_Lcd_hd44780.setID_int16( НОМЕР ДИСПЛЕЯ ,id, НОМЕР КОЛОНКИ , НОМЕР СТРОКИ , ПЕРИОД В ТИКАХ , ВЫРАВНИВАНИЕ ЗАГОЛОВКА , ДЛИНА ЗАГОЛОВКА , ВЫРАВНИВАНИЕ ЗНАЧЕНИЯ , ДЛИНА ЗНАЧЕНИЯ , ФОРМАТ ВЫВОДА , ТЕКСТ ЗАГОЛОВКА );}break;
case 2:RT_HW_Lcd_hd44780.makeRun_int16(id,EN); RT_HW_Lcd_hd44780.print_int16(id, val );break;};
//-------------------------------------------------------------------------------------------------------------
625
======БЛОК ВЫВОДА INT16 В ДИСПЛЕЙ.
#include
"RT_HW_LCD_HD44780.h"
id
;
RT_HW_LCD_HD44780_DATA_INT16
--------------------------------------------------------------------------------------------------
41.0d
320@130
340@130 corner: 381.0d@190
320@130 corner: 401.0d@190
345.0d@143.5d
320@160
334@160
160@170
180@170 corner: 266.0d@190
160@170 corner: 286.0d@190
184@184.5d
160@180
286.0d@180
266.0d@180
286.0d@180 corner: 286.0d@180
320@180
340@180
L
step=
L
D
320@200
340@200 corner: 381.0d@260
320@200 corner: 401.0d@260
345.0d@213.5d
320@230
334@230
160@240
180@240 corner: 258.0d@260
160@240 corner: 278.0d@260
184@254.5d
160@250
278.0d@250
258.0d@250
278.0d@250 corner: 278.0d@250
320@250
340@250
L
a0=
L
D
341.0d
LED
sck
SPI
13
Сброс
9600
arduinoIDE
212
1024
250747837
Arduino Uno
119858318