Pavan Kumar
/
leapbasedhapticarm
its a leap based haptic arm robot
main.cpp@0:378e6e4342e9, 2017-05-02 (annotated)
- Committer:
- dvpavan153
- Date:
- Tue May 02 15:35:16 2017 +0000
- Revision:
- 0:378e6e4342e9
leap based haptic arm
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dvpavan153 | 0:378e6e4342e9 | 1 | #include"mbed.h" |
dvpavan153 | 0:378e6e4342e9 | 2 | #include "Servo.h" |
dvpavan153 | 0:378e6e4342e9 | 3 | |
dvpavan153 | 0:378e6e4342e9 | 4 | Servo myservo1(PTD0); |
dvpavan153 | 0:378e6e4342e9 | 5 | Servo myservo2(PTD2); |
dvpavan153 | 0:378e6e4342e9 | 6 | Servo myservo3(PTD3); |
dvpavan153 | 0:378e6e4342e9 | 7 | #include <stdio.h> |
dvpavan153 | 0:378e6e4342e9 | 8 | #include <string.h> |
dvpavan153 | 0:378e6e4342e9 | 9 | Serial pc(USBTX, USBRX); |
dvpavan153 | 0:378e6e4342e9 | 10 | Serial device(PTC15, PTC14); |
dvpavan153 | 0:378e6e4342e9 | 11 | float map(float in, float inMin, float inMax, float outMin, float outMax) ; |
dvpavan153 | 0:378e6e4342e9 | 12 | int main () |
dvpavan153 | 0:378e6e4342e9 | 13 | { |
dvpavan153 | 0:378e6e4342e9 | 14 | device.baud(9600); |
dvpavan153 | 0:378e6e4342e9 | 15 | char buf[17]; |
dvpavan153 | 0:378e6e4342e9 | 16 | while(1) |
dvpavan153 | 0:378e6e4342e9 | 17 | { |
dvpavan153 | 0:378e6e4342e9 | 18 | if (device.readable()) |
dvpavan153 | 0:378e6e4342e9 | 19 | { |
dvpavan153 | 0:378e6e4342e9 | 20 | |
dvpavan153 | 0:378e6e4342e9 | 21 | device.gets(buf,17); |
dvpavan153 | 0:378e6e4342e9 | 22 | |
dvpavan153 | 0:378e6e4342e9 | 23 | int i ; |
dvpavan153 | 0:378e6e4342e9 | 24 | char *p = strtok (buf, ":"); |
dvpavan153 | 0:378e6e4342e9 | 25 | char *array[3]; |
dvpavan153 | 0:378e6e4342e9 | 26 | |
dvpavan153 | 0:378e6e4342e9 | 27 | |
dvpavan153 | 0:378e6e4342e9 | 28 | while (p != NULL) |
dvpavan153 | 0:378e6e4342e9 | 29 | { |
dvpavan153 | 0:378e6e4342e9 | 30 | array[i++] = p; |
dvpavan153 | 0:378e6e4342e9 | 31 | p = strtok (NULL, ":"); |
dvpavan153 | 0:378e6e4342e9 | 32 | } |
dvpavan153 | 0:378e6e4342e9 | 33 | |
dvpavan153 | 0:378e6e4342e9 | 34 | float x,y,z; |
dvpavan153 | 0:378e6e4342e9 | 35 | x = atof(array[0]); |
dvpavan153 | 0:378e6e4342e9 | 36 | y = atof(array[1]); |
dvpavan153 | 0:378e6e4342e9 | 37 | z = atof(array[2]); |
dvpavan153 | 0:378e6e4342e9 | 38 | |
dvpavan153 | 0:378e6e4342e9 | 39 | printf("x=%4f\n",x); |
dvpavan153 | 0:378e6e4342e9 | 40 | printf("y=%4f\n",y); |
dvpavan153 | 0:378e6e4342e9 | 41 | printf("z=%4f\n",z); |
dvpavan153 | 0:378e6e4342e9 | 42 | float middle = map ( x,165.0,340.0,0.0,180.0); |
dvpavan153 | 0:378e6e4342e9 | 43 | float bottom = map ( y,65.0,-85.0,0.0,180.0); |
dvpavan153 | 0:378e6e4342e9 | 44 | float top= map ( z,0.0,120.0,0.0,180.0); |
dvpavan153 | 0:378e6e4342e9 | 45 | |
dvpavan153 | 0:378e6e4342e9 | 46 | printf("%f\n",middle); |
dvpavan153 | 0:378e6e4342e9 | 47 | myservo1 = int(middle); |
dvpavan153 | 0:378e6e4342e9 | 48 | printf("%f\n",bottom); |
dvpavan153 | 0:378e6e4342e9 | 49 | myservo2 = int(bottom); |
dvpavan153 | 0:378e6e4342e9 | 50 | printf("%f\n",top); |
dvpavan153 | 0:378e6e4342e9 | 51 | myservo3 = int(top); |
dvpavan153 | 0:378e6e4342e9 | 52 | |
dvpavan153 | 0:378e6e4342e9 | 53 | |
dvpavan153 | 0:378e6e4342e9 | 54 | |
dvpavan153 | 0:378e6e4342e9 | 55 | } |
dvpavan153 | 0:378e6e4342e9 | 56 | } |
dvpavan153 | 0:378e6e4342e9 | 57 | |
dvpavan153 | 0:378e6e4342e9 | 58 | } |
dvpavan153 | 0:378e6e4342e9 | 59 | float map(float in, float inMin, float inMax, float outMin, float outMax) { |
dvpavan153 | 0:378e6e4342e9 | 60 | // check it's within the range |
dvpavan153 | 0:378e6e4342e9 | 61 | if (inMin<inMax) { |
dvpavan153 | 0:378e6e4342e9 | 62 | if (in <= inMin) |
dvpavan153 | 0:378e6e4342e9 | 63 | return outMin; |
dvpavan153 | 0:378e6e4342e9 | 64 | if (in >= inMax) |
dvpavan153 | 0:378e6e4342e9 | 65 | return outMax; |
dvpavan153 | 0:378e6e4342e9 | 66 | } else { // cope with input range being backwards. |
dvpavan153 | 0:378e6e4342e9 | 67 | if (in >= inMin) |
dvpavan153 | 0:378e6e4342e9 | 68 | return outMin; |
dvpavan153 | 0:378e6e4342e9 | 69 | if (in <= inMax) |
dvpavan153 | 0:378e6e4342e9 | 70 | return outMax; |
dvpavan153 | 0:378e6e4342e9 | 71 | } |
dvpavan153 | 0:378e6e4342e9 | 72 | // calculate how far into the range we are |
dvpavan153 | 0:378e6e4342e9 | 73 | float scale = (in-inMin)/(inMax-inMin); |
dvpavan153 | 0:378e6e4342e9 | 74 | // calculate the output. |
dvpavan153 | 0:378e6e4342e9 | 75 | return outMin + scale*(outMax-outMin); |
dvpavan153 | 0:378e6e4342e9 | 76 | } |
dvpavan153 | 0:378e6e4342e9 | 77 | |
dvpavan153 | 0:378e6e4342e9 | 78 | |
dvpavan153 | 0:378e6e4342e9 | 79 | |
dvpavan153 | 0:378e6e4342e9 | 80 |