Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed DRV88255 TextLCD Ping mbed-rtos
main.cpp@11:1a0a8fd74bc0, 2016-06-10 (annotated)
- Committer:
- sbouber1
- Date:
- Fri Jun 10 22:34:57 2016 +0000
- Revision:
- 11:1a0a8fd74bc0
- Parent:
- 10:fd4670ec0806
- Child:
- 12:c51f3aba84fe
start of AlarmController
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 | |
sbouber1 | 11:1a0a8fd74bc0 | 14 | #define MAIN_THREAD_DELAY_MS 1000 |
6366295 | 0:dab140a197e0 | 15 | |
6366295 | 0:dab140a197e0 | 16 | int main() |
6366295 | 0:dab140a197e0 | 17 | { |
sbouber1 | 10:fd4670ec0806 | 18 | std::vector<void *> controllers; |
6366295 | 0:dab140a197e0 | 19 | |
sbouber1 | 10:fd4670ec0806 | 20 | // ----------------------------------------------------------------------------- |
sbouber1 | 10:fd4670ec0806 | 21 | /* THE FOLLOWING CONTROLLERS CAN BE THREADED BY SETTING THE FIRST ARG TO TRUE */ |
sbouber1 | 10:fd4670ec0806 | 22 | /* THE SECOND ARG SPECIFIES THE DELAY AFTER EACH UPDATE, ONLY WHEN THREADED */ |
sbouber1 | 10:fd4670ec0806 | 23 | // ----------------------------------------------------------------------------- |
sbouber1 | 10:fd4670ec0806 | 24 | TemperatureController temperature(false,0); |
sbouber1 | 10:fd4670ec0806 | 25 | controllers.push_back((void*)&temperature); |
sbouber1 | 9:b3674516729d | 26 | |
sbouber1 | 10:fd4670ec0806 | 27 | ProximityController proximity(false,0); |
sbouber1 | 10:fd4670ec0806 | 28 | controllers.push_back((void*)&proximity); |
sbouber1 | 9:b3674516729d | 29 | |
sbouber1 | 10:fd4670ec0806 | 30 | SalinityController salt(false,0); |
sbouber1 | 10:fd4670ec0806 | 31 | controllers.push_back((void *)&salt); |
sbouber1 | 10:fd4670ec0806 | 32 | |
sbouber1 | 10:fd4670ec0806 | 33 | AlarmController alarm(false,0,&temperature,&salt,&proximity); |
sbouber1 | 10:fd4670ec0806 | 34 | controllers.push_back((void *)&alarm); |
sbouber1 | 10:fd4670ec0806 | 35 | // ----------------------------------------------------------------------------- |
sbouber1 | 9:b3674516729d | 36 | |
sbouber1 | 9:b3674516729d | 37 | |
6366295 | 2:f6ebc225f232 | 38 | MotorController motor; |
sbouber1 | 10:fd4670ec0806 | 39 | |
sbouber1 | 10:fd4670ec0806 | 40 | // Only the main thread calls the LCDController, it doesn't matter if there is a small delay |
joran | 6:067e999b9c6e | 41 | LCDController lcd; |
sbouber1 | 10:fd4670ec0806 | 42 | lcd.splash(); |
sbouber1 | 9:b3674516729d | 43 | |
sbouber1 | 9:b3674516729d | 44 | float s = 0.0; |
sbouber1 | 9:b3674516729d | 45 | float t = 0.0; |
sbouber1 | 10:fd4670ec0806 | 46 | float d = 0.0; |
sbouber1 | 10:fd4670ec0806 | 47 | |
sbouber1 | 10:fd4670ec0806 | 48 | int i = 0; |
sbouber1 | 9:b3674516729d | 49 | |
sbouber1 | 9:b3674516729d | 50 | while(1) { |
sbouber1 | 10:fd4670ec0806 | 51 | |
sbouber1 | 11:1a0a8fd74bc0 | 52 | Thread::wait(MAIN_THREAD_DELAY_MS); |
sbouber1 | 10:fd4670ec0806 | 53 | |
sbouber1 | 10:fd4670ec0806 | 54 | vector<void *>::iterator v = controllers.begin(); |
sbouber1 | 10:fd4670ec0806 | 55 | while(v != controllers.end()) { |
sbouber1 | 11:1a0a8fd74bc0 | 56 | |
sbouber1 | 11:1a0a8fd74bc0 | 57 | // Get the next controller |
sbouber1 | 10:fd4670ec0806 | 58 | Controller *c = ((Controller *)*v); |
sbouber1 | 11:1a0a8fd74bc0 | 59 | |
sbouber1 | 10:fd4670ec0806 | 60 | if(!c->is_threaded()) |
sbouber1 | 10:fd4670ec0806 | 61 | cout << "Running " << c->get_name() << " from main loop" << "\r\n"; |
sbouber1 | 11:1a0a8fd74bc0 | 62 | |
sbouber1 | 11:1a0a8fd74bc0 | 63 | // The controller only updates here if it's not threaded |
sbouber1 | 10:fd4670ec0806 | 64 | c->run(); |
sbouber1 | 11:1a0a8fd74bc0 | 65 | |
sbouber1 | 11:1a0a8fd74bc0 | 66 | // Advance to the next controller |
sbouber1 | 10:fd4670ec0806 | 67 | v++; |
sbouber1 | 10:fd4670ec0806 | 68 | } |
sbouber1 | 10:fd4670ec0806 | 69 | |
sbouber1 | 11:1a0a8fd74bc0 | 70 | // if the alarm controller detected a dangerous situation then update lcd and exit |
sbouber1 | 11:1a0a8fd74bc0 | 71 | // TODO maybe signal threads to terminate |
sbouber1 | 10:fd4670ec0806 | 72 | if(alarm.is_error()) { |
sbouber1 | 11:1a0a8fd74bc0 | 73 | lcd.error(alarm.get_error_message()); |
sbouber1 | 10:fd4670ec0806 | 74 | break; |
sbouber1 | 10:fd4670ec0806 | 75 | } |
sbouber1 | 9:b3674516729d | 76 | |
sbouber1 | 9:b3674516729d | 77 | t = temperature.getValue(); |
sbouber1 | 10:fd4670ec0806 | 78 | d = proximity.getValue(); |
sbouber1 | 10:fd4670ec0806 | 79 | s = salt.getValue(); |
sbouber1 | 9:b3674516729d | 80 | |
sbouber1 | 9:b3674516729d | 81 | printf("Grabbing temperature value from main thread: %f\r\n", t); |
sbouber1 | 10:fd4670ec0806 | 82 | printf("Grabbing salinity value from main thread: %f\r\n", s); |
sbouber1 | 10:fd4670ec0806 | 83 | printf("Grabbing distance value from main thread: %f\r\n", d); |
sbouber1 | 10:fd4670ec0806 | 84 | |
sbouber1 | 9:b3674516729d | 85 | |
sbouber1 | 11:1a0a8fd74bc0 | 86 | // Show either temperature and salinity or the water level given by the proximity controller |
sbouber1 | 10:fd4670ec0806 | 87 | if(i++ % 2) |
sbouber1 | 10:fd4670ec0806 | 88 | lcd.updateScreen(t, s); |
sbouber1 | 10:fd4670ec0806 | 89 | else |
sbouber1 | 10:fd4670ec0806 | 90 | lcd.updateScreen(d); |
sbouber1 | 9:b3674516729d | 91 | |
6366295 | 0:dab140a197e0 | 92 | } |
6366295 | 0:dab140a197e0 | 93 | } |