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
main.cpp@10:fd4670ec0806, 2016-06-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |