рд╣рд╛рд▓ рд╣реА рдореЗрдВ, PlatformIO рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ, PVS-Studio рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВредPlatformIO рдХреНрдпрд╛ рд╣реИ?
PlatformIO рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреВрд▓ рд╣реИред PlatformIO рдХрд╛ рдХреЛрд░ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдЪрд┐рдкреНрд╕ рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорджрд░рдмреЛрд░реНрдб рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рд╕рд╛рдЗрдЯ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдШрдЯрдХреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рд╣рд┐рдд рдХрдИ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИредрдЖрдпрд╛рдд рдкрд░рд┐рдпреЛрдЬрдирд╛
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ ArduPod рд▓реЗ рд╖рдЯреНрдкрдж рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо Arduino рдореЗрдЧрд╛ рдмреЛрд░реНрдб рдкрд░редрдПрдХ рдЙрдкрдпреБрдХреНрдд рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:рдлрд╝реЛрд▓реНрдбрд░ / arduino / AP_Utils / рдЙрджрд╛рд╣рд░рдг / рдореЗрдВ рд╣реЗрдХреНрд╕рд╛рдкреЛрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд╣рдо servo_test.ino рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред Arduino рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, INO рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рд╕рд╣реА .cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ , рд╢реБрд░реБрдЖрдд рдореЗрдВ #include <Arduino.h> рд╣реИрдбрд░ рдЬреЛрдбрд╝реЗрдВ , рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрд╡рд╢реНрдпрдХ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, PlatformIO рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛редIn file included from src\servo_test.cpp:20:0:
src/AP_Utils.h:10:37: fatal error: Adafruit_PWMServoDriver.h:
No such file or directory
*******************************************************************************
* Looking for Adafruit_PWMServoDriver.h dependency? Check our library registry!
*
* CLI> platformio lib search "header:Adafruit_PWMServoDriver.h"
* Web> https:
*
*******************************************************************************
compilation terminated.
рд▓рд┐рдВрдХ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдПрдЧрд╛, рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рд╣реИ:pio lib install "Adafruit PWM Servo Driver Library"
рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдирд╛
рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ platformio.ini рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдбрд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino
check_tool = pvs-studio
check_flags =
pvs-studio:
--analysis-mode=4 ; General analysis mode. Set to 32 for MISRA
--exclude-path=/.pio/libdeps ; Ignore dependency libraries
Check_tool
рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди check_flags рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://docs.platformio.org/en/latest/plus/check-tools/pvs-studio.htmlрдЕрдВрдд рдореЗрдВ, рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреЗрдХ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ, рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрд╡рдпрдВ рд╡рд░реНрддрдорд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИредpio check
рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЬрд╛рдБрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ
рдЗрд╕ рдмрд╛рд░, рд▓реЗрдЦ рдХрд╛ рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдорд┐рдпреЛ рдХреЗ рд╕рд╛рде рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдПрдХреАрдХрд░рдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИ, рди рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдмрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редV519 рдмрд╛рдИрдВ рдФрд░ '-' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ: pow (t, 2) - pow (t, 2)ред AP_Utils.cpp 176pointLeg* AP_Utils::traceLeg(uint8_t leg, float phi, float z,
int resolution, uint8_t shape) {
....
if(shape == ELLIPTIC) {
....
float v = sqrt(pow(phi - legs[leg].phi, 2) + pow(z - legs[leg].z, 2));
float u = sqrt(pow(phi - phi0, 2) + pow(z - z0, 2));
float t = sqrt(pow(phi0 - legs[leg].phi, 2) + pow(z0 - legs[leg].z, 2));
theta = acos((pow(t, 2) - pow(t, 2) - pow(v, 2))/(-2.0*t*u));
....
}
....
}
рджреЛ рд╕рдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдВрддрд░ рдХрд╛ рдЧрдгрд┐рддреАрдп рдЕрд░реНрде рдХреНрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдХреЗрд╡рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдЯреА рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдФрд░ рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредV550 рдПрдХ рд╡рд┐рд╖рдо рд╕рдЯреАрдХ рддреБрд▓рдирд╛: рдорд╛рди! = - 1. рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ: рдлрд╝реИрдмреНрд╕ (рдП - рдмреА)> рдПрдкреНрд╕рд┐рд▓реЙрдиред AP_Utils.cpp 574float AP_Utils::sr04_average(uint8_t trig, uint8_t echo,
int unit, int samples, int time) {
....
float average, pause, value;
....
for(int i=0; i<samples; i++) {
value = sr04(trig, echo, unit);
if(value != -1) {
total += value;
delay(pause);
} else {
i--;
}
}
average = total/samples;
....
return average;
}
рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрд▓рдд рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИред рдмрд┐рдЯреНрд╕ рдХреА рдкрд░рд┐рдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рдЯреАрдХрддрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдЕрдВрддрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рднрд┐рдиреНрдирд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:bool is_equal(double x, double y) {
return std::fabs(x - y) < 0.001f;
}
рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реАрдзреЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдлрд┐рд░ рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЪрд░ рдорд╛рди рдХрд╛ рдорд╛рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╣реАрдВ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ -1ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ AP_Utils :: sr04 рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИ , рдЬреЛ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:float AP_Utils::sr04(uint8_t trig, uint8_t echo, int unit) {
....
float duration, distance;
....
duration = pulseIn(echo, HIGH);
distance = (346.3*duration*0.000001*unit)/2;
if((distance >= 0.02*unit) && (distance <= 4*unit)) {
....
return(distance);
} else {
....
return 0;
}
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рди рдХреБрдЫ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ -1 рдХрд╣реАрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди AP_Utils :: sr04 0 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдПрдореНрдмреЗрдбреЗрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдореЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЛрдИ рдЯреНрд░рд╛рдпрд▓ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ , рдФрд░ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ редрдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдПрд▓реЗрдХреНрд╕реА рдЧреЛрд╡рд░реЛрд╡ред PlatformIO рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди ред