POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel

Dependencies:   mbed vt100

Committer:
Rhyme
Date:
Thu Dec 07 10:13:13 2017 +0000
Revision:
8:5590f55bdf41
Parent:
7:aa858d789025
Child:
9:f958fa2cdc74
commit at the end of 7-Dec-2017

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:f0de320e23ac 1 #include "mbed.h"
Rhyme 0:f0de320e23ac 2 #include "edge_sensor.h"
Rhyme 0:f0de320e23ac 3 #include "edge_time.h"
Rhyme 0:f0de320e23ac 4 #include "PSE530.h"
Rhyme 0:f0de320e23ac 5 #include "edge_pressure.h"
Rhyme 0:f0de320e23ac 6 #include "SO1602A.h"
Rhyme 0:f0de320e23ac 7
Rhyme 3:cac964851bb6 8 extern SO1602A *display ; /* OLED display on I2C */
Rhyme 0:f0de320e23ac 9
Rhyme 0:f0de320e23ac 10 #define LOW_THR 0.2
Rhyme 0:f0de320e23ac 11 #define HIGH_THR 0.3
Rhyme 0:f0de320e23ac 12 #define MIN_TEMP 12.0
Rhyme 0:f0de320e23ac 13 #define MAX_TEMP 30.0
Rhyme 0:f0de320e23ac 14
Rhyme 0:f0de320e23ac 15 /**
Rhyme 0:f0de320e23ac 16 * SMC PSE530 pressure sensor
Rhyme 0:f0de320e23ac 17 * analog output 1.0V - 5.0V
Rhyme 0:f0de320e23ac 18 * 1.0V : 0
Rhyme 0:f0de320e23ac 19 * 5.0V : 1MPa
Rhyme 0:f0de320e23ac 20 * (at 0.6V : -0.1MPa)
Rhyme 0:f0de320e23ac 21 * Our sensor I/F converts 0-5V to 0-3V
Rhyme 0:f0de320e23ac 22 * So we suppose V = Analog Float Value : Pressure
Rhyme 0:f0de320e23ac 23 * 0.6V = 0.2 : 0
Rhyme 0:f0de320e23ac 24 * 3.0V = 1.0 : 1MPa
Rhyme 0:f0de320e23ac 25 */
Rhyme 0:f0de320e23ac 26
Rhyme 0:f0de320e23ac 27 float temp2expected(float temp)
Rhyme 0:f0de320e23ac 28 {
Rhyme 0:f0de320e23ac 29 const float coef_A = 0.089 ;
Rhyme 0:f0de320e23ac 30 const float coef_B = 0.831 ;
Rhyme 0:f0de320e23ac 31 float pressure ;
Rhyme 0:f0de320e23ac 32
Rhyme 0:f0de320e23ac 33 pressure = temp * coef_A + coef_B ;
Rhyme 0:f0de320e23ac 34 return( pressure ) ;
Rhyme 0:f0de320e23ac 35 }
Rhyme 0:f0de320e23ac 36
Rhyme 0:f0de320e23ac 37 edge_pressure::edge_pressure(PSE530 *pse)
Rhyme 0:f0de320e23ac 38 {
Rhyme 0:f0de320e23ac 39 _pse = pse ;
Rhyme 0:f0de320e23ac 40 _value = 0.0 ;
Rhyme 0:f0de320e23ac 41 _interval = 30 ;
Rhyme 0:f0de320e23ac 42 }
Rhyme 0:f0de320e23ac 43
Rhyme 0:f0de320e23ac 44 edge_pressure::~edge_pressure(void)
Rhyme 0:f0de320e23ac 45 {
Rhyme 0:f0de320e23ac 46 if (_pse) {
Rhyme 0:f0de320e23ac 47 delete _pse ;
Rhyme 0:f0de320e23ac 48 }
Rhyme 0:f0de320e23ac 49 _value = 0.0 ;
Rhyme 0:f0de320e23ac 50 }
Rhyme 0:f0de320e23ac 51
Rhyme 0:f0de320e23ac 52 float edge_pressure::get_value(void)
Rhyme 0:f0de320e23ac 53 {
Rhyme 0:f0de320e23ac 54 float value = 0.0 ;
Rhyme 0:f0de320e23ac 55 value = _pse->getPressure() ;
Rhyme 0:f0de320e23ac 56 return( value ) ;
Rhyme 0:f0de320e23ac 57 }
Rhyme 0:f0de320e23ac 58
Rhyme 0:f0de320e23ac 59 void edge_pressure::reset(void)
Rhyme 0:f0de320e23ac 60 {
Rhyme 0:f0de320e23ac 61 _value = 0.0 ;
Rhyme 0:f0de320e23ac 62 _sampled_time = 0 ;
Rhyme 0:f0de320e23ac 63 }
Rhyme 0:f0de320e23ac 64
Rhyme 0:f0de320e23ac 65 void edge_pressure::prepare(void)
Rhyme 0:f0de320e23ac 66 {
Rhyme 0:f0de320e23ac 67 }
Rhyme 0:f0de320e23ac 68
Rhyme 0:f0de320e23ac 69 void edge_pressure::sample(void)
Rhyme 0:f0de320e23ac 70 {
Rhyme 0:f0de320e23ac 71 _value = get_value() ;
Rhyme 0:f0de320e23ac 72 _sampled_time = edge_time ;
Rhyme 0:f0de320e23ac 73 }
Rhyme 0:f0de320e23ac 74
Rhyme 0:f0de320e23ac 75 int edge_pressure::deliver(void)
Rhyme 0:f0de320e23ac 76 {
Rhyme 0:f0de320e23ac 77 char str_buf[32] ;
Rhyme 8:5590f55bdf41 78 char timestr[16] ;
Rhyme 0:f0de320e23ac 79 int result ;
Rhyme 0:f0de320e23ac 80 float expected ;
Rhyme 0:f0de320e23ac 81 print_time(_sampled_time) ;
Rhyme 0:f0de320e23ac 82 if (current_temp != 0) {
Rhyme 0:f0de320e23ac 83 sprintf(str_buf, "GAS:%.2f @ %.1fC", _value, *current_temp ) ;
Rhyme 0:f0de320e23ac 84 } else {
Rhyme 0:f0de320e23ac 85 sprintf(str_buf, "GAS:%.2f ", _value ) ;
Rhyme 0:f0de320e23ac 86 }
Rhyme 3:cac964851bb6 87 printf(" ") ;
Rhyme 0:f0de320e23ac 88 printf(str_buf) ;
Rhyme 3:cac964851bb6 89 if (display != 0) {
Rhyme 3:cac964851bb6 90 display->clearDisplay() ;
Rhyme 3:cac964851bb6 91 display->locate(0, 0) ;
Rhyme 3:cac964851bb6 92 display->putStr(str_buf) ;
Rhyme 0:f0de320e23ac 93 }
Rhyme 0:f0de320e23ac 94 if (current_temp != 0) {
Rhyme 0:f0de320e23ac 95 expected = temp2expected(*current_temp) ;
Rhyme 0:f0de320e23ac 96 if (_value > (expected + HIGH_THR)) {
Rhyme 0:f0de320e23ac 97 sprintf(str_buf, "High [exp %.2f]", expected) ;
Rhyme 0:f0de320e23ac 98 } else if (_value < (expected - LOW_THR)) {
Rhyme 0:f0de320e23ac 99 sprintf(str_buf, "Low [exp %.2f]", expected) ;
Rhyme 0:f0de320e23ac 100 } else {
Rhyme 0:f0de320e23ac 101 sprintf(str_buf, "Normal") ;
Rhyme 0:f0de320e23ac 102 }
Rhyme 0:f0de320e23ac 103 }
Rhyme 3:cac964851bb6 104 if (display != 0) {
Rhyme 3:cac964851bb6 105 display->locate(0, 1) ;
Rhyme 3:cac964851bb6 106 display->putStr(str_buf) ;
Rhyme 0:f0de320e23ac 107 }
Rhyme 3:cac964851bb6 108 printf(" %s\n", str_buf) ;
Rhyme 8:5590f55bdf41 109 time2seq(_sampled_time, timestr) ;
Rhyme 3:cac964851bb6 110 // printf(str_buf) ;
Rhyme 3:cac964851bb6 111 // printf("\n") ;
Rhyme 0:f0de320e23ac 112 sprintf(_str_buf,
Rhyme 8:5590f55bdf41 113 "{\"DEVICE\":\"PRESS\",\"PN\":\"PSE530\",\"VAL\":\"%.3f\",\"UNIT\":\"kgf/cm2\",\"S\":\"%s\",\"E\":\"%d\"}",
Rhyme 8:5590f55bdf41 114 _value, timestr, _error_count) ;
Rhyme 0:f0de320e23ac 115 result = afero->setAttribute(1, _str_buf) ;
Rhyme 0:f0de320e23ac 116 return( result == afSUCCESS ) ;
Rhyme 0:f0de320e23ac 117 }
Rhyme 0:f0de320e23ac 118
Rhyme 0:f0de320e23ac 119 void edge_pressure::recv_config(void)
Rhyme 0:f0de320e23ac 120 {
Rhyme 0:f0de320e23ac 121 }
Rhyme 0:f0de320e23ac 122
Rhyme 0:f0de320e23ac 123 void edge_pressure::send_config(void)
Rhyme 0:f0de320e23ac 124 {
Rhyme 0:f0de320e23ac 125 }