Sakis Kasampalis
/
pwm-servo
USB servo control
usb-servo.cpp@0:61aafea4a4fe, 2016-11-13 (annotated)
- Committer:
- faif
- Date:
- Sun Nov 13 12:22:13 2016 +0000
- Revision:
- 0:61aafea4a4fe
First version; ; Control a continuous rotation version using USB
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faif | 0:61aafea4a4fe | 1 | #include "mbed.h" |
faif | 0:61aafea4a4fe | 2 | #include "Servo.h" |
faif | 0:61aafea4a4fe | 3 | #include "usb-servo.h" |
faif | 0:61aafea4a4fe | 4 | |
faif | 0:61aafea4a4fe | 5 | |
faif | 0:61aafea4a4fe | 6 | static const char CLS[] = "\x1B[2J"; // VT100 erase screen |
faif | 0:61aafea4a4fe | 7 | static const char HOME[] = "\x1B[H"; // VT100 home |
faif | 0:61aafea4a4fe | 8 | |
faif | 0:61aafea4a4fe | 9 | static const float INITIAL_RANGE = 0.0005; |
faif | 0:61aafea4a4fe | 10 | static const float INITIAL_POSITION = 0.5; |
faif | 0:61aafea4a4fe | 11 | |
faif | 0:61aafea4a4fe | 12 | static const float CLOCK = 0.0; |
faif | 0:61aafea4a4fe | 13 | static const float CCLOCK = 1.0; |
faif | 0:61aafea4a4fe | 14 | static const float RANGE_MODIFIER = 0.0001; |
faif | 0:61aafea4a4fe | 15 | |
faif | 0:61aafea4a4fe | 16 | struct Movement |
faif | 0:61aafea4a4fe | 17 | { |
faif | 0:61aafea4a4fe | 18 | private: |
faif | 0:61aafea4a4fe | 19 | float calibration; |
faif | 0:61aafea4a4fe | 20 | |
faif | 0:61aafea4a4fe | 21 | public: |
faif | 0:61aafea4a4fe | 22 | float range; |
faif | 0:61aafea4a4fe | 23 | float position; |
faif | 0:61aafea4a4fe | 24 | |
faif | 0:61aafea4a4fe | 25 | Movement(float r, float p) : range(r), position(p) |
faif | 0:61aafea4a4fe | 26 | { |
faif | 0:61aafea4a4fe | 27 | calibration = 45.0; |
faif | 0:61aafea4a4fe | 28 | }; |
faif | 0:61aafea4a4fe | 29 | |
faif | 0:61aafea4a4fe | 30 | float getCalibration() const |
faif | 0:61aafea4a4fe | 31 | { |
faif | 0:61aafea4a4fe | 32 | return calibration; |
faif | 0:61aafea4a4fe | 33 | } |
faif | 0:61aafea4a4fe | 34 | }; |
faif | 0:61aafea4a4fe | 35 | |
faif | 0:61aafea4a4fe | 36 | int main() { |
faif | 0:61aafea4a4fe | 37 | clear_screen(); |
faif | 0:61aafea4a4fe | 38 | show_menu(); |
faif | 0:61aafea4a4fe | 39 | Movement movement(INITIAL_RANGE, INITIAL_POSITION); |
faif | 0:61aafea4a4fe | 40 | |
faif | 0:61aafea4a4fe | 41 | while (true) |
faif | 0:61aafea4a4fe | 42 | { |
faif | 0:61aafea4a4fe | 43 | switch(pc.getc()) |
faif | 0:61aafea4a4fe | 44 | { |
faif | 0:61aafea4a4fe | 45 | case '1': |
faif | 0:61aafea4a4fe | 46 | movement.position = CLOCK; |
faif | 0:61aafea4a4fe | 47 | break; |
faif | 0:61aafea4a4fe | 48 | case '2': |
faif | 0:61aafea4a4fe | 49 | movement.position = CCLOCK; |
faif | 0:61aafea4a4fe | 50 | break; |
faif | 0:61aafea4a4fe | 51 | case '3': |
faif | 0:61aafea4a4fe | 52 | movement.range += RANGE_MODIFIER; |
faif | 0:61aafea4a4fe | 53 | break; |
faif | 0:61aafea4a4fe | 54 | case '4': |
faif | 0:61aafea4a4fe | 55 | movement.range -= RANGE_MODIFIER; |
faif | 0:61aafea4a4fe | 56 | break; |
faif | 0:61aafea4a4fe | 57 | } |
faif | 0:61aafea4a4fe | 58 | pc.printf("position = %.1f, range = +/-%0.4f\n\r", movement.position, movement.range); |
faif | 0:61aafea4a4fe | 59 | update(myservo, movement); |
faif | 0:61aafea4a4fe | 60 | } |
faif | 0:61aafea4a4fe | 61 | } |
faif | 0:61aafea4a4fe | 62 | |
faif | 0:61aafea4a4fe | 63 | void clear_screen() |
faif | 0:61aafea4a4fe | 64 | { |
faif | 0:61aafea4a4fe | 65 | pc.printf(CLS); |
faif | 0:61aafea4a4fe | 66 | pc.printf(HOME); |
faif | 0:61aafea4a4fe | 67 | } |
faif | 0:61aafea4a4fe | 68 | |
faif | 0:61aafea4a4fe | 69 | void show_menu() |
faif | 0:61aafea4a4fe | 70 | { |
faif | 0:61aafea4a4fe | 71 | pc.printf("\rServo controls:\n\r"); |
faif | 0:61aafea4a4fe | 72 | pc.printf("1. Full speed clockwise\n\r"); |
faif | 0:61aafea4a4fe | 73 | pc.printf("2. Full speed counter-clockwise\n\r"); |
faif | 0:61aafea4a4fe | 74 | pc.printf("3. Increase speed\n\r"); |
faif | 0:61aafea4a4fe | 75 | pc.printf("4. Decrease speed\n\r"); |
faif | 0:61aafea4a4fe | 76 | } |
faif | 0:61aafea4a4fe | 77 | |
faif | 0:61aafea4a4fe | 78 | void update(const Servo& servo, const Movement& move) |
faif | 0:61aafea4a4fe | 79 | { |
faif | 0:61aafea4a4fe | 80 | myservo.calibrate(move.range, move.getCalibration()); |
faif | 0:61aafea4a4fe | 81 | myservo = move.position; |
faif | 0:61aafea4a4fe | 82 | } |