Saltware / Mbed 2 deprecated Water Play

Dependencies:   mbed DRV88255 TextLCD Ping mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
sbouber1
Date:
Fri Jun 10 12:38:54 2016 +0000
Parent:
6:067e999b9c6e
Commit message:
Started threading stuff

Changed in this revision

Controller.h Show annotated file Show diff for this revision Revisions of this file
MotorController.cpp Show annotated file Show diff for this revision Revisions of this file
SalinityController.cpp Show annotated file Show diff for this revision Revisions of this file
TemperatureController.cpp Show annotated file Show diff for this revision Revisions of this file
TemperatureController.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Controller.h	Fri Jun 10 12:38:54 2016 +0000
@@ -0,0 +1,10 @@
+#ifndef __CONTROLLER_H__
+#define __CONTROLLER_H__
+
+class Controller {
+    public:
+        virtual void update() = 0;
+        virtual float getValue() = 0;   
+};
+
+#endif
\ No newline at end of file
--- a/MotorController.cpp	Fri Jun 10 10:53:56 2016 +0000
+++ b/MotorController.cpp	Fri Jun 10 12:38:54 2016 +0000
@@ -26,7 +26,7 @@
         stpr_mtr1.settings(1 / MICROSTEPS_PER_STEP, LEFT, i);
     }
     
-    wait(3);
+    /*wait(3);
     
     for (int i = 500; i < MAX_SPEED; i += 5) {
         stpr_mtr1.settings(1 / MICROSTEPS_PER_STEP, RIGHT, i);
@@ -39,7 +39,7 @@
     for (int i = 8000; i > 500; i -= 5) {
         stpr_mtr1.settings(1 / MICROSTEPS_PER_STEP, RIGHT, i);
     }
-    wait(3);
+    wait(3);*/
 }
 
 void MotorController::test2()
--- a/SalinityController.cpp	Fri Jun 10 10:53:56 2016 +0000
+++ b/SalinityController.cpp	Fri Jun 10 12:38:54 2016 +0000
@@ -13,12 +13,21 @@
     float analogin_value = 0;
     float ppt = 0;
     
+    Timer t;
+    
+    t.start();
+    
     // Read 0-1.0 value
     for(int i = 0; i < N; i++)
     {
         analogin_value += salinity_sensor.read();
     }
-    // Average 10 sensor values
+    
+    t.stop();
+    
+    printf("We did %d averages of salinity in %d ms\n", N, t.read_ms());
+    
+    // Average N sensor values
     analogin_value /= (float) N;
     
     ppt = analoginToPPT(analogin_value);
--- a/TemperatureController.cpp	Fri Jun 10 10:53:56 2016 +0000
+++ b/TemperatureController.cpp	Fri Jun 10 12:38:54 2016 +0000
@@ -1,4 +1,5 @@
 #include "TemperatureController.h"
+#include "rtos.h"
 
 AnalogIn temperature_sensor(p20);
 DigitalOut heater(p18);
@@ -8,18 +9,37 @@
     printf("Initiate Temperature Controller\r\n");
 }
 
+
+float TemperatureController::getValue() {
+    return this->temperature;    
+}
+
+void TemperatureController::update() {
+    this->temperature = readSensor();
+}
+
 // Function reads sensor values and averages N sensor values
 float TemperatureController::readSensor()
 {
     float analogin_value = 0;
     float temperature = 0;
     
+    Timer t;
+    
+    t.start();
+    
     // Read 0-1.0 value
     for(int i = 0; i < N; i++)
     {
         analogin_value += temperature_sensor.read();
+        Thread::wait(100);
     }
-    // Average 10 sensor values
+    
+    t.stop();
+    
+    printf("We did %d averages of temperature in %d ms\r\n", N, t.read_ms());
+    
+    // Average N sensor values
     analogin_value /= (float) N;
     
     temperature = analoginToCelsius(analogin_value);
@@ -66,15 +86,6 @@
     printf("Temperature: %f Celsius\r\n", temperature);
 }
 
-float TemperatureController::getTemperature()
-{
-    float temperature = 0;
-    
-    temperature = readSensor();
-    
-    return temperature;
-}
-
 float TemperatureController::getOffset(float voltage)
 {
     float denominator_voltage, numerator_voltage, ratio, interpolation;
@@ -114,9 +125,11 @@
 {
     if(readSensor() < 32.0f)
     {
-        heater = 1;
+        //heater = 1;
+        printf("Should set heater to 1\r\n");
     } else {
-        heater = 0;
+        //heater = 0;
+        printf("Should set heater to 0\r\n");
     }
         
 }
\ No newline at end of file
--- a/TemperatureController.h	Fri Jun 10 10:53:56 2016 +0000
+++ b/TemperatureController.h	Fri Jun 10 12:38:54 2016 +0000
@@ -4,21 +4,30 @@
 #include "mbed.h"
 #include "stdio.h"
 
+#include "Controller.h"
+
 #define N    50
 
-class TemperatureController {
+class TemperatureController : public Controller {
     public:
         TemperatureController();
         
-        static void displayTemperature();
-        static void controlHeater();
-        static float getTemperature();
+        virtual float getValue();
+        
+        virtual void update();
     
     private:
+        float temperature;
+    
         static float readSensor();
+        
         static float analoginToCelsius(float);
         
+        static void controlHeater();
+        
         static float getOffset(float);
+        
+        static void displayTemperature();
 };
 
 #endif
\ No newline at end of file
--- a/main.cpp	Fri Jun 10 10:53:56 2016 +0000
+++ b/main.cpp	Fri Jun 10 12:38:54 2016 +0000
@@ -2,16 +2,49 @@
 #include "TemperatureController.h"
 #include "MotorController.h"
 #include "LCDController.h"
+#include "ProximityController.h"
 
 #include "mbed.h"
+#include "rtos.h"
+
+typedef struct Controllers {
+    TemperatureController *temperature;
+    SalinityController *salinity;
+    ProximityController *proximity;
+    LCDController *lcd;
+    
+} Controllers;
+
+
+
+/*
+    Continuously update controller every 100 ms
+*/
+void controller_thread(void const *args) {
+    Controller *controller = (Controller*)args;
+    
+    while(1) {
+        controller->update();
+        Thread::wait(100);
+    }
+    
+}
+
 
 int main() 
 {
     int count;
 
-    SalinityController salt;
     TemperatureController temperature;
+    Thread t1(controller_thread, (Controller*)&temperature);
+    
+    //SalinityController salt;
+    //Thread t2(controller_thread, (Controller*)&salt);
+    
+    
+    
     MotorController motor;
+    // Keep LCD controller outside thread
     LCDController lcd;
     
 //    for(int i = 0; i < 20; i++)
@@ -19,8 +52,8 @@
 //        motor.test();
 //        motor.test2();
 //    }
-    lcd.splash();
-    while(1) {        
+    //lcd.splash();
+    //while(1) {        
        // printf("%d> ", count);
         
        // salt.displayPPT();
@@ -29,9 +62,27 @@
         
       //  temperature.controlHeater();
         
-        lcd.updateScreen(temperature.getTemperature(),salt.getVoltage());
-        count++;
+     //   lcd.updateScreen(temperature.getTemperature(),salt.getVoltage());
+     //   count++;
         
-        wait(0.5);
+     //   wait(0.5);
+    //}
+    
+    float s = 0.0;
+    float t = 0.0;
+    
+    while(1) {
+        lcd.splash();
+        Thread::wait(1000);
+
+        t = temperature.getValue();
+        // s=... 
+
+        printf("Grabbing temperature value from main thread: %f\r\n", t);
+        //printf("Grabbing salinity value from main thread: %f\n", salt.getValue());
+        
+        lcd.updateScreen(t, s);     
+        
+        motor.test();
     }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Jun 10 12:38:54 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#4c105b8d7cae