MIRO рдПрдХ рдУрдкрди рдЗрдирдбреЛрд░ рд░реЛрдмреЛрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИред рднрд╛рдЧ 4 - рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдШрдЯрдХ: ARDUINO (AVR)

рдЫрд╡рд┐

рд╣рдо MIRO рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдШрдЯрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдПрд╡реАрдЖрд░ рдХреЗ рддрд╣рдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕рдорд░реНрдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓реЗ рдореЗрдВ, рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдХреБрдЫ рдкреНрд░рдореБрдЦ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛: рднрд╛рдЧ 1 , рднрд╛рдЧ 2 , рднрд╛рдЧ 3 , рднрд╛рдЧ 4 , рднрд╛рдЧ 5

ARDUINO рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░реЛрдмреЛрдЯ рдХреЗ рдПрдХреНрдЯреНрдпреВрдПрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рддрд░реНрдХ AVR рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдордЖрдИрдЖрд░рдУ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рдХрд╛рд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред

рдПрдкреАрдЖрдИ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╡рд┐рдХреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЕрдм рддрдХ, рдХреЗрд╡рд▓ рд░реВрд╕реА рдореЗрдВред рдФрд░ рдЕрдм рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреВрд░реНрдг рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕реЗ рджреАрд░реНрдШрд╡реГрддреНрдд "..." рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдХреЗ, рдХреЗрд╡рд▓ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреЛ рдЗрд╕ рд╕рдордп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

рд╣рдорд╛рд░реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЙрдбрд▓ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдПрдордЖрдИрдЖрд░рдУ рд░реЛрдмреЛрдЯ рдореЗрдВ рдПрдХ рдЪреЗрд╕рд┐рд╕ рдФрд░ рдЬреБрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд░реЛрдмреЛрдЯ рдЪреЗрд╕рд┐рд╕ - рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреЗрд╕рд┐рд╕ рд╣реЛрдЧреА - рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд░реЛрдмреЛрдЯ рдпрд╛ рд░реЛрдмреЛрдЯ рдЬреЛ рдЖрдВрджреЛрд▓рди рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

class Miro : public Robot { public: Miro(byte *PWM_pins, byte *DIR_pins); #if defined(ENCODERS_ON) Miro(byte *PWM_pins, byte *DIR_pins, byte *ENCODER_pins); #endif ~Miro(); ... }; 

рдорд╛рдпрд░реЛ рдХреНрд▓рд╛рд╕ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╡рд░реНрдЧ рд╣реИ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЗ рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рд░реЛрдмреЛрдЯ рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рд░реЛрдмреЛрдЯ рдХреА рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

 class Robot { public: Robot(byte *PWM_pins, byte *DIR_pins); #if defined(ENCODERS_ON) Robot(byte *PWM_pins, byte *DIR_pins, byte *ENCODER_pins); #endif ~Robot(); Chassis chassis; void Sync(); int attachDevice(Device *dev); int dettachDevice(Device *dev); ... protected: Device* _devices[ROBOT_MAX_DEVICES]; byte _device_count; }; 

рдбрд┐рдЬрд╛рдЗрдирд░ рдЪреЗрд╕рд┐рд╕ рдкрд┐рдВрд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк рдФрд░ рд░реЛрдмреЛрдЯ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рдВрдХ () рд╡рд┐рдзрд┐ рдЪреЗрд╕рд┐рд╕ рдФрд░ рд░реЛрдмреЛрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдЖрд░рдУрдбреАрдиреЛ рд╕реНрдХреЗрдЪ рдХреЗ рдореБрдЦреНрдп рд▓реВрдк () рдЪрдХреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред Miro рд╡рд░реНрдЧ рдХреЗ Miro рд╕рд┐рдВрдХ () рддрд░реАрдХреЗ рдЪреЗрд╕рд┐рд╕ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд┐рдВрдХ () рддрд░реАрдХреЗ рдФрд░ рд░реЛрдмреЛрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рд░реЛрдмреЛрдЯ рд╡рд░реНрдЧ рдореЗрдВ рд░реЛрдмреЛрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рднреА рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ (рдПрдХ рдирдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдирд╛рдо рд╕реЗ рдвреВрдВрдвреЗрдВ)ред рд░реЛрдмреЛрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЪреЗрд╕рд┐рд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ - рдЪреЗрд╕рд┐рд╕ред

рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдХреБрдЫ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рдЬреЛ рд░реЛрдмреЛрдЯ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдПрд▓рдИрдбреА, рдПрдХ рд╕реЗрдВрд╕рд░, рдпрд╛ рдПрдХ рдПрдХреНрдЪреБрдПрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЪреЗрд╕рд┐рд╕ (рдЯреНрд░реЙрд▓реА) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ:

 class Device { public: virtual void Sync(); virtual void setParam(byte pnum, byte *pvalue); virtual void getParam(byte pnum, byte *pvalue); virtual byte getPinsCount(); virtual char* getName(); virtual byte getParamCount(); protected: byte *pins[2]; }; 

рд╡рд░реНрдЪреБрдЕрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯрдкрд░рд╛рдо, рдЧреЗрдЯрдкрд░рд╛рдо, рдЧреЗрдЯрдкрд░рд╛рдорд╛рдЙрдВрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрдИ рднреА рд╕рдВрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ: рдПрд▓рдИрдбреА рдХреА рдЪрдордХ, рд╕рд░реНрд╡реЛ рдбреНрд░рд╛рдЗрд╡ рдХреА рд╕реНрдерд┐рддрд┐, рдЖрджрд┐ред рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред GetName, getPinsCount рдореЗрдердб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдирдИ рд╕рд╛рдордирд╛ рдХреА рдЧрдИ рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдХреБрдЫ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЦреНрдп рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред

рдЖрдЗрдП рдЕрдм рд╡рдВрд╢рдЬ рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВред

 class MIROUsonic : virtual public Device { public: void Sync(); void setParam(byte bnum, byte *pvalue); void getParam(byte bnum, byte *pvalue); byte getPinsCount(); char* getName(); byte getParamCount(); void Init(byte trig_pin, byte echo_pin); void On(unsigned int max_dist); void On(); void Off(); int getDist(unsigned int max_dist); unsigned int getMesCount(); private: bool _isOn; unsigned int _mesCount; unsigned int _dist; unsigned int _max_dist; }; 

рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд░реЗрдВрдЬрдлрд╛рдЗрдВрдбрд░ (рдКрдкрд░) рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ, рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рд╣реИрдВ:

  • Init - рдЖрд░рдВрднреАрдХрд░рдг;
  • рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж - рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд╛рд▓реВ рдХрд░реЗрдВ (рд░реЗрдВрдЬрдлрд╛рдЗрдВрдбрд░);
  • рдЧреЗрдЯрдбрд┐рд╕реНрдЯ - рд░реЗрдВрдЬ рдлрд╛рдЗрдВрдбрд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдкреА рдЧрдИ рджреВрд░реА рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • getMesCount - рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреА рдЧрдИ рдорд╛рдк рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • _isOn (TRUE - рдЙрдкрдХрд░рдг рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
  • _mesCount (getMesCount рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрдпрд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ);
  • _max_dist - рдорд╛рдк рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЖрд╡рд╢реНрдпрдХ рджреВрд░реА *;
  • _dist рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдкреА рдЧрдИ рджреВрд░реА рд╣реИред

рдЕрдзрд┐рдХрддрдо рдорд╛рдкрдиреЗ рд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
* рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкрд╛рд╕рдкреЛрд░реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╛рдкрдХ HC-SR04 рджреВрд░реА 4 рдореАрдЯрд░ рддрдХ рдорд╛рдкрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдорд╛рдк рдкрджреНрдзрддрд┐ рдореЗрдВ рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд╕рд┐рдЧреНрдирд▓ рдХреА рд╡рд╛рдкрд╕реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрдХреЛ рд▓рд╛рдЗрди рдкрд░ рд╕рд┐рдЧреНрдирд▓ рдореЗрдВ рдЕрд╡рдзрд┐ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 4 рдореАрдЯрд░ рддрдХ рдХреА рджреВрд░реА рдореЗрдВ рджреВрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд, рд░реЗрдВрдЬ, 1 рдореАрдЯрд░ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд▓рд┐рдП 4 рдЧреБрдирд╛ рдХрдо рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдВрдЬрдлрд╛рдЗрдВрдбрд░ рдЦреБрдж рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдЗрдХреЛ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдЖрд╕рдиреНрди рдорд╛рдк рдХреЗ рдмреАрдЪ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХрд▓ рдорд╛рдк рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдЕрдм рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд┐рддрд┐ _isOn == TRUE (рдЪрд╛рд▓реВ) рд╣реИ, рддреЛ рдорд╛рдк рдЪрдХреНрд░ рд╕реНрд╡рдпрдВ рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдорд╛рдк рдкрд░рд┐рдгрд╛рдо _dist рдлрд╝реАрд▓реНрдб рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдЖрдк рдЧреЗрдЯрдбрд┐рд╕реНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдзрд┐ рддреБрд░рдВрдд _dist рдореЗрдВ рджрд░реНрдЬ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреА, рдХреЛрдИ рдорд╛рдк рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ _isOn == FALSE (рдмрдВрдж), рдорд╛рдк рдЪрдХреНрд░, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╡рд▓ рдЧреЗрдЯрдбрд┐рд╕реНрдЯ рдХреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреБрдЫ рднреА рдорд╛рдкрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкреВрд░реЗ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд░реЛрдмреЛрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд┐рдВрдХ рддрд░реАрдХреЛрдВ рдФрд░ рдЪреЗрд╕рд┐рд╕ рдХреНрд▓рд╛рд╕ (рдЪреЗрд╕рд┐рд╕) рдХреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ, рдХреЗрд╡рд▓ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛ рдПрдордЖрдИрдЖрд░рдУ рдЕрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрд▓рдИрдбреА, рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд░реЗрдВрдЬ рдлрд╛рдЗрдВрдбрд░, рдлреЛрдЯреЛ-рдкреНрд░рддрд┐рд░реЛрдзрдХ рд▓рд╛рдЗрдЯ рд╕реЗрдВрд╕рд░, рд╕рд░реНрд╡реЛ рдбреНрд░рд╛рдЗрд╡, рд▓рд╛рдЗрди рд╕реЗрдВрд╕рд░ред

рд╣рд▓реНрдХреЗ рд╕реЗ рдЪреЗрд╕рд┐рд╕ рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВред рдпрд╣ рд╡рд░реНрдЧ рд░реЛрдмреЛрдЯ рдХреЗ "рдЕрдореВрд░реНрдд рдХрд╛рд░реНрдЯ" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдореВрд╡рд░реНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред

 class Chassis { public: Chassis(byte *PWM_pins, byte *DIR_pins); #if defined(ENCODERS_ON) Chassis(byte *PWM_pins, byte *DIR_pins, byte *ENCODER_pins); #endif ~Chassis(); void Sync(); float getVoltage(); int wheelRotatePWMTime(int *speedPWM, unsigned long time); int wheelRotatePWM(int *speedPWM); bool wheelIsMoving(byte wheel) {return this->_wheel_move[wheel];} byte getWheelCount() { return WHEEL_COUNT; } #if defined(ENCODERS_ON) int wheelRotateAng(float *speed, float *ang, bool en_break); unsigned long wheelGetEncoder(byte wheel); ... #endif //ENCODERS_ON private: float _vbat; //Battery volgage bool _wheel_move[WHEEL_COUNT]; char _wheelDir[WHEEL_COUNT]; byte _wheel_PWM_pins[WHEEL_COUNT]; byte _wheel_DIR_pins[WHEEL_COUNT]; void _init(byte *PWM_pins, byte *DIR_pins); #if defined(ENCODERS_ON) byte _wheel_ENCODER_pins[WHEEL_COUNT]; bool _wheel_sync_move; float _wheelAngSpeed[WHEEL_COUNT]; float _wheelSetAng[WHEEL_COUNT]; float _wheelSetAngSpeed[WHEEL_COUNT]; ... #endif //ENCODERS_ON }; 

рдЕрдЧрд░ рд╣рдо рдПрдиреНрдХреЛрдбрд░ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЧрд╛рдбрд╝реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреАрдбрдмреНрд▓реВрдПрдо рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВред рдпрджрд┐ рдЯреНрд░реЙрд▓реА рдореЗрдВ рдПрдирдХреЛрдбрд░ рд╣реИрдВ, рддреЛ рдХрдХреНрд╖рд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

  • WheelRotateAng - рджрд┐рдП рдЧрдП рдХреЛрдгреАрдп рд╡реЗрдЧ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реЛрдЯреЗрд╢рди рдХреЛрдг рдкрд░ рдкрд╣рд┐рдпрд╛ рд░реЛрдЯреЗрд╢рди;
  • WheelGetPath - рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд┐рдП рдЧрдП рдкрде рдХреА рд▓рдВрдмрд╛рдИ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • WheelGetLinSpeed тАЛтАЛ- рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд┐рдпрд╛ рдХреА рд╡рд░реНрддрдорд╛рди рд░реИрдЦрд┐рдХ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ;
  • WheelGetAngSpeed тАЛтАЛ- рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд┐рдпрд╛ рдХреА рд╡рд░реНрддрдорд╛рди рдХреЛрдгреАрдп рдЧрддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • WheelGetEncoder - рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд┐рдпрд╛ рдХреЗ рдПрдиреНрдХреЛрдбрд░реНрд╕ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдФрд░ рдХрдИ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдВред рд╕рд╛рде рд╣реА рдПрдХ рдкреНрд░рдгреЛрджрди рдЕрдВрд╢рд╛рдВрдХрди рд╡рд┐рдзрд┐ред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪреЗрд╕рд┐рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░рдореБрдЦ рддрд░реАрдХреЛрдВ рдкрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдпрд╣ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдкреВрд░реЗ рдорд┐рд░реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рджреЛ-рдкрд╣рд┐рдпрд╛ рдЕрдВрддрд░ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдпрд╛ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде - рдФрд░ рдЕрдиреНрдп рдкреНрд░рдгреЛрджрди рдФрд░ рд╕реНрдЯреАрдпрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдПред рдПрдХ рдЕрдВрддрд░ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ config.h рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд░рдкреАрдЖрдИ рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ, рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░реАрдп BlackMirrorCTF-2019 рд╕рд╛рдЗрдмрд░ рд╕реНрдкреЗрд╕ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп ( рд▓рд┐рдВрдХ ) рдореЗрдВ рдРрд╕реЗ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред

рдЫрд╡рд┐

рд░реЛрдмреЛрдЯ рдХреЗ рдкрд╛рд╕ TELNET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо рдерд╛ред рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╣реАрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдпрд╛ рдПрдиреНрдХреЛрдбреЗрдб рдерд╛ред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдФрд░ рдЦреБрдж рд░реЛрдмреЛрдЯреЛрдВ рдкрд░ рдкреЛрд░реНрдЯ рдЦреЛрд▓ рджрд┐рдПред рдПрдХ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рд░реЛрдмреЛрдЯреЛрдВ рдиреЗ рдПрдХ рдирд┐рдордВрддреНрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рд╕рдордЭрд╛ рдХрд┐ рд╡реЗ "рдкреНрд░рд╡реЗрд╢" рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЦреИрд░, рдлрд┐рд░ рдЯреАрдореЛрдВ рдиреЗ рд░рд╛рдЬрдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рд░реЛрдмреЛрдЯреЛрдВ рдХреЛ рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░ рд▓рд╛рдпрд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╡реЗ рдЖрдИрдкреА рдХреИрдорд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдХрдорд░реЗ рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдЯреНрд░реИрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЖрдпреЛрдЬрдХреЛрдВ рдХреЛ рдЖрдИрдкреА рдХреИрдорд░рд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдФрд░ рдХреБрдЫ рдЖрдХрд░реНрд╖рдг рдЦреЛ рдЧрдП рдереЗред


рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА OOP-shchik рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдкрд╛рдВрдЪрд╡реЗрдВ рднрд╛рдЧ рд╕реЗ рдЖрдЧреЗ - рдЪрд▓реЛ рдПрдирдХреЛрдбрд░, рдХреЛрдг рдФрд░ рдЕрдВрд╢рд╛рдВрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi475512/


All Articles