Saltware / Mbed 2 deprecated Water Play

Dependencies:   mbed DRV88255 TextLCD Ping mbed-rtos

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?

UserRevisionLine numberNew 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 }