USB servo control

Dependencies:   Servo mbed

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?

UserRevisionLine numberNew 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 }