Program for STCL Control of motors via PWM

Dependencies:   SoftPWM USBDevice mbed

Revision:
2:31a9ee6d066d
Parent:
1:2c0e9ef138a4
Child:
3:7a2b052c95a3
--- a/main.cpp	Fri Apr 17 03:14:39 2015 +0000
+++ b/main.cpp	Fri Apr 17 04:46:12 2015 +0000
@@ -1,5 +1,5 @@
 #include "mbed.h"
-#include "USBSerial.h"
+//#include "USBSerial.h"
 #include "SoftPWM.h"
 
 AnalogIn Y_Axis(P0_13);
@@ -10,7 +10,10 @@
 SoftPWM Y_PWM(P0_10); //P0_10
 SoftPWM Z_PWM(P0_4); //P0_4
 
-USBSerial serial;
+//USBSerial serial;
+
+Serial Send_Stage_Controller(P0_19,NC);    
+//Serial Receive_Stage_Controller(NC,P0_18);  //NULL-MOdem
 
 #define MAX_LOGIC  10000   // Full-deflection Max Range
 #define MIN_LOGIC  0       // Full-deflection Min Range
@@ -30,15 +33,17 @@
 uint16_t Y_Speed = 4;
 uint16_t Z_Speed = 4;
 
-bool X_Direction = FWD;
-bool Y_Direction = FWD;
-bool Z_Direction = FWD;
+char X_Direction = FWD;
+char Y_Direction = FWD;
+char Z_Direction = FWD;
 
 uint16_t tempX_Speed = 1;
 uint16_t tempY_Speed = 1;
 uint16_t tempZ_Speed = 1;
 
-
+char Direction_Byte = 0x00;   //This byte contains all the info about directions. USed for transfer to Stage Controller
+    
+    
 main()
 {
     while(1)
@@ -59,9 +64,51 @@
        if (Z_Speed < 2) {Z_Direction = REV;}
         
         
-        serial.printf(" X_Direction : %u",   X_Direction);
-        serial.printf(" Y_Direction : %u \n",Y_Direction);
-        serial.printf(" Z_Direction : %u \n",Z_Direction);
+       
+       /*
+       Assemble the Direction byte for ransmission over Serial to Stage Controller. X_Dir bit 2  Y_Dir bit 1, and Z_Dir bit 0
+       */
+       
+       
+        Direction_Byte = Direction_Byte >> 3;                          //Clear 3 previous LSBits
+        Direction_Byte = (Direction_Byte | X_Direction) << 1;          //Place X_Dir value and shift right: X_Dir is now bit 1
+        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
+        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
+        
+        Send_Stage_Controller.putc(Direction_Byte);
+        
+        
+        /*
+        //============================================================================
+        //At the receiver side the Direction_Byte will will be decoded as follows:
+        
+        char Mask_X = 0x04;
+        char Mask_Y = 0x02;
+        char Mask_Z = 0x01;
+        
+        char Manual_Direction_Received = Receive_Stage_Controller.getc();
+        
+        char X_Dir_Received = (Manual_Direction_Received & Mask_X) >> 2;
+        char Y_Dir_Received = (Manual_Direction_Received & Mask_Y) >> 1;
+        char Z_Dir_Received = Manual_Direction_Received & Mask_Z;
+        */
+        
+        
+        /*
+        //=======================Only For Testing via NULL-Modem========================
+        
+        wait(1);
+        serial.printf("X_Direction : %u\n",X_Dir_Received);
+        serial.printf("Y_Direction : %u\n",Y_Dir_Received);
+        serial.printf("Z_Direction : %u\n",Z_Dir_Received);
+        
+        */
+        //=============================================================================
+       
+       
+        //serial.printf(" X_Direction : %u",   X_Direction);
+        //serial.printf(" Y_Direction : %u \n",Y_Direction);
+        //serial.printf(" Z_Direction : %u \n",Z_Direction);
      
         if(tempX_Speed != X_Speed)
         {
@@ -69,7 +116,7 @@
             X_PWM.period(Period_Array[X_Speed]);   
             X_PWM.write(0.5);  
             
-        serial.printf(" X_Period : %4.4f \n",Period_Array[X_Speed]);
+        //serial.printf(" X_Period : %4.4f \n",Period_Array[X_Speed]);
         }
         
         if(tempY_Speed != Y_Speed)
@@ -77,7 +124,7 @@
             tempY_Speed = Y_Speed;
             Y_PWM.period(Period_Array[Y_Speed]); 
             Y_PWM.write(0.5);    
-        serial.printf(" Y_Period : %4.4f \n",Period_Array[Y_Speed]);
+        //serial.printf(" Y_Period : %4.4f \n",Period_Array[Y_Speed]);
         }
         
         if(tempZ_Speed != Z_Speed)
@@ -85,7 +132,7 @@
             tempZ_Speed = Z_Speed;
             Z_PWM.period(Period_Array[Z_Speed]); 
             Z_PWM.write(0.5);    
-        serial.printf(" Z_Period : %4.4f \n",Period_Array[Z_Speed]);
+        //serial.printf(" Z_Period : %4.4f \n",Period_Array[Z_Speed]);
         }
 }
 }