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
SensorAlarmController.cpp@59:614f713fb48b, 2016-06-19 (annotated)
- Committer:
- sbouber1
- Date:
- Sun Jun 19 22:56:49 2016 +0000
- Revision:
- 59:614f713fb48b
- Parent:
- 58:b5f0c0f305ff
- Child:
- 60:17e0a8e2be4a
update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sbouber1 | 57:8dc3192ff150 | 1 | #include "SensorAlarmController.h" |
sbouber1 | 38:930469a33001 | 2 | |
sbouber1 | 38:930469a33001 | 3 | |
joran | 27:4f73f754fdc9 | 4 | //outputpins for alarm |
sbouber1 | 57:8dc3192ff150 | 5 | static DigitalOut buzzer(p17); |
sbouber1 | 57:8dc3192ff150 | 6 | static DigitalOut led1(LED1); |
sbouber1 | 57:8dc3192ff150 | 7 | static DigitalOut led2(LED2); |
sbouber1 | 57:8dc3192ff150 | 8 | static DigitalOut led3(LED3); |
sbouber1 | 57:8dc3192ff150 | 9 | static DigitalOut led4(LED4); |
joran | 20:521f795ea9d7 | 10 | |
joran | 27:4f73f754fdc9 | 11 | |
joran | 20:521f795ea9d7 | 12 | float readtemp; |
joran | 20:521f795ea9d7 | 13 | float readsalt; |
joran | 27:4f73f754fdc9 | 14 | float readoverflow; |
joran | 20:521f795ea9d7 | 15 | |
sbouber1 | 58:b5f0c0f305ff | 16 | void SensorAlarmController::update() { |
sbouber1 | 38:930469a33001 | 17 | |
sbouber1 | 57:8dc3192ff150 | 18 | #ifndef TEST_MODE |
sbouber1 | 38:930469a33001 | 19 | if(this->num_iters < STARTUP_ITERATIONS) { |
sbouber1 | 57:8dc3192ff150 | 20 | printf("SensorAlarmController: not running, startup phase"); |
sbouber1 | 38:930469a33001 | 21 | return; |
sbouber1 | 38:930469a33001 | 22 | } |
sbouber1 | 38:930469a33001 | 23 | #endif |
sbouber1 | 38:930469a33001 | 24 | |
sbouber1 | 59:614f713fb48b | 25 | value = sensor->getValue(); |
joran | 20:521f795ea9d7 | 26 | |
sbouber1 | 59:614f713fb48b | 27 | if ((value < min_undesired) || (value > max_undesired)) { |
sbouber1 | 59:614f713fb48b | 28 | if ((value < min_crit) || (value > max_crit)) { |
sbouber1 | 59:614f713fb48b | 29 | this->raiseAlarm(true); |
joran | 20:521f795ea9d7 | 30 | } else { |
sbouber1 | 59:614f713fb48b | 31 | this->raiseAlarm(false); |
joran | 20:521f795ea9d7 | 32 | } |
joran | 20:521f795ea9d7 | 33 | } else { |
joran | 20:521f795ea9d7 | 34 | //clear alarm |
sbouber1 | 59:614f713fb48b | 35 | timer.stop(); |
sbouber1 | 59:614f713fb48b | 36 | this->is_crit = false; |
sbouber1 | 59:614f713fb48b | 37 | } |
joran | 27:4f73f754fdc9 | 38 | |
joran | 20:521f795ea9d7 | 39 | } |
joran | 20:521f795ea9d7 | 40 | |
sbouber1 | 59:614f713fb48b | 41 | void SensorAlarmController::raiseAlarm(bool isCrit) { |
sbouber1 | 59:614f713fb48b | 42 | |
sbouber1 | 59:614f713fb48b | 43 | this->is_crit = isCrit; |
sbouber1 | 59:614f713fb48b | 44 | int readtimer = timer.read(); |
sbouber1 | 59:614f713fb48b | 45 | |
sbouber1 | 59:614f713fb48b | 46 | if (isCrit) |
sbouber1 | 59:614f713fb48b | 47 | printf("Received a critical temperature alarm (%.1f), timer is at %d\r\n", value, readtimer); |
sbouber1 | 59:614f713fb48b | 48 | if (!isCrit) |
sbouber1 | 59:614f713fb48b | 49 | printf("Received a non-critical temperature alarm (%.1f), timer is at %d\r\n", value, readtimer); |
sbouber1 | 59:614f713fb48b | 50 | |
joran | 20:521f795ea9d7 | 51 | if (readtimer > 0 ) { //already running |
sbouber1 | 59:614f713fb48b | 52 | if ((readtimer >= NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM && is_crit) || |
sbouber1 | 59:614f713fb48b | 53 | (readtimer >= NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM && !is_crit)) { |
joran | 20:521f795ea9d7 | 54 | //DO STUFF!! |
joran | 27:4f73f754fdc9 | 55 | |
joran | 27:4f73f754fdc9 | 56 | this->error = true; |
sbouber1 | 59:614f713fb48b | 57 | if (this->tempiscrit) { |
sbouber1 | 59:614f713fb48b | 58 | this->error_msg = "Crit temp!"; |
sbouber1 | 59:614f713fb48b | 59 | } else { |
sbouber1 | 59:614f713fb48b | 60 | this->error_msg = "Undes temp!"; |
sbouber1 | 59:614f713fb48b | 61 | } |
sbouber1 | 59:614f713fb48b | 62 | |
sbouber1 | 59:614f713fb48b | 63 | printf("### Temperature alarm has been triggered after %d ###\r\n", readtimer); |
joran | 20:521f795ea9d7 | 64 | buzzOnce(); |
sbouber1 | 59:614f713fb48b | 65 | timer.stop(); |
sbouber1 | 59:614f713fb48b | 66 | timer.reset(); |
sbouber1 | 59:614f713fb48b | 67 | this->is_crit = false; |
joran | 20:521f795ea9d7 | 68 | } |
joran | 20:521f795ea9d7 | 69 | } else { |
sbouber1 | 59:614f713fb48b | 70 | timer.start(); |
joran | 27:4f73f754fdc9 | 71 | } |
joran | 27:4f73f754fdc9 | 72 | } |
joran | 27:4f73f754fdc9 | 73 | |
sbouber1 | 58:b5f0c0f305ff | 74 | std::string SensorAlarmController::getName() { |
sbouber1 | 58:b5f0c0f305ff | 75 | return "AlarmController[" + this->sensor->getName() + "]"; |
sbouber1 | 11:1a0a8fd74bc0 | 76 | } |
sbouber1 | 11:1a0a8fd74bc0 | 77 | |
sbouber1 | 58:b5f0c0f305ff | 78 | bool SensorAlarmController::isError() { |
sbouber1 | 11:1a0a8fd74bc0 | 79 | return this->error; |
sbouber1 | 11:1a0a8fd74bc0 | 80 | } |
sbouber1 | 11:1a0a8fd74bc0 | 81 | |
sbouber1 | 59:614f713fb48b | 82 | char *SensorAlarmController::getErrorMessage() { |
sbouber1 | 11:1a0a8fd74bc0 | 83 | return this->error_msg; |
sbouber1 | 11:1a0a8fd74bc0 | 84 | } |
sbouber1 | 11:1a0a8fd74bc0 | 85 | |
joran | 20:521f795ea9d7 | 86 | |
sbouber1 | 57:8dc3192ff150 | 87 | void SensorAlarmController::buzzOnce() { |
joran | 20:521f795ea9d7 | 88 | |
joran | 20:521f795ea9d7 | 89 | buzzer = 1; |
joran | 20:521f795ea9d7 | 90 | led1=1; |
joran | 20:521f795ea9d7 | 91 | led2=1; |
joran | 20:521f795ea9d7 | 92 | led3=1; |
joran | 20:521f795ea9d7 | 93 | led4=1; |
joran | 20:521f795ea9d7 | 94 | wait(0.1); |
joran | 20:521f795ea9d7 | 95 | buzzer = 0; |
joran | 20:521f795ea9d7 | 96 | led1=0; |
joran | 20:521f795ea9d7 | 97 | led2=0; |
joran | 20:521f795ea9d7 | 98 | led3=0; |
joran | 20:521f795ea9d7 | 99 | led4=0; |
joran | 20:521f795ea9d7 | 100 | |
sbouber1 | 11:1a0a8fd74bc0 | 101 | } |