рд╣рдо рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ рдПрдХ

рдПрдХ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ, рд╣рдо рдПрдХ рд╖рдЯреНрдкрдж 3 рдбреА рдореБрджреНрд░рдг рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХреА рд╣реИред рдЕрдм рд╣рдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдШрдЯрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рд▓реЗрдЦрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рд╕рддрд╣реА рдФрд░ рдЕрд╕рдВрдХреНрд░рд╛рдордХ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рд╖рдп рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд╕рд╛рде рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдбрд┐рд╡рд╛рдЗрд╕


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡рд╛рдИ-рдлрд╛рдИ рдИрдПрд╕рдкреА 8266 рдХреЗ рд╕рд╛рде рдпреВрдПрдирдУ рдЖрд░ 3 рдмреЛрд░реНрдб рдореБрдЦреНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмреЛрд░реНрдб рдмреЛрд░реНрдб рдкрд░ рджреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ UART рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпреВрдиреЛ рдХреЗ рдкрд╛рд╕ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реИ, рдпрд╣ рд░реЛрдмреЛрдЯ рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдХрдорд╛рдВрдб рдХреИрд╕реЗ рдХрд░реЗрдВ:

  • рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЧрддрд┐ рдФрд░ рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реАрдзреА рд░реЗрдЦрд╛ рдЖрдВрджреЛрд▓рди
  • рдмрд╛рдИрдВ рдпрд╛ рджрд╛рдИрдВ рдУрд░ рдкрд░рд┐рдкрддреНрд░ рдЖрдВрджреЛрд▓рди (рдЬрдЧрд╣ рдореЗрдВ рдореЛрдбрд╝)
  • рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдВрдЧ рд╕реНрдерд┐рддрд┐ рд▓реЗ рд▓реЛ

ESP8266 рд╡рд╛рдпрд░рд▓реЗрд╕ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Uno рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

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



рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рдХрд╛ рдЖрдВрдХрдбрд╝рд╛ рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред



рд╕рднреА рд╕рд░реНрд╡реЛ рдорд▓реНрдЯреАрд╕рд░реНрд╡реЛ рд╢реАрд▓реНрдб рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдб рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ , рдЬреЛ рдЖрдкрдХреЛ 18 рд╕рд░реНрд╡реЛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Arduino рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рд╕рдВрдЪрд╛рд░ I┬▓C рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 18 рд╕рд░реНрд╡реЛрд╕ рд╕реНрдЯреАрдпрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд▓рдЧрднрдЧ рд╕рднреА Arduino рдкрд┐рди рдореБрдХреНрдд рд░рд╣реЗрдВрдЧреЗред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдб рдореЗрдВ рдХрдиреЗрдХреНрдЯреЗрдб рд╕рд░реНрд╡реЛ рдХреЛ рдкрд╛рд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрдЯрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд░реНрддрдорд╛рди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреЛрд░реНрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд▓рдЧрднрдЧ 10A рд╣реИ, рдЬреЛ MG996R рдЗрдорджрд╛рджреА рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдмрд┐рдЬрд▓реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреБрд▓ рд╡рд░реНрддрдорд╛рди рдЦрдкрдд рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдб рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ рдмрд┐рдЬрд▓реА рд▓рд╛рдЗрди рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛ред

рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдкреНрд░рдмрдВрдзрди


рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЧреЗрдХреНрд╕рд╛рдлреБрдЯ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдЕрдВрдЧ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд╡рд░реНрдЧ GeksaFoot
class GeksaFoot {
private:
//         
  Vector3D m_p0;
//          
  Vector3D m_r0;
//  Multiservo,    
  Multiservo m_coxaServo;   //  
  Multiservo m_femoraServo; //  
  Multiservo m_tibiaServo;  //  
public:
  GeksaFoot(Vector3D p0,Vector3D r0);
//   
  void begin(int coxaPin, int femoraPin, int tibiaPin);
//   
  void end();   

//   

  void coxaAngle(int);      //      (-90 .. 90 )
  int coxaAngle();          //     

  void femoraAngle(int);    //       (-90 .. 90 )
  int femoraAngle();        //     

  void tibiaAngle(int);     //       (-90 .. 90 )
  int tibiaAngle();         //     

//         

  //         
  int getAngles(Vector3D p, int& coxaAngle, int& femoraAngle, int& tibiaAngle);
  //       
  int getPoint(int coxaAngle, int femoraAngle, int tibiaAngle, Vector3D& p);
};


рддрд░реАрдХреЗ coxaAngle , femoraAngle , tibiaAngle рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреИрд░ рдХреЗ рдЬреЛрдбрд╝ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреЗ рдХреЛрдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ getAngles рдФрд░ getPoint рдбрд╛рдпрд░реЗрдХреНрдЯ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдФрд░ рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреАрдиреЗрдореЗрдЯреАрдХреНрд╕ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЙрд╕рдХреЗ рдЕрдВрдЧ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдкреИрд░ рдХреЗ рдХреЛрдгреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд░реНрддрдорд╛рди рдХреЛрдг рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рди рдмрд┐рдВрджреБред

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдпреБрдХреНрдд рдХреА рдФрд╕рдд рд╕реНрдерд┐рддрд┐ рдХреЛрдг рдХреЗ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рд╕рдВрдпреБрдХреНрдд рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреА рд╕реАрдорд╛ -90 рд╕реЗ 90 рдбрд┐рдЧреНрд░реА рддрдХ рд╣реЛрддреА рд╣реИред

рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХрд╛ рд╡рд░реНрдЧ рдЧреЗрдХреНрд╕рд╛рдкреЙрдб рд╡рд░реНрдЧ рд╣реИред рдпрд╣ рдкреВрд░реЗ рд░реЛрдмреЛрдЯ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рд▓реЗрдЧ рдХреЛ рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдЧреЗрдХреНрд╕рд╛рдлреБрдЯ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд╡рд░реНрдЧ рднреВрдХреНрд╖реЗрддреНрд░
class Geksapod: public AJobManager {
  friend class MotionJob;
  friend CommandProcessorJob;
  //  
  GeksaFoot m_LeftFrontFoot;
  GeksaFoot m_LeftMidleFoot;
  GeksaFoot m_LeftBackFoot;
  GeksaFoot m_RigthFrontFoot;
  GeksaFoot m_RigthMidleFoot;
  GeksaFoot m_RigthBackFoot;
  // ,    
  MotionJob m_MotionJob;
private:
  //       
  //       
  //     
  int _setPose(int idx, int ca, int fa, int ta);
  int _setPose(int[FOOTS_COUNT][3]);  
  int _setPose(Vector3D points[FOOTS_COUNT]); 
protected:
  //          
  int setPose(int idx, int ca, int fa, int ta, int actionTime); 
  int setPose(int pose[FOOTS_COUNT][3], int actionTime);
  int setPose(int idx, Vector3D p, int actionTime);
  int setPose(Vector3D points[FOOTS_COUNT], int actionTime = 0);
  int setPose(int ca, int fa, int ta, int actionTime);
  //      
  void getPose(int idx, int& ca, int& fa, int& ta);
  void getPose(int pose[FOOTS_COUNT][3]);
  void getPose(int idx, Vector3D& p);
  void getPose(Vector3D points[FOOTS_COUNT]);
  //    
  int execute(Motion* pMotion);
public:
  Geksapod();
  void setup();
  //   
  int move(int speed, int time);    //   
  int rotate(int speed, int time);  //   
  void stop();                      //  
  //         
  int getAngles(int idx, Vector3D p, int& ca, int& fa, int& ta);
  int getPoint(int idx, int coxaAngle, int femoraAngle, int tibiaAngle, Vector3D& p);
  int getAngles(Vector3D points[FOOTS_COUNT], int pose[FOOTS_COUNT][3]);
  int getPoints(int pose[FOOTS_COUNT][3], Vector3D points[FOOTS_COUNT]);
};


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

рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХ рдЕрдиреБрдХрд░рдг


Geksapod рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ AJobManager рд╡рд░реНрдЧ рдФрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ MotionJob рд╡рд░реНрдЧ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмрд╛рд░реА inherits рдореЗрдВ ajob рд╡рд░реНрдЧ ред рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреЛ рддрдерд╛рдХрдерд┐рдд рдЧреИрд░-рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд░реИрдЦрд┐рдХрддрд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрдХреНрд╖рд╛
class AJob {
  friend class AJobManager;
private:
  AJobManager* m_pAJobManager;   
  AJob* mJobNext;                      
  unsigned long m_counter;         //    onRun
  unsigned long m_previousMillis; //     onRun
  unsigned long m_currentMillis;  //   
  unsigned long m_delayMillis;    //    onRun
  void run();
public:
  AJob(AJobManager*, unsigned long delay = 0L);
  ~AJob();
                  
  void finish();  //     
  long counter(); //    onRun    
  long setDelay(unsigned long); //    onRun
  unsigned long previousMillis();//      onRun
  unsigned long currentMillis(); //    
                              
  virtual void onInit();  //      
  virtual void onRun();   //     
  virtual void onDone();  //        finish
};


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

рдХрдХреНрд╖рд╛ AJobManager
class AJobManager {
  friend class AJob;
  AJob* mJobFirst;  //      
  void attach(AJob*);   //    
  void dettach(AJob*); //    
  void dettachAll();   //   
public:  
  AJobManager();
  ~AJobManager();
  void setup();
  void loop();
};


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

рд╡рд┐рдзрд┐рдЗрд╕реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрдХреНрд░ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓ (рдпрджрд┐ рд╕реНрдерд╛рдкрд┐рдд) рдкрд░ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рддрд░реНрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрдм рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдХрд░ Geksapod рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА AJobManager рд╡рд░реНрдЧ , рд╣рдо рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдЙрдкрдХрд░рдг рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИред

рдЖрдВрджреЛрд▓рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╢рд░реАрд░ рдХреЗ рдХрд┐рд╕реА рднреА рдЖрдВрджреЛрд▓рди рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╕рдордЧреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рд╣реЗрдХреНрд╕рд╛рдкреЙрдб рдХреЗ рдЕрдВрдЧреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЛрд╢рди рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХрдХреНрд╖рд╛ рдореЛрд╢рди
class Motion {
  friend class MotionJob;
protected:
  long m_MaxTime;     //      
  long m_TotalTime;   //      
  bool m_IsLooped;    //   
  Motion* m_pNext;    //     
public:  
  Motion(long maxTime, bool isLooped, long totalTime = -1, Motion* pNext = NULL);
  ~Motion();
  
  inline long maxTime() { return m_MaxTime; }
  inline long totalTime() { return m_TotalTime; }
  inline bool isLooped() { return m_IsLooped; }

  //          

  //       0 <= time <= m_MaxTime 
  virtual int getPose(long time, Vector3D points[FOOTS_COUNT]) { return E_NOT_IMPL; };  
  //        0 <= time <= m_MaxTime
  virtual int getPose(long time, int pose[FOOTS_COUNT][3]) { return E_NOT_IMPL; };       
};


рдЖрдВрджреЛрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдУрд╡рд░рд░рд╛рдЗрдб getPose рд╡рд┐рдзрд┐ рд░реЛрдмреЛрдЯ рдХреЗ рдЕрдВрдЧреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдордп рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд▓реМрдЯ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ 0 рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mMaxTime (рдорд┐рд▓реАрд╕реЗрдХреЗрдВрдб рдореЗрдВ)ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рдЖрдВрджреЛрд▓рди рд▓реВрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( m_IsLooped == true) , рдореВрд╡рдореЗрдВрдЯ рд╕рдордп m_TotalTime рдореЗрдВ рдЕрд╡рдзрд┐ рд╕реЗрдЯ рдХрд░рдХреЗ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдЖрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рддрдм рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ MotionJob рд╡рд░реНрдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд Geksapod рд╡рд░реНрдЧ ред

рдХрдХреНрд╖рд╛ MotionJob
class MotionJob: public AJob {
  enum STATUS { 
    NONE, RUNING, STOPING 
   } m_Status;
  
  Geksapod* m_pGeksapod;
  Motion* m_pMotion;
  long m_MotionTime;
  long m_TotalTime;
public:  
  MotionJob(Geksapod* pGeksapod);
  int execute(Motion* pMotion);
  void onRun();
};


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







, onRun рдФрд░ onDone рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдХреЙрд▓ рджреЛрд╕реНрддрд╛рдирд╛ AJobManager рд╡рд░реНрдЧ рд╕реЗ рдЖрддрд╛ рд╣реИ ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд╛рд░рд┐рд╕реЛрдВ рдореЗрдВ рдУрд╡рд░рд▓реИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ ред

рдХрдХреНрд╖рд╛
class AJob {
  friend class AJobManager;
private:
  AJobManager* m_pAJobManager;   
  AJob* mJobNext;                      
  unsigned long m_counter;         //    onRun
  unsigned long m_previousMillis; //     onRun
  unsigned long m_currentMillis;  //   
  unsigned long m_delayMillis;    //    onRun
  void run();
protected:
  virtual void onInit();  //      
  virtual void onRun();   //     
  virtual void onDone();  //        finish
public:
  AJob(AJobManager*, unsigned long delay = 0L);
  ~AJob();

  void finish();  //     
  long counter(); //    onRun    
  long setDelay(unsigned long); //    onRun
  unsigned long previousMillis();//      onRun
  unsigned long currentMillis(); //    
};


All Articles