Program for the water play project for the course Software Testing Practical 2016 given at the VU University

Dependencies:   mbed DRV88255 TextLCD Ping mbed-rtos

Revision:
35:c9261391a995
Parent:
32:1e4919a44196
Child:
36:8aeb014bd651
--- a/PIDController.cpp	Tue Jun 14 11:17:06 2016 +0000
+++ b/PIDController.cpp	Tue Jun 14 15:31:30 2016 +0000
@@ -1,5 +1,7 @@
 #include "PIDController.h"
-#include "SalinityController.h"
+#include "testing.h"
+
+DigitalOut heater(p18);
 
 DRV8825 mtr_fresh(p21, p27, p28, p29, p22, p23);
 DRV8825 mtr_salt(p24, p27, p28, p29, p25, p26);
@@ -7,28 +9,31 @@
 
 // This is called in the main loop on every iteration
 void PIDController::update() {
-    // You can use the variables temp, salt and proximity like this:
+    
+    // Control the heater
+    // This could be done in the pumping function as well, if needed
+    this->set_heating(temp->getValue() < 32.0f);
+
     float s = this->salt->getValue();
     float sInGrams = this->getSaltInGrams();
     
     if(s <= 6.0) {
         
         float ml = this->getMlSaltyWater(sInGrams, this->proximity->getValue());
+        int ml_int = static_cast<int>(ml);
     
-        printf("PIDCONTROLLER: need to pump %.3f ml of salty water\r\n", ml);
+        printf("PIDCONTROLLER: need to pump %d (%.3f) ml of salty water\r\n", ml_int, ml);
         
-        // MAYBE DO SOME ROUNDING HERE
-    
-        // CALL this->pump_salt_water
+        //this->pump_salt_water(ml_int);
     
     } else if(s >= 9.0) {
 
         float ml = this->getMlFreshWater(s, this->proximity->getValue());
-        printf("PIDCONTROLLER: need to pump %.3f ml of fresh water\r\n", ml);
+        int ml_int = static_cast<int>(ml);
         
-        // MAYBE DO SOME ROUNDING HERE
-    
-        // CALL this->pump_fresh_water        
+        printf("PIDCONTROLLER: need to pump %d (%.3f) ml of fresh water\r\n", ml_int, ml);
+        
+        //this->pump_fresh_water(ml_int);     
         
     }
 }
@@ -43,7 +48,7 @@
     float currentppt = this->salt->getValue(); //in ppt
     float currentvol = this->proximity->getValue(); //in ml
     
-    return currentppt * (currentvol /1000);
+    return currentppt * (currentvol / 1000);
 }
 
 
@@ -57,6 +62,7 @@
 }
 
 void PIDController::pump_water(DRV8825 *mtr, int ml) {
+    
     int j = 5010 * (ml - 1);
     
     for (int i = 500; i < MAX_SPEED; i += 5) {
@@ -84,8 +90,8 @@
     for (int i = 8000; i > 500; i -= 5) {
         mtr->settings(1 / MICROSTEPS_PER_STEP, RIGHT, i);
     }
-    wait(3);
     
+    wait(3);    
 }
 
 
@@ -103,8 +109,30 @@
     float outputml = (x1 / x2 * solvolume);
     
     return outputml; // amount in ml to get 7 ppt.
+}
+
+bool PIDController::is_heating() {
+    return this->heating;    
+}
+
+void PIDController::set_heating(bool enabled) {
+    if(enabled == this->heating) return;
+    
+    this->heating = enabled;
+    if(enabled) {
+        #ifdef RUN_TESTS
+        printf("Should set heater to 1\r\n");
+        #else
+        heater = 1;
+        #endif            
+    } else {
+        #ifdef RUN_TESTS
+        printf("Should set heater to 0\r\n");
+        #else
+        heater = 0;
+        #endif    
     }
-
+}
 
 float PIDController::getMlFreshWater(float ppt, float volume) {
     return (volume * (ppt / 7.0)) - volume;