-
Notifications
You must be signed in to change notification settings - Fork 0
/
Turret.h
108 lines (93 loc) · 2.82 KB
/
Turret.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
* \file
* \brief Turret class header file.
* \author Vasiliy Polyakov <[email protected]>
* \author RobotPSU https://robot.psu.ru/
* \date 2017-2018
*/
#ifndef Turret_h
#define Turret_h
#include <Arduino.h>
#include <Servo.h>
// Turret angles
#define TURRET_START_H 90 ///< Starting horizontal angle (degrees)
#define TURRET_START_V 90 ///< Starting horizontal angle (degrees)
#define TURRET_DELTA_H 1 ///< Horizontal increment/decrement (degrees)
#define TURRET_DELTA_V 1 ///< Horizontal increment/decrement (degrees)
#define TURRET_MIN_H 30 ///< Minimum horizontal angle (degrees)
#define TURRET_MAX_H 150 ///< Maximum horizontal angle (degrees)
#define TURRET_MIN_V 70 ///< Minimum vertical angle (degrees)
#define TURRET_MAX_V 150 ///< Maximum vertical angle (degrees)
/**
* TALAS rotating turret with laser gun.
*/
class Turret
{
public:
uint8_t h0; ///< Initial horizontal angle.
uint8_t v0; ///< Initial vertical angle.
/**
* Constructor.
*/
Turret();
/**
* Attach turret with laser gun only.
* \param pinLaser pin for laser gun.
*/
void attach(uint8_t pinLaser);
/**
* Attach movable turret with laser gun.
* \param pinLaser pin for laser gun.
* \param pinH pin for horizontal servo.
* \param pinV pin for vertical servo.
*/
void attach(uint8_t pinLaser, uint8_t pinH, uint8_t pinV);
/**
* Set servos angle range.
* \param minH,maxH horizontal range.
* \param minV,maxV vertical range.
*/
void setRange(uint8_t minH, uint8_t maxH, uint8_t minV, uint8_t maxV);
/**
* Set servos angle increment/decrement value.
* \param dH,dV new increment/decrement values.
*/
void setDelta(uint8_t dH, uint8_t dV);
void enable(); ///< Enable turret.
void disable(); ///< Disable turret.
/**
* Reset turret.
* Turn to the initial position.
*/
void reset();
/**
* Get current horizontal position.
* \return Horizontal angle (degrees).
*/
uint8_t getH();
/**
* Get current vertical position.
* \return Vertical angle (degrees).
*/
uint8_t getV();
void up(); ///< Rotate turret up.
void down(); ///< Rotate turret down.
void left(); ///< Rotate turret left.
void right(); ///< Rotate turret right.
/**
* Fire laser gun.
* Emit a laser impulse with specified length in ms.
* \param length impulse length (ms).
*/
void impulse(unsigned long length);
private:
volatile bool _enabled; // If turret enabled.
uint8_t _pinLaser; // Pin for laser gun.
Servo _servoH, _servoV; // Servo objects.
uint8_t _h, _v; // Turret angles (values for servos).
uint8_t _dH, _dV; // Angle increment/decrement values.
uint8_t _minH, _maxH; // Horizontal range.
uint8_t _minV, _maxV; // Vertical range.
};
#endif
/* vim: set ft=arduino et sw=2 ts=2: */