NMLAB / Mbed 2 deprecated XYZ_Joystick_PWM

Dependencies:   SoftPWM USBDevice mbed

Committer:
Dzak
Date:
Fri Apr 17 04:53:56 2015 +0000
Revision:
3:7a2b052c95a3
Parent:
2:31a9ee6d066d
Child:
4:58ae811bff73
minor update to readability

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dzak 0:651738eb850c 1 #include "mbed.h"
Dzak 2:31a9ee6d066d 2 //#include "USBSerial.h"
Dzak 0:651738eb850c 3 #include "SoftPWM.h"
Dzak 0:651738eb850c 4
Dzak 0:651738eb850c 5 AnalogIn Y_Axis(P0_13);
Dzak 0:651738eb850c 6 AnalogIn X_Axis(P0_11);
Dzak 1:2c0e9ef138a4 7 AnalogIn Z_Axis(P0_15);
Dzak 0:651738eb850c 8
Dzak 0:651738eb850c 9 SoftPWM X_PWM(P0_9); //P0_9
Dzak 0:651738eb850c 10 SoftPWM Y_PWM(P0_10); //P0_10
Dzak 1:2c0e9ef138a4 11 SoftPWM Z_PWM(P0_4); //P0_4
Dzak 0:651738eb850c 12
Dzak 2:31a9ee6d066d 13 //USBSerial serial;
Dzak 2:31a9ee6d066d 14
Dzak 2:31a9ee6d066d 15 Serial Send_Stage_Controller(P0_19,NC);
Dzak 2:31a9ee6d066d 16 //Serial Receive_Stage_Controller(NC,P0_18); //NULL-MOdem
Dzak 0:651738eb850c 17
Dzak 0:651738eb850c 18 #define MAX_LOGIC 10000 // Full-deflection Max Range
Dzak 0:651738eb850c 19 #define MIN_LOGIC 0 // Full-deflection Min Range
Dzak 0:651738eb850c 20
Dzak 3:7a2b052c95a3 21 #define SWITCH_LEVELS 5 // # of possible levels . MUST BE ODD. Median value is OFF
Dzak 0:651738eb850c 22 #define FWD 1
Dzak 0:651738eb850c 23 #define REV 0
Dzak 0:651738eb850c 24
Dzak 0:651738eb850c 25
Dzak 0:651738eb850c 26
Dzak 0:651738eb850c 27 //NOTE: Period MUST be defined 1st, them DC.
Dzak 0:651738eb850c 28
Dzak 3:7a2b052c95a3 29 float Period_Array [SWITCH_LEVELS] = {0.01, 0.1, 100.0, 0.1, 0.01}; // Period Corresponding to 10, 100, 0, 100, 10 Hz MUST be odd.
Dzak 3:7a2b052c95a3 30 uint16_t SpeedThreshold = MAX_LOGIC / SWITCH_LEVELS;
Dzak 0:651738eb850c 31
Dzak 0:651738eb850c 32 uint16_t X_Speed = 4;
Dzak 0:651738eb850c 33 uint16_t Y_Speed = 4;
Dzak 1:2c0e9ef138a4 34 uint16_t Z_Speed = 4;
Dzak 0:651738eb850c 35
Dzak 2:31a9ee6d066d 36 char X_Direction = FWD;
Dzak 2:31a9ee6d066d 37 char Y_Direction = FWD;
Dzak 2:31a9ee6d066d 38 char Z_Direction = FWD;
Dzak 0:651738eb850c 39
Dzak 0:651738eb850c 40 uint16_t tempX_Speed = 1;
Dzak 0:651738eb850c 41 uint16_t tempY_Speed = 1;
Dzak 1:2c0e9ef138a4 42 uint16_t tempZ_Speed = 1;
Dzak 0:651738eb850c 43
Dzak 2:31a9ee6d066d 44 char Direction_Byte = 0x00; //This byte contains all the info about directions. USed for transfer to Stage Controller
Dzak 2:31a9ee6d066d 45
Dzak 2:31a9ee6d066d 46
Dzak 0:651738eb850c 47 main()
Dzak 0:651738eb850c 48 {
Dzak 0:651738eb850c 49 while(1)
Dzak 0:651738eb850c 50 {
Dzak 0:651738eb850c 51 wait_ms(5);
Dzak 0:651738eb850c 52
Dzak 0:651738eb850c 53 X_Speed = (uint16_t) (X_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS);
Dzak 0:651738eb850c 54
Dzak 0:651738eb850c 55 Y_Speed = (uint16_t) (Y_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS);
Dzak 0:651738eb850c 56
Dzak 1:2c0e9ef138a4 57 Z_Speed = (uint16_t) (Z_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS);
Dzak 1:2c0e9ef138a4 58
Dzak 3:7a2b052c95a3 59 if (X_Speed > (SWITCH_LEVELS / 2)) {X_Direction = FWD;}
Dzak 3:7a2b052c95a3 60 if (X_Speed < (SWITCH_LEVELS / 2)) {X_Direction = REV;}
Dzak 3:7a2b052c95a3 61 if (Y_Speed > (SWITCH_LEVELS / 2)) {Y_Direction = FWD;}
Dzak 3:7a2b052c95a3 62 if (Y_Speed < (SWITCH_LEVELS / 2)) {Y_Direction = REV;}
Dzak 3:7a2b052c95a3 63 if (Z_Speed > (SWITCH_LEVELS / 2)) {Z_Direction = FWD;}
Dzak 3:7a2b052c95a3 64 if (Z_Speed < (SWITCH_LEVELS / 2)) {Z_Direction = REV;}
Dzak 0:651738eb850c 65
Dzak 0:651738eb850c 66
Dzak 2:31a9ee6d066d 67
Dzak 2:31a9ee6d066d 68 /*
Dzak 2:31a9ee6d066d 69 Assemble the Direction byte for ransmission over Serial to Stage Controller. X_Dir bit 2 Y_Dir bit 1, and Z_Dir bit 0
Dzak 2:31a9ee6d066d 70 */
Dzak 2:31a9ee6d066d 71
Dzak 2:31a9ee6d066d 72
Dzak 2:31a9ee6d066d 73 Direction_Byte = Direction_Byte >> 3; //Clear 3 previous LSBits
Dzak 2:31a9ee6d066d 74 Direction_Byte = (Direction_Byte | X_Direction) << 1; //Place X_Dir value and shift right: X_Dir is now bit 1
Dzak 2:31a9ee6d066d 75 Direction_Byte = (Direction_Byte | Y_Direction) << 1; //Place X_Dir value and shift right: Y_Dir is now bit 1, X_Dir is now bit 2
Dzak 2:31a9ee6d066d 76 Direction_Byte = (Direction_Byte | Z_Direction); //Place X_Dir value : Z_Dir is now bit 0, Y_Dir is now bit 1, X_Dir is now bit 2
Dzak 2:31a9ee6d066d 77
Dzak 2:31a9ee6d066d 78 Send_Stage_Controller.putc(Direction_Byte);
Dzak 2:31a9ee6d066d 79
Dzak 2:31a9ee6d066d 80
Dzak 2:31a9ee6d066d 81 /*
Dzak 2:31a9ee6d066d 82 //============================================================================
Dzak 2:31a9ee6d066d 83 //At the receiver side the Direction_Byte will will be decoded as follows:
Dzak 2:31a9ee6d066d 84
Dzak 2:31a9ee6d066d 85 char Mask_X = 0x04;
Dzak 2:31a9ee6d066d 86 char Mask_Y = 0x02;
Dzak 2:31a9ee6d066d 87 char Mask_Z = 0x01;
Dzak 2:31a9ee6d066d 88
Dzak 2:31a9ee6d066d 89 char Manual_Direction_Received = Receive_Stage_Controller.getc();
Dzak 2:31a9ee6d066d 90
Dzak 2:31a9ee6d066d 91 char X_Dir_Received = (Manual_Direction_Received & Mask_X) >> 2;
Dzak 2:31a9ee6d066d 92 char Y_Dir_Received = (Manual_Direction_Received & Mask_Y) >> 1;
Dzak 2:31a9ee6d066d 93 char Z_Dir_Received = Manual_Direction_Received & Mask_Z;
Dzak 2:31a9ee6d066d 94 */
Dzak 2:31a9ee6d066d 95
Dzak 2:31a9ee6d066d 96
Dzak 2:31a9ee6d066d 97 /*
Dzak 2:31a9ee6d066d 98 //=======================Only For Testing via NULL-Modem========================
Dzak 2:31a9ee6d066d 99
Dzak 2:31a9ee6d066d 100 wait(1);
Dzak 2:31a9ee6d066d 101 serial.printf("X_Direction : %u\n",X_Dir_Received);
Dzak 2:31a9ee6d066d 102 serial.printf("Y_Direction : %u\n",Y_Dir_Received);
Dzak 2:31a9ee6d066d 103 serial.printf("Z_Direction : %u\n",Z_Dir_Received);
Dzak 2:31a9ee6d066d 104
Dzak 2:31a9ee6d066d 105 */
Dzak 2:31a9ee6d066d 106 //=============================================================================
Dzak 2:31a9ee6d066d 107
Dzak 2:31a9ee6d066d 108
Dzak 2:31a9ee6d066d 109 //serial.printf(" X_Direction : %u", X_Direction);
Dzak 2:31a9ee6d066d 110 //serial.printf(" Y_Direction : %u \n",Y_Direction);
Dzak 2:31a9ee6d066d 111 //serial.printf(" Z_Direction : %u \n",Z_Direction);
Dzak 0:651738eb850c 112
Dzak 0:651738eb850c 113 if(tempX_Speed != X_Speed)
Dzak 0:651738eb850c 114 {
Dzak 0:651738eb850c 115 tempX_Speed = X_Speed;
Dzak 0:651738eb850c 116 X_PWM.period(Period_Array[X_Speed]);
Dzak 0:651738eb850c 117 X_PWM.write(0.5);
Dzak 0:651738eb850c 118
Dzak 2:31a9ee6d066d 119 //serial.printf(" X_Period : %4.4f \n",Period_Array[X_Speed]);
Dzak 0:651738eb850c 120 }
Dzak 0:651738eb850c 121
Dzak 0:651738eb850c 122 if(tempY_Speed != Y_Speed)
Dzak 0:651738eb850c 123 {
Dzak 0:651738eb850c 124 tempY_Speed = Y_Speed;
Dzak 0:651738eb850c 125 Y_PWM.period(Period_Array[Y_Speed]);
Dzak 0:651738eb850c 126 Y_PWM.write(0.5);
Dzak 2:31a9ee6d066d 127 //serial.printf(" Y_Period : %4.4f \n",Period_Array[Y_Speed]);
Dzak 1:2c0e9ef138a4 128 }
Dzak 1:2c0e9ef138a4 129
Dzak 1:2c0e9ef138a4 130 if(tempZ_Speed != Z_Speed)
Dzak 1:2c0e9ef138a4 131 {
Dzak 1:2c0e9ef138a4 132 tempZ_Speed = Z_Speed;
Dzak 1:2c0e9ef138a4 133 Z_PWM.period(Period_Array[Z_Speed]);
Dzak 1:2c0e9ef138a4 134 Z_PWM.write(0.5);
Dzak 2:31a9ee6d066d 135 //serial.printf(" Z_Period : %4.4f \n",Period_Array[Z_Speed]);
Dzak 0:651738eb850c 136 }
Dzak 0:651738eb850c 137 }
Dzak 0:651738eb850c 138 }
Dzak 0:651738eb850c 139
Dzak 0:651738eb850c 140