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 
85 class AccessoryServo : public Accessory
86 {
87  private:
88  int currentPosition;
89  int minimumPosition;
90  int maximumPosition;
91  int targetSpeed;
92  int targetPosition;
93  GPIO_pin_t powerCommandPin;
94  unsigned long powerDelay;
95  POWER_STATE powerState;
96 
97  public:
100 
104  inline int GetMinimumPosition() const { return this->minimumPosition; }
105 
109  inline int GetMaximumPosition() const { return this->maximumPosition; }
110 
114  inline int GetCurrentPosition() const { return this->currentPosition; }
115 
120  inline void SetMinMax(int inMinimum, int inMaximum) { this->minimumPosition = inMinimum; this->maximumPosition = inMaximum; }
121 
126  inline void AddMinMaxMovingPositions(unsigned long inIdMin, unsigned long inIdMax) { this->AddMovingPosition(inIdMin, this->minimumPosition); this->AddMovingPosition(inIdMax, this->maximumPosition); }
127 
131  inline bool IsMinimumOrLowerPosition() const { return this->currentPosition <= this->minimumPosition; }
132 
136  inline bool IsMaximumOrGreaterPosition() const { return this->currentPosition >= this->maximumPosition; }
137 
141  inline bool IsMiscPosition() const { return this->currentPosition < this->maximumPosition && this->currentPosition > this->minimumPosition; }
142 
145  MovementSpeed GetMovementSpeed() const;
146 
150  inline bool CanBePositional() const { return true; }
151 
159  void begin(Port *inpPort, unsigned long inDurationMilli = 0, int inMinimumPosition = 0, int inMaximumPosition = 180, int inMovingPositionsNumber = 1);
160 
165  void SetPowerCommand(int inPin, unsigned long inDelay = 100);
166 
172  void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0);
173 #ifndef NO_EEPROM
174 
177  int EEPROMLoad(int inPos);
178 #endif
179 
183  void MovePosition(int inPosition);
184 
188  void Move(unsigned long inId);
189 
191  void MoveMinimum();
192 
194  void MoveMaximum();
195 
199  ACC_STATE MoveToggle();
200 
204  void ExternalMove(ACC_STATE inNewState) { this->SetStateRaw(inNewState); }
205 
206  private:
207  void SetState(ACC_STATE instate);
208  inline ACC_STATE Toggle() { return MoveToggle(); }
209  bool ActionEnded();
210  void InternalMovePosition(int inPosition);
211  void PowerOn();
212  void PowerOff();
213 
214 #ifdef ACCESSORIES_PRINT_ACCESSORIES
215  public:
219  void printAccessory();
220 #endif
221 };
222 #endif
223 #endif
224 
void SetStateRaw(ACC_STATE inNewState)
Definition: Accessory.cpp:223
void ExternalMove(ACC_STATE inNewState)
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)
Definition: Port.hpp:61
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
bool IsMaximumOrGreaterPosition() const
ACC_STATE MoveToggle()
bool IsMinimumOrLowerPosition() const
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
Definition: Accessory.cpp:57
void AddMinMaxMovingPositions(unsigned long inIdMin, unsigned long inIdMax)
void SetMinMax(int inMinimum, int inMaximum)
int GetCurrentPosition() const
int GetMaximumPosition() const
int GetMinimumPosition() const