Dependencies:   BNO055 MODSERIAL mbed

Revision:
2:7da645fba3eb
Parent:
1:86b2752371c2
--- a/main.cpp	Mon Nov 09 23:24:18 2015 +0000
+++ b/main.cpp	Thu Nov 12 22:05:17 2015 +0000
@@ -176,7 +176,7 @@
            brailleCharacter += add;
         }
     }
-    pc.printf("sending: %d\n",(int)brailleCharacter);
+    //pc.printf("sending: %d\n",(int)brailleCharacter);
     return brailleCharacter;
 }
 
@@ -187,6 +187,67 @@
     return str_to_bin(braille);
 }
 
+//convert old column format to new and improved format
+//old format:
+//++++++++++  0   1
+//0011223344  1   2
+//0011223344  2   4
+//0011223344  3   8
+//0011223344  4   16
+//0011223344  5   32
+//0011223344  6   64
+//0011223344  7   128
+
+//new format
+//0123456789
+
+//++++++++++  0   1
+//--222222--  1   2
+//--222222--  2   4
+//--222222--  3   8
+//1111223333  4   16
+//1111223333  5   32
+//0000224444  6   64
+//0000224444  7   128
+void convertBrailleChar(char *brailleData){
+    char lidar0 = brailleData[0] >> 4; //shift lidar0,1,3,4 data over by 4 bits (only loooking at nearest 4 data bits)
+    char lidar1 = brailleData[2] >> 4;
+    char lidar2 = brailleData[4];
+    char lidar3 = brailleData[6] >> 4;
+    char lidar4 = brailleData[8] >> 4;
+    
+    //clear brailleData
+    for(int i=0;i<10;i++)
+        if(i != 4 && i != 5)
+            brailleData[i] = 1;
+    
+    for(int i=0;i<4;i++){ //add lidar0 and lidar1 data to first 4 columns
+        int bit0 = (lidar0 >> i) & 0x01; //we want the 1st bit 1st, 4th bit 4th. Then bit mask to show only the 0x01 bit.
+        brailleData[i] += 64*bit0 + 128*bit0; //add it to bits 6 and 7
+        
+        int bit1 = (lidar1 >> i) & 0x01; //lidar 1 (rows 2, 3; columns 0-3
+        brailleData[i] += 32*bit1 + 16*bit1; 
+        
+        int j = 9-i;
+        int bit4 = (lidar4 >> i) & 0x01; //lidar 4 (rows 0, 1; columns 6-9)
+        brailleData[j] += 64*bit4 + 128*bit4;
+        
+        int bit3 = (lidar3 >> i) & 0x01; //lidar 3 (rows 2, 3; columns 6-9)
+        brailleData[j] += 32*bit3 + 16*bit3;
+        
+        if(i == 2 || i == 3){ //add lidar 2 data to top 4 rows of columns 2,3 and 6,7
+            uint8_t bit5 = ((lidar2 >> 1) << 5);// 0x00001110; //we are only interested in the smallest 3 bits (not including the LSB)
+            bit5 = bit5/16;
+            pc.printf("lidar2: %d, brailleData: %d, bit5: %d\n",lidar2,brailleData[i],bit5);
+            brailleData[i] += bit5; //no need to scale bits
+            brailleData[j] += bit5;
+        }
+    }
+   // brailleData[4] += (lidar2 & 0x11111110);
+   // brailleData[5] += (lidar2 & 0x11111110);
+    
+}
+
 int main()
 {
     pc.baud(PC_BAUD);
@@ -434,6 +495,8 @@
             }
         }
         else{
+            convertBrailleChar(brailleChar);
+            
             if(bt.writeable()){
 //                brailleChar[0] = 1;
 //                brailleChar[1] = 1+2;