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

Committer:
sbouber1
Date:
Fri Jun 10 22:21:04 2016 +0000
Revision:
10:fd4670ec0806
Parent:
9:b3674516729d
Child:
11:1a0a8fd74bc0
Optional threading

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sbouber1 10:fd4670ec0806 1 #include <vector>
sbouber1 10:fd4670ec0806 2 #include <iostream>
sbouber1 10:fd4670ec0806 3
6366295 0:dab140a197e0 4 #include "SalinityController.h"
6366295 0:dab140a197e0 5 #include "TemperatureController.h"
6366295 2:f6ebc225f232 6 #include "MotorController.h"
joran 6:067e999b9c6e 7 #include "LCDController.h"
sbouber1 9:b3674516729d 8 #include "ProximityController.h"
sbouber1 10:fd4670ec0806 9 #include "AlarmController.h"
6366295 0:dab140a197e0 10
6366295 0:dab140a197e0 11 #include "mbed.h"
sbouber1 9:b3674516729d 12 #include "rtos.h"
sbouber1 9:b3674516729d 13
6366295 0:dab140a197e0 14
6366295 0:dab140a197e0 15 int main()
6366295 0:dab140a197e0 16 {
sbouber1 10:fd4670ec0806 17 std::vector<void *> controllers;
6366295 0:dab140a197e0 18
sbouber1 10:fd4670ec0806 19 // -----------------------------------------------------------------------------
sbouber1 10:fd4670ec0806 20 /* THE FOLLOWING CONTROLLERS CAN BE THREADED BY SETTING THE FIRST ARG TO TRUE */
sbouber1 10:fd4670ec0806 21 /* THE SECOND ARG SPECIFIES THE DELAY AFTER EACH UPDATE, ONLY WHEN THREADED */
sbouber1 10:fd4670ec0806 22 // -----------------------------------------------------------------------------
sbouber1 10:fd4670ec0806 23 TemperatureController temperature(false,0);
sbouber1 10:fd4670ec0806 24 controllers.push_back((void*)&temperature);
sbouber1 9:b3674516729d 25
sbouber1 10:fd4670ec0806 26 ProximityController proximity(false,0);
sbouber1 10:fd4670ec0806 27 controllers.push_back((void*)&proximity);
sbouber1 9:b3674516729d 28
sbouber1 10:fd4670ec0806 29 SalinityController salt(false,0);
sbouber1 10:fd4670ec0806 30 controllers.push_back((void *)&salt);
sbouber1 10:fd4670ec0806 31
sbouber1 10:fd4670ec0806 32 AlarmController alarm(false,0,&temperature,&salt,&proximity);
sbouber1 10:fd4670ec0806 33 controllers.push_back((void *)&alarm);
sbouber1 10:fd4670ec0806 34 // -----------------------------------------------------------------------------
sbouber1 9:b3674516729d 35
sbouber1 9:b3674516729d 36
6366295 2:f6ebc225f232 37 MotorController motor;
sbouber1 10:fd4670ec0806 38
sbouber1 10:fd4670ec0806 39 // Only the main thread calls the LCDController, it doesn't matter if there is a small delay
joran 6:067e999b9c6e 40 LCDController lcd;
sbouber1 10:fd4670ec0806 41 lcd.splash();
sbouber1 9:b3674516729d 42
sbouber1 9:b3674516729d 43 float s = 0.0;
sbouber1 9:b3674516729d 44 float t = 0.0;
sbouber1 10:fd4670ec0806 45 float d = 0.0;
sbouber1 10:fd4670ec0806 46
sbouber1 10:fd4670ec0806 47 int i = 0;
sbouber1 9:b3674516729d 48
sbouber1 9:b3674516729d 49 while(1) {
sbouber1 10:fd4670ec0806 50
sbouber1 9:b3674516729d 51 Thread::wait(1000);
sbouber1 10:fd4670ec0806 52
sbouber1 10:fd4670ec0806 53 vector<void *>::iterator v = controllers.begin();
sbouber1 10:fd4670ec0806 54 while(v != controllers.end()) {
sbouber1 10:fd4670ec0806 55 Controller *c = ((Controller *)*v);
sbouber1 10:fd4670ec0806 56 if(!c->is_threaded())
sbouber1 10:fd4670ec0806 57 cout << "Running " << c->get_name() << " from main loop" << "\r\n";
sbouber1 10:fd4670ec0806 58 c->run();
sbouber1 10:fd4670ec0806 59 v++;
sbouber1 10:fd4670ec0806 60 }
sbouber1 10:fd4670ec0806 61
sbouber1 10:fd4670ec0806 62 // if alarm then update lcd and exit
sbouber1 10:fd4670ec0806 63 if(alarm.is_error()) {
sbouber1 10:fd4670ec0806 64 lcd.error(alarm.get_error_string());
sbouber1 10:fd4670ec0806 65 break;
sbouber1 10:fd4670ec0806 66 }
sbouber1 9:b3674516729d 67
sbouber1 9:b3674516729d 68 t = temperature.getValue();
sbouber1 10:fd4670ec0806 69 d = proximity.getValue();
sbouber1 10:fd4670ec0806 70 s = salt.getValue();
sbouber1 9:b3674516729d 71
sbouber1 9:b3674516729d 72 printf("Grabbing temperature value from main thread: %f\r\n", t);
sbouber1 10:fd4670ec0806 73 printf("Grabbing salinity value from main thread: %f\r\n", s);
sbouber1 10:fd4670ec0806 74 printf("Grabbing distance value from main thread: %f\r\n", d);
sbouber1 10:fd4670ec0806 75
sbouber1 9:b3674516729d 76
sbouber1 10:fd4670ec0806 77 if(i++ % 2)
sbouber1 10:fd4670ec0806 78 lcd.updateScreen(t, s);
sbouber1 10:fd4670ec0806 79 else
sbouber1 10:fd4670ec0806 80 lcd.updateScreen(d);
sbouber1 9:b3674516729d 81
6366295 0:dab140a197e0 82 }
6366295 0:dab140a197e0 83 }