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
SensorAlarmController.cpp@73:bafd8d0f3daf, 2016-06-21 (annotated)
- Committer:
- sbouber1
- Date:
- Tue Jun 21 13:49:11 2016 +0000
- Revision:
- 73:bafd8d0f3daf
- Parent:
- 72:f8c4f731f0fe
fix
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 | |
sbouber1 | 58:b5f0c0f305ff | 11 | void SensorAlarmController::update() { |
sbouber1 | 38:930469a33001 | 12 | |
sbouber1 | 57:8dc3192ff150 | 13 | #ifndef TEST_MODE |
sbouber1 | 38:930469a33001 | 14 | if(this->num_iters < STARTUP_ITERATIONS) { |
sbouber1 | 64:735009c4c8aa | 15 | cout << this->getName() << ": not running, startup phase"; |
sbouber1 | 38:930469a33001 | 16 | return; |
sbouber1 | 38:930469a33001 | 17 | } |
sbouber1 | 38:930469a33001 | 18 | #endif |
sbouber1 | 38:930469a33001 | 19 | |
sbouber1 | 59:614f713fb48b | 20 | value = sensor->getValue(); |
joran | 20:521f795ea9d7 | 21 | |
sbouber1 | 59:614f713fb48b | 22 | if ((value < min_undesired) || (value > max_undesired)) { |
sbouber1 | 59:614f713fb48b | 23 | if ((value < min_crit) || (value > max_crit)) { |
sbouber1 | 59:614f713fb48b | 24 | this->raiseAlarm(true); |
joran | 20:521f795ea9d7 | 25 | } else { |
sbouber1 | 59:614f713fb48b | 26 | this->raiseAlarm(false); |
joran | 20:521f795ea9d7 | 27 | } |
joran | 20:521f795ea9d7 | 28 | } else { |
joran | 20:521f795ea9d7 | 29 | //clear alarm |
sbouber1 | 72:f8c4f731f0fe | 30 | printf("Clearing alarm: %s\r\n", this->getName().c_str()); |
sbouber1 | 59:614f713fb48b | 31 | timer.stop(); |
sbouber1 | 72:f8c4f731f0fe | 32 | timer.reset(); |
sbouber1 | 59:614f713fb48b | 33 | this->is_crit = false; |
joran | 67:851db0511c7c | 34 | sensor->setLed(false); |
sbouber1 | 59:614f713fb48b | 35 | } |
joran | 27:4f73f754fdc9 | 36 | |
joran | 20:521f795ea9d7 | 37 | } |
joran | 20:521f795ea9d7 | 38 | |
sbouber1 | 59:614f713fb48b | 39 | void SensorAlarmController::raiseAlarm(bool isCrit) { |
sbouber1 | 59:614f713fb48b | 40 | |
sbouber1 | 59:614f713fb48b | 41 | this->is_crit = isCrit; |
sbouber1 | 59:614f713fb48b | 42 | int readtimer = timer.read(); |
sbouber1 | 59:614f713fb48b | 43 | |
sbouber1 | 59:614f713fb48b | 44 | if (isCrit) |
sbouber1 | 72:f8c4f731f0fe | 45 | printf("Received a critical %s alarm %f timer is at %d\r\n", this->sensor->getName().c_str(), value, readtimer); |
sbouber1 | 59:614f713fb48b | 46 | if (!isCrit) |
sbouber1 | 72:f8c4f731f0fe | 47 | printf("Received a non-critical %s alarm %f timer is at %d\r\n", this->sensor->getName().c_str(), value, readtimer); |
sbouber1 | 59:614f713fb48b | 48 | |
joran | 20:521f795ea9d7 | 49 | if (readtimer > 0 ) { //already running |
sbouber1 | 59:614f713fb48b | 50 | if ((readtimer >= NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM && is_crit) || |
sbouber1 | 59:614f713fb48b | 51 | (readtimer >= NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM && !is_crit)) { |
joran | 27:4f73f754fdc9 | 52 | |
joran | 27:4f73f754fdc9 | 53 | this->error = true; |
sbouber1 | 61:6b5c2ddcea0c | 54 | if (this->is_crit) { |
sbouber1 | 64:735009c4c8aa | 55 | this->error_msg = this->error_msg_critical; |
sbouber1 | 59:614f713fb48b | 56 | } else { |
sbouber1 | 64:735009c4c8aa | 57 | this->error_msg = this->error_msg_undesired; |
sbouber1 | 59:614f713fb48b | 58 | } |
sbouber1 | 59:614f713fb48b | 59 | |
sbouber1 | 72:f8c4f731f0fe | 60 | printf("### %s alarm has been triggered after ### %d seconds\r\n", this->getName().c_str(), readtimer); |
joran | 67:851db0511c7c | 61 | sensor->setLed(true); |
joran | 20:521f795ea9d7 | 62 | buzzOnce(); |
sbouber1 | 59:614f713fb48b | 63 | timer.stop(); |
sbouber1 | 59:614f713fb48b | 64 | timer.reset(); |
sbouber1 | 59:614f713fb48b | 65 | this->is_crit = false; |
joran | 20:521f795ea9d7 | 66 | } |
joran | 20:521f795ea9d7 | 67 | } else { |
sbouber1 | 59:614f713fb48b | 68 | timer.start(); |
joran | 27:4f73f754fdc9 | 69 | } |
joran | 27:4f73f754fdc9 | 70 | } |
joran | 27:4f73f754fdc9 | 71 | |
sbouber1 | 58:b5f0c0f305ff | 72 | std::string SensorAlarmController::getName() { |
sbouber1 | 58:b5f0c0f305ff | 73 | return "AlarmController[" + this->sensor->getName() + "]"; |
sbouber1 | 11:1a0a8fd74bc0 | 74 | } |
sbouber1 | 11:1a0a8fd74bc0 | 75 | |
sbouber1 | 58:b5f0c0f305ff | 76 | bool SensorAlarmController::isError() { |
sbouber1 | 11:1a0a8fd74bc0 | 77 | return this->error; |
sbouber1 | 11:1a0a8fd74bc0 | 78 | } |
sbouber1 | 11:1a0a8fd74bc0 | 79 | |
sbouber1 | 64:735009c4c8aa | 80 | std::string SensorAlarmController::getErrorMessage() { |
sbouber1 | 11:1a0a8fd74bc0 | 81 | return this->error_msg; |
sbouber1 | 11:1a0a8fd74bc0 | 82 | } |
sbouber1 | 11:1a0a8fd74bc0 | 83 | |
sbouber1 | 64:735009c4c8aa | 84 | void SensorAlarmController::setCriticalErrorMsg(std::string msg) { |
sbouber1 | 64:735009c4c8aa | 85 | this->error_msg_critical = msg; |
sbouber1 | 64:735009c4c8aa | 86 | } |
sbouber1 | 64:735009c4c8aa | 87 | |
sbouber1 | 64:735009c4c8aa | 88 | void SensorAlarmController::setUndesiredErrorMsg(std::string msg) { |
sbouber1 | 64:735009c4c8aa | 89 | this->error_msg_undesired = msg; |
sbouber1 | 64:735009c4c8aa | 90 | } |
sbouber1 | 64:735009c4c8aa | 91 | |
sbouber1 | 73:bafd8d0f3daf | 92 | bool SensorAlarmController::isActive() { |
sbouber1 | 72:f8c4f731f0fe | 93 | return this->timer.read() > 0; |
sbouber1 | 72:f8c4f731f0fe | 94 | } |
joran | 20:521f795ea9d7 | 95 | |
sbouber1 | 57:8dc3192ff150 | 96 | void SensorAlarmController::buzzOnce() { |
joran | 20:521f795ea9d7 | 97 | |
joran | 20:521f795ea9d7 | 98 | buzzer = 1; |
joran | 20:521f795ea9d7 | 99 | wait(0.1); |
joran | 20:521f795ea9d7 | 100 | buzzer = 0; |
joran | 20:521f795ea9d7 | 101 | |
sbouber1 | 11:1a0a8fd74bc0 | 102 | } |