Accessories
Arduino for motors and lights library.
AccessoryServo.hpp
1 //-------------------------------------------------------------------
2 #ifndef __accessoryServo_H__
3 #define __accessoryServo_H__
4 //-------------------------------------------------------------------
5 
6 #include "Accessory.hpp"
7 
8 //-------------------------------------------------------------------
9 
10 #ifndef NO_SERVO
11 
13 #define MINIMUM STATE_FIRST
14 
15 #define MAXIMUM STATE_SECOND
16 
18 enum MovementSpeed
19 {
22  ServoFast,
23 
26  ServoAlone,
27 
31  ServoActionStack,
32 
36  ServoSlow
37 };
38 
39 enum POWER_STATE
40 {
41  PowerNoAction,
42  PowerBeforeRunning,
43  PowerRunning,
44  PowerAfterRunning
45 };
46 
63 class AccessoryServo : public Accessory
64 {
65  private:
66  int currentPosition;
67  int minimumPosition;
68  int maximumPosition;
69  int targetSpeed;
70  int targetPosition;
71  GPIO_pin_t powerCommandPin;
72  unsigned long powerDelay;
73  POWER_STATE powerState;
74 
75  public:
78 
82  inline int GetMinimumPosition() const { return this->minimumPosition; }
83 
87  inline int GetMaximumPosition() const { return this->maximumPosition; }
88 
92  inline int GetCurrentPosition() const { return this->currentPosition; }
93 
98  inline void SetMinMax(int inMinimum, int inMaximum) { this->minimumPosition = inMinimum; this->maximumPosition = inMaximum; }
99 
104  inline void AddMinMaxMovingPositions(unsigned long inIdMin, unsigned long inIdMax) { this->AddMovingPosition(inIdMin, this->minimumPosition); this->AddMovingPosition(inIdMax, this->maximumPosition); }
105 
109  inline bool IsMinimumOrLowerPosition() const { return this->currentPosition <= this->minimumPosition; }
110 
114  inline bool IsMaximumOrGreaterPosition() const { return this->currentPosition >= this->maximumPosition; }
115 
119  inline bool IsMiscPosition() const { return this->currentPosition < this->maximumPosition && this->currentPosition > this->minimumPosition; }
120 
123  MovementSpeed GetMovementSpeed() const;
124 
128  inline bool CanBePositional() const { return true; }
129 
137  void begin(Port *inpPort, unsigned long inDurationMilli = 0, int inMinimumPosition = 0, int inMaximumPosition = 180, int inMovingPositionsNumber = 1);
138 
143  void SetPowerCommand(int inPin, unsigned long inDelay = 100);
144 
150  void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0);
151 #ifndef NO_EEPROM
152 
155  int EEPROMLoad(int inPos);
156 #endif
157 
161  void MovePosition(int inPosition);
162 
166  void Move(unsigned long inId);
167 
169  void MoveMinimum();
170 
172  void MoveMaximum();
173 
177  ACC_STATE MoveToggle();
178 
179  private:
180  void SetState(ACC_STATE instate);
181  inline ACC_STATE Toggle() { return MoveToggle(); }
182  bool ActionEnded();
183  void InternalMovePosition(int inPosition);
184 
185 #ifdef ACCESSORIES_PRINT_ACCESSORIES
186  public:
190  void printAccessory();
191 #endif
192 };
193 #endif
194 #endif
195 
void Move(unsigned long inId)
void MovePosition(int inPosition)
int EEPROMLoad(int inPos)
void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
void begin(Port *inpPort, unsigned long inDurationMilli = 0, int inMinimumPosition = 0, int inMaximumPosition = 180, int inMovingPositionsNumber = 1)
bool CanBePositional() const
MovementSpeed GetMovementSpeed() const
void SetPowerCommand(int inPin, unsigned long inDelay = 100)
bool IsMiscPosition() const
Definition: Port.hpp:61
bool IsMaximumOrGreaterPosition() const
ACC_STATE MoveToggle()
bool IsMinimumOrLowerPosition() const
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
Definition: Accessory.cpp:49
void AddMinMaxMovingPositions(unsigned long inIdMin, unsigned long inIdMax)
void SetMinMax(int inMinimum, int inMaximum)
int GetCurrentPosition() const
int GetMaximumPosition() const
int GetMinimumPosition() const