Voltage Monitor Class widh LED Alert

Dependents:   KIK01

Committer:
ryood
Date:
Sat Dec 23 09:26:27 2017 +0000
Revision:
2:ee0c146f02e6
Parent:
1:ada48e929184
Add a UART_TRACE format

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:bf80e6084873 1 /*
ryood 0:bf80e6084873 2 * Voltage Monitor Class
ryood 0:bf80e6084873 3 *
ryood 0:bf80e6084873 4 * 2017.11.26
ryood 0:bf80e6084873 5 *
ryood 0:bf80e6084873 6 */
ryood 0:bf80e6084873 7
ryood 0:bf80e6084873 8 #ifndef _VOLTAGE_MONIOR_H_
ryood 0:bf80e6084873 9 #define _VOLTAGE_MONIOR_H_
ryood 0:bf80e6084873 10
ryood 0:bf80e6084873 11 #include "mbed.h"
ryood 0:bf80e6084873 12
ryood 0:bf80e6084873 13 class VoltageMonitor
ryood 0:bf80e6084873 14 {
ryood 0:bf80e6084873 15 public:
ryood 1:ada48e929184 16 enum {
ryood 1:ada48e929184 17 VM_NORMAL = 0,
ryood 1:ada48e929184 18 VM_UNDER = -1,
ryood 1:ada48e929184 19 VM_OVER = 1
ryood 1:ada48e929184 20 };
ryood 1:ada48e929184 21
ryood 0:bf80e6084873 22 //---------------------------------------------------------------------
ryood 0:bf80e6084873 23 // パラメータ
ryood 0:bf80e6084873 24 // _ain: 電圧監視用ADC
ryood 0:bf80e6084873 25 // _vdd: VDDの電圧値(実測値を指定)
ryood 0:bf80e6084873 26 // _loThreshold: 電圧低下閾値
ryood 0:bf80e6084873 27 // _hiThreshold: 過電圧閾値
ryood 0:bf80e6084873 28 // _pLed: 警告用LED (NULL: LEDを使用しない)
ryood 0:bf80e6084873 29 VoltageMonitor(AnalogIn* _pAin, float _vdd, float _loThreshold, float _hiThreshold, DigitalOut* _pLed=NULL) :
ryood 0:bf80e6084873 30 pAin(_pAin),
ryood 0:bf80e6084873 31 vdd(_vdd),
ryood 0:bf80e6084873 32 loThreshold(_loThreshold),
ryood 0:bf80e6084873 33 hiThreshold(_hiThreshold),
ryood 0:bf80e6084873 34 pLed(_pLed),
ryood 0:bf80e6084873 35 status(VM_NORMAL)
ryood 0:bf80e6084873 36 {
ryood 0:bf80e6084873 37 if (pLed != NULL) {
ryood 0:bf80e6084873 38 *pLed = 1;
ryood 0:bf80e6084873 39 }
ryood 0:bf80e6084873 40 };
ryood 0:bf80e6084873 41
ryood 0:bf80e6084873 42 ~VoltageMonitor() {};
ryood 0:bf80e6084873 43
ryood 0:bf80e6084873 44 //---------------------------------------------------------------------
ryood 0:bf80e6084873 45 // 返り値
ryood 0:bf80e6084873 46 // -1: 電圧低下
ryood 0:bf80e6084873 47 // 0: 正常
ryood 0:bf80e6084873 48 // 1: 過電圧
ryood 0:bf80e6084873 49 int check()
ryood 0:bf80e6084873 50 {
ryood 0:bf80e6084873 51 float vMeas = pAin->read() * vdd;
ryood 0:bf80e6084873 52
ryood 0:bf80e6084873 53 int st;
ryood 0:bf80e6084873 54 if (vMeas < loThreshold) st = VM_UNDER;
ryood 0:bf80e6084873 55 else if (vMeas > hiThreshold) st = VM_OVER;
ryood 0:bf80e6084873 56 else st = VM_NORMAL;
ryood 0:bf80e6084873 57
ryood 0:bf80e6084873 58 #if UART_TRACE
ryood 2:ee0c146f02e6 59 printf("VoltageMonitor:\t%.3f\t %d\r\n", vMeas, st);
ryood 2:ee0c146f02e6 60 //printf("%.3f\r\n", vMeas);
ryood 0:bf80e6084873 61 #endif
ryood 0:bf80e6084873 62
ryood 0:bf80e6084873 63 if (st != status) {
ryood 0:bf80e6084873 64 status = st;
ryood 0:bf80e6084873 65 if (pLed != NULL) {
ryood 0:bf80e6084873 66 switch (status) {
ryood 0:bf80e6084873 67 case VM_UNDER:
ryood 0:bf80e6084873 68 t.attach(this, &VoltageMonitor::blinkLed, 0.5);
ryood 0:bf80e6084873 69 break;
ryood 0:bf80e6084873 70 case VM_OVER:
ryood 0:bf80e6084873 71 t.attach(this, &VoltageMonitor::blinkLed, 0.1);
ryood 0:bf80e6084873 72 break;
ryood 0:bf80e6084873 73 case VM_NORMAL:
ryood 0:bf80e6084873 74 t.detach();
ryood 0:bf80e6084873 75 *pLed = 1;
ryood 0:bf80e6084873 76 }
ryood 0:bf80e6084873 77 }
ryood 0:bf80e6084873 78 }
ryood 0:bf80e6084873 79
ryood 0:bf80e6084873 80 return status;
ryood 0:bf80e6084873 81 };
ryood 0:bf80e6084873 82
ryood 0:bf80e6084873 83 private:
ryood 0:bf80e6084873 84 AnalogIn* pAin;
ryood 0:bf80e6084873 85 float vdd;
ryood 0:bf80e6084873 86 float loThreshold;
ryood 0:bf80e6084873 87 float hiThreshold;
ryood 0:bf80e6084873 88 DigitalOut* pLed;
ryood 0:bf80e6084873 89 Ticker t;
ryood 0:bf80e6084873 90 int status;
ryood 0:bf80e6084873 91
ryood 0:bf80e6084873 92 void blinkLed() {
ryood 0:bf80e6084873 93 if (pLed != NULL) {
ryood 0:bf80e6084873 94 *pLed = !*pLed;
ryood 0:bf80e6084873 95 }
ryood 0:bf80e6084873 96 };
ryood 0:bf80e6084873 97 };
ryood 0:bf80e6084873 98
ryood 0:bf80e6084873 99 #endif //_VOLTAGE_MONIOR_H_