Communicate with danBed via UART

Dependencies:   mbed

Revision:
1:1d18a2a3e9a0
Parent:
0:fc1ff02f51e1
Child:
2:4e81ddaec100
--- a/main.cpp	Thu Feb 12 12:34:29 2015 +0000
+++ b/main.cpp	Thu Feb 19 12:01:30 2015 +0000
@@ -1,6 +1,36 @@
 #include "mbed.h"
 #include <string>
 
+DigitalOut P5(p5);
+DigitalOut P6(p6);
+DigitalOut P7(p7);
+DigitalOut P8(p8);
+DigitalOut P9(p9);
+DigitalOut P10(p10);
+DigitalOut P11(p11);
+DigitalOut P12(p12);
+DigitalOut P13(p13);
+DigitalOut P14(p14);
+
+AnalogIn P15(p15);
+AnalogIn P16(p16);
+AnalogIn P17(p17);
+AnalogIn P18(p18);
+AnalogIn P19(p19);
+AnalogIn P20(p20);
+
+PwmOut P21(p21);
+PwmOut P22(p22);
+PwmOut P23(p23);
+PwmOut P24(p24);
+PwmOut P25(p25);
+PwmOut P26(p26);
+
+DigitalOut P27(p27);
+DigitalOut P28(p28);
+DigitalOut P29(p29);
+DigitalOut P30(p30);
+
 PwmOut RED(LED1);
 PwmOut BLUE(LED2);
 PwmOut GREEN(LED3);
@@ -10,6 +40,8 @@
 Serial pc(USBTX, USBRX);
 
 void receive();
+void extractCommand(char *buffer, int &value); 
+int power(int pow);
 char temp[100];
 
 int main() {
@@ -21,7 +53,7 @@
     
     pc.baud(115200);
     
-    pc.printf("\r\nWelcome to danBed communication v1.0!");
+    pc.printf("\r\nWelcome to danBed communication v1.1!");
     pc.printf("\r\nWrite 'Labas' to continue...\r\n");
     
     GET:
@@ -39,28 +71,150 @@
     while(1) {
         
         receive();
-        char buffer[20];
-        float value;
+        char buffer[10];
+        int value = 0;
         
-        //sscanf(temp,"%s %f", buffer, &value); 
-        for(int j = 0; j < 10; j++) pc.printf("\r\n%i", buffer[j]);
+        memset(buffer, 0, sizeof(buffer));
+        extractCommand(buffer, value); 
         
-        if(buffer == "RGB"){
+        
+        if(strcmp(buffer, "RGB") == 0){
             RGB = value;
             if(value == 1) pc.printf("\r\nRGB turned ON\r\n");
             else pc.printf("\r\nRGB turned OFF\r\n");
         }
-        else if(buffer == "RED"){
-            RED = value;
-            pc.printf("\r\nRED value %0.2f\r\n", value);
+        else if(strcmp(buffer, "RED") == 0){
+            float tmp = ((float) value) / 255;
+            RED = tmp;
+            pc.printf("\r\nRED value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "GREEN") == 0){
+            float tmp = ((float) value) / 255;
+            GREEN = tmp;
+            pc.printf("\r\nGREEN value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "BLUE") == 0){
+            float tmp = ((float) value) / 255;
+            BLUE = tmp;
+            pc.printf("\r\nBLUE value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P5") == 0){
+            float tmp = ((float) value) / 255;
+            P5 = tmp;
+            pc.printf("\r\nP5 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P6") == 0){
+            float tmp = ((float) value) / 255;
+            P6 = tmp;
+            pc.printf("\r\nP6 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P7") == 0){
+            float tmp = ((float) value) / 255;
+            P7 = tmp;
+            pc.printf("\r\nP7 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P8") == 0){
+            float tmp = ((float) value) / 255;
+            P8 = tmp;
+            pc.printf("\r\nP8 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P9") == 0){
+            float tmp = ((float) value) / 255;
+            P9 = tmp;
+            pc.printf("\r\nP9 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P10") == 0){
+            float tmp = ((float) value) / 255;
+            P10 = tmp;
+            pc.printf("\r\nP10 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P11") == 0){
+            float tmp = ((float) value) / 255;
+            P11 = tmp;
+            pc.printf("\r\nP11 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P12") == 0){
+            float tmp = ((float) value) / 255;
+            P12 = tmp;
+            pc.printf("\r\nP12 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P13") == 0){
+            float tmp = ((float) value) / 255;
+            P13 = tmp;
+            pc.printf("\r\nP13 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P14") == 0){
+            float tmp = ((float) value) / 255;
+            P14 = tmp;
+            pc.printf("\r\nP14 value %i\r\n", value);
         }
-        else if(buffer == "GREEN"){
-            GREEN = value;
-            pc.printf("\r\nGREEN value %0.2f\r\n", value);
+        else if(strcmp(buffer, "P15") == 0){
+            pc.printf("\r\nRead analog P15 value = %fV\r\n", (P15 * 3.3));
+        }
+        else if(strcmp(buffer, "P16") == 0){
+            pc.printf("\r\nRead analog P16 value = %fV\r\n", (P16 * 3.3));
+        }
+        else if(strcmp(buffer, "P17") == 0){
+            pc.printf("\r\nRead analog P17 value = %fV\r\n", (P17 * 3.3));
+        }
+        else if(strcmp(buffer, "P18") == 0){
+            pc.printf("\r\nRead analog P18 value = %fV\r\n", (P18 * 3.3));
+        }
+        else if(strcmp(buffer, "P19") == 0){
+            pc.printf("\r\nRead analog P19 value = %fV\r\n", (P19 * 3.3));
+        }
+        else if(strcmp(buffer, "P20") == 0){
+            pc.printf("\r\nRead analog P20 value = %fV\r\n", (P20 * 3.3));
+        }      
+        else if(strcmp(buffer, "P21") == 0){
+            float tmp = ((float) value) / 255;
+            P21 = tmp;
+            pc.printf("\r\nP21 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P22") == 0){
+            float tmp = ((float) value) / 255;
+            P22 = tmp;
+            pc.printf("\r\nP22 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P23") == 0){
+            float tmp = ((float) value) / 255;
+            P23 = tmp;
+            pc.printf("\r\nP23 value %i\r\n", value);
         }
-        else if(buffer == "BLUE"){
-            BLUE = value;
-            pc.printf("\r\nBLUE value %0.2f\r\n", value);
+        else if(strcmp(buffer, "P24") == 0){
+            float tmp = ((float) value) / 255;
+            P24 = tmp;
+            pc.printf("\r\nP24 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P25") == 0){
+            float tmp = ((float) value) / 255;
+            P25 = tmp;
+            pc.printf("\r\nP25 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P26") == 0){
+            float tmp = ((float) value) / 255;
+            P26 = tmp;
+            pc.printf("\r\nP26 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P27") == 0){
+            float tmp = ((float) value) / 255;
+            P27 = tmp;
+            pc.printf("\r\nP27 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P28") == 0){
+            float tmp = ((float) value) / 255;
+            P28 = tmp;
+            pc.printf("\r\nP28 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P29") == 0){
+            float tmp = ((float) value) / 255;
+            P29 = tmp;
+            pc.printf("\r\nP29 value %i\r\n", value);
+        }
+        else if(strcmp(buffer, "P30") == 0){
+            float tmp = ((float) value) / 255;
+            P30 = tmp;
+            pc.printf("\r\nP30 value %i\r\n", value);
         }
         else pc.printf("\r\nCommand not recognised!\r\n");
         //else if(receiver == "RED"){
@@ -71,7 +225,6 @@
 void receive(){
     memset(temp, 255, sizeof(temp));
     char c;
-    
     int i = 0;
     
     while(true){
@@ -87,3 +240,55 @@
         }
     }
 } 
+
+void extractCommand(char *buffer, int &value){
+    bool inNumber = false;
+    int difference = 0;
+    int number[10];
+    for(int i = 0; i < 100; i++){       
+        
+        if(temp[i] == 0){
+                value = 0;
+                return;
+        }      
+        if(inNumber){
+            if(temp[i] != 62){
+                number[i - difference] = temp[i] - 48;    
+            }
+            else{
+                value = 0;
+                int decimals = i - difference;
+                //pc.printf("\r\nNumber of decimals = %i", decimals);
+                for(int i = 0; i < decimals; i++){
+                    int temp = decimals - i - 1;
+                    //pc.printf("\r\nTemp = %i Number = %i Power = %i", temp, number[i], power(temp));
+                    value = value + (number[i] * power(temp));  
+                    //pc.printf("\r\nValue = %i", value);          
+                }
+                //pc.printf("\r\nFinal value = %i", value);
+                return;
+            }
+        }
+        
+        if((temp[i] != 60) && !(inNumber)){
+            buffer[i] = temp[i];
+        }
+        else if(!(inNumber)){
+            inNumber = true;
+            difference = i + 1;
+            //pc.printf("\r\nIn number, difference = %i", difference);
+        }        
+    }    
+} 
+
+int power(int pow){
+    
+    if(pow == 0) return 1;
+    
+    int rezult = 1;
+    
+    for(int i = 1; i <= pow; i++){
+         rezult *= 10;
+    }
+    return rezult;
+}