Component Test's Software to work with "Universal Controller Box" - Software is an interpreter or "compiler" for programs to be done with a .txt file and read off of the SD Card

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Files at this revision

API Documentation at this revision

Comitter:
mehatfie
Date:
Wed Sep 24 01:46:02 2014 +0000
Parent:
7:cca801103b86
Child:
9:5a0c4c6e39c7
Commit message:
- all debugging and error checking (to ensure the function works in all cases.... not to tell the user about errors) for conditionCommand should be completed for any forseen combinations required for conditional statements

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Sep 23 23:44:16 2014 +0000
+++ b/main.cpp	Wed Sep 24 01:46:02 2014 +0000
@@ -1,4 +1,3 @@
-
 #include "mbed.h"
 #include "LocalPinNames.h"
 #include "BridgeDriver.h"
@@ -171,27 +170,13 @@
         if (k == numParam - 1)
             last = 1;
             
-       if (!last && (prevCondition != AND || prevCondition != OR)){
+       if (!last){
             if (paramCondition[k].op != xAND && paramCondition[k].op != xOR && paramCondition[k + 1].op != xAND && paramCondition[k + 1].op != xOR){
-                lcd.setAddress(0,3);
-                lcd.printf("Test 0.1     ");
-                wait(1);
-                
                 //AND
                 if (paramCondition[k].op == AND){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 1.1     ");
-                    wait(1);
-                    if (!first && prevCondition != xAND && prevCondition != xOR){
-                    lcd.setAddress(0,3);
-                    lcd.printf("Test 1.11     ");
-                    wait(1);
+                    if (!first && prevCondition != xAND && prevCondition != xOR)
                         combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
-                        }
                     else if (first || prevCondition == xAND || prevCondition == xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.12     ");
-                    wait(1);
                         tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
                         combinedCondition.push_back(tempCombinedCondition);
                         first = 0;
@@ -201,19 +186,9 @@
                 
                 //OR
                 else if (paramCondition[k].op == OR){
-                    lcd.setAddress(0,3);
-                    lcd.printf("Test 1.2     ");
-                    wait(1);
-                    if (!first && prevCondition != xAND && prevCondition != xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.3     ");
-                    wait(1);
+                    if (!first && prevCondition != xAND && prevCondition != xOR)
                         combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
-                        }
                     else if (first || prevCondition == xAND || prevCondition == xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.4     ");
-                    wait(1);
                         tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
                         combinedCondition.push_back(tempCombinedCondition);
                         first = 0;
@@ -224,61 +199,58 @@
             
             // first value is something, not exclusive, but next values are exclusive
             else if (first && (paramCondition[k].op == AND || paramCondition[k].op == OR) && (paramCondition[k + 1].op == xAND || paramCondition[k + 1].op == xOR)){
-                lcd.setAddress(0,3);
-                lcd.printf("Test 1     ");
-                wait(1);
                 tempCombinedCondition.value = paramCondition[k].value;
                 tempCombinedCondition.op = paramCondition[k].op;
                 combinedCondition.push_back(tempCombinedCondition);
                 prevCondition = paramCondition[k].op;
                 first = 0;
-                lcd.setAddress(0,3);
-                lcd.printf("1cCval: %d   ", combinedCondition.back().value);
-                wait(1);
             }
             
             else{   
-                /*lcd.setAddress(0,3);
-                lcd.printf("Test 0.2     ");
-                wait(1);*/
                 //xAND
-                if (paramCondition[k].op == xAND && prevCondition == xAND){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 2.1     ");
-                    wait(1);
-                    combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
-                    prevCondition = xAND;
-                }
-                else if (paramCondition[k].op == xAND && prevCondition != xAND){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.2    ");
-                    wait(1);
-                    tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
-                    combinedCondition.push_back(tempCombinedCondition);
-                    prevCondition = xAND;
+                if (paramCondition[k].op == xAND){
+                    if (combinedCondition.size() == 0){ // No values so start a new combinedCondition
+                        tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value;
+                        tempCombinedCondition.op = xAND;
+                        combinedCondition.push_back(tempCombinedCondition);
+                        prevCondition = xAND;
+                    }
+                    else{
+                         if (combinedCondition.back().op == xAND){ // AND the value to the back most combinedCondition
+                            combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
+                            prevCondition = xAND;
+                        }
+                        else if (combinedCondition.back().op != xAND){ // Start a new combinedCondition
+                            tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
+                            tempCombinedCondition.op = xAND;
+                            combinedCondition.push_back(tempCombinedCondition);
+                            prevCondition = xAND;
+                        }
+                    }
+                        
                 }
                 
                 //xOR
-                else if (paramCondition[k].op == xOR && prevCondition == xOR){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.3     ");
-                    wait(1);
-                    combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
-                    prevCondition = xOR;
-                    lcd.setAddress(0,3);
-                    lcd.printf("2.3cCval: %d   ", combinedCondition.back().value);
-                    wait(1);
-                }
-                else if (paramCondition[k].op == xOR && prevCondition != xOR){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.4     ");
-                    wait(1);
-                    tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
-                    combinedCondition.push_back(tempCombinedCondition);
-                    prevCondition = xOR;
-                    lcd.setAddress(0,3);
-                    lcd.printf("2.4cCval: %d   ", combinedCondition.back().value);
-                    wait(1);
+                else if (paramCondition[k].op == xOR){
+                    if (combinedCondition.size() == 0){ // No values so start a new combinedCondition
+                        tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
+                        tempCombinedCondition.op = xOR;
+                        combinedCondition.push_back(tempCombinedCondition);
+                        prevCondition = xOR;
+                    }
+                    else{
+                         if (combinedCondition.back().op == xOR){ // OR the value to the back most combinedCondition
+                            combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
+                            prevCondition = xOR;
+                        }
+                        else if (combinedCondition.back().op != xOR){ // Start a new combinedCondition
+                            tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
+                            tempCombinedCondition.op = xOR;
+                            combinedCondition.push_back(tempCombinedCondition);
+                            prevCondition = xOR;
+                        }
+                    }
+                        
                 }
                 
                 // Since the k + 1 value is included in the xAND or xOR exclusively, skip checking that value, and add the appropriate AND / OR as the
@@ -290,13 +262,12 @@
                 
             }
        }
-        
-        //else if (last && (prevCondition != AND || prevCondition != OR)){
             
         
-        //the last value was not included in any combination, since directly before the last value was an xAND / xOR set that
-        // included the very last AND / OR as the set's operator
-        else if (last && (prevCondition != AND || prevCondition != OR)){
+        // the last value was not included in any combination, since directly before the last value was an xAND / xOR set that
+        // included the very last AND / OR as the set's operator, yet there is still another value that has not been combined, as it is supposed
+        // to be AND /OR to the exclusive xAND / xOR set
+        else if (last && (prevCondition == xAND || prevCondition == xOR) && (combinedCondition.back().op == AND || combinedCondition.back().op == OR)){
             tempCombinedCondition.value = paramCondition[k].value;
             tempCombinedCondition.op = NONE; 
             combinedCondition.push_back(tempCombinedCondition);
@@ -306,10 +277,6 @@
         tempCombinedCondition = ConditionOp();
     }
         
-        
-        lcd.setAddress(0,3);
-                lcd.printf("cCsize: %d   ", combinedCondition.size());
-                wait(1);
                 
     // run through all values in the combined Condition vector, AND'ing / OR'ing as appropriate
     // in the end, the last value in the array should be the final condition of the Condition statement... whether it was successful or failed
@@ -604,7 +571,7 @@
             getNextLine(selectedFile, lineData);
             int checkEnd = interpretCommand(selectedFile, lineData);   
                     
-            if (checkEnd == 0)
+            if (checkEnd == 2)
                 endOfFile = 1;
         }