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

Dependencies:   mbed vt100

Committer:
Rhyme
Date:
Tue Dec 12 06:53:12 2017 +0000
Revision:
13:88ee926c56ae
Parent:
0:f0de320e23ac
MCU Reset Reason Attribute added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:f0de320e23ac 1 #include "mbed.h"
Rhyme 0:f0de320e23ac 2 #include "vt100.h"
Rhyme 0:f0de320e23ac 3 #include "edge_time.h"
Rhyme 0:f0de320e23ac 4 #include "edge_sensor.h"
Rhyme 0:f0de320e23ac 5
Rhyme 0:f0de320e23ac 6 extern vt100 *tty ;
Rhyme 0:f0de320e23ac 7 static uint16_t id = 0 ;
Rhyme 0:f0de320e23ac 8
Rhyme 0:f0de320e23ac 9 edge_sensor::edge_sensor()
Rhyme 0:f0de320e23ac 10 {
Rhyme 0:f0de320e23ac 11 _interval = 0 ;
Rhyme 0:f0de320e23ac 12 _prev_status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:f0de320e23ac 13 _status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:f0de320e23ac 14 _id = id++ ;
Rhyme 0:f0de320e23ac 15 _enable = false ;
Rhyme 0:f0de320e23ac 16 _error_count = 0 ;
Rhyme 0:f0de320e23ac 17 }
Rhyme 0:f0de320e23ac 18
Rhyme 0:f0de320e23ac 19 edge_sensor::~edge_sensor()
Rhyme 0:f0de320e23ac 20 {
Rhyme 0:f0de320e23ac 21 }
Rhyme 0:f0de320e23ac 22
Rhyme 0:f0de320e23ac 23 void edge_sensor::reset(void)
Rhyme 0:f0de320e23ac 24 {
Rhyme 0:f0de320e23ac 25 _status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:f0de320e23ac 26 }
Rhyme 0:f0de320e23ac 27
Rhyme 0:f0de320e23ac 28 void edge_sensor::enable(void)
Rhyme 0:f0de320e23ac 29 {
Rhyme 0:f0de320e23ac 30 _enable = true ;
Rhyme 0:f0de320e23ac 31 }
Rhyme 0:f0de320e23ac 32
Rhyme 0:f0de320e23ac 33 void edge_sensor::disable(void)
Rhyme 0:f0de320e23ac 34 {
Rhyme 0:f0de320e23ac 35 _enable = false ;
Rhyme 0:f0de320e23ac 36 }
Rhyme 0:f0de320e23ac 37
Rhyme 0:f0de320e23ac 38 bool edge_sensor::isEnabled(void)
Rhyme 0:f0de320e23ac 39 {
Rhyme 0:f0de320e23ac 40 return( _enable ) ;
Rhyme 0:f0de320e23ac 41 }
Rhyme 0:f0de320e23ac 42
Rhyme 0:f0de320e23ac 43 void edge_sensor::prepare(void)
Rhyme 0:f0de320e23ac 44 {
Rhyme 0:f0de320e23ac 45 // printf("Sensor %d prepare for sample\n", _id) ;
Rhyme 0:f0de320e23ac 46 }
Rhyme 0:f0de320e23ac 47
Rhyme 0:f0de320e23ac 48 void edge_sensor::sample(void)
Rhyme 0:f0de320e23ac 49 {
Rhyme 0:f0de320e23ac 50 // printf("Sensor %d sample\n", _id) ;
Rhyme 0:f0de320e23ac 51 }
Rhyme 0:f0de320e23ac 52
Rhyme 0:f0de320e23ac 53 int edge_sensor::deliver(void)
Rhyme 0:f0de320e23ac 54 {
Rhyme 0:f0de320e23ac 55 // printf("Sensor %d data delivered\n", _id) ;
Rhyme 0:f0de320e23ac 56 /* usually return( result == afSUCCESS ) ; */
Rhyme 0:f0de320e23ac 57 return 1 ; /* return non zero for success */
Rhyme 0:f0de320e23ac 58 }
Rhyme 0:f0de320e23ac 59
Rhyme 0:f0de320e23ac 60 void edge_sensor::toJson(char *buf)
Rhyme 0:f0de320e23ac 61 {
Rhyme 0:f0de320e23ac 62 sprintf(buf, "EDGE_SENSOR%d is not a real sensor", _id) ;
Rhyme 0:f0de320e23ac 63 }
Rhyme 0:f0de320e23ac 64
Rhyme 0:f0de320e23ac 65 void edge_sensor::setInterval(uint16_t interval)
Rhyme 0:f0de320e23ac 66 {
Rhyme 0:f0de320e23ac 67 _interval = interval ;
Rhyme 0:f0de320e23ac 68 }
Rhyme 0:f0de320e23ac 69
Rhyme 0:f0de320e23ac 70 uint16_t edge_sensor::getInterval(void)
Rhyme 0:f0de320e23ac 71 {
Rhyme 0:f0de320e23ac 72 return( _interval ) ;
Rhyme 0:f0de320e23ac 73 }
Rhyme 0:f0de320e23ac 74
Rhyme 0:f0de320e23ac 75 int edge_sensor::getStatus(void)
Rhyme 0:f0de320e23ac 76 {
Rhyme 0:f0de320e23ac 77 return( _status ) ;
Rhyme 0:f0de320e23ac 78 }
Rhyme 0:f0de320e23ac 79
Rhyme 0:f0de320e23ac 80 /*
Rhyme 0:f0de320e23ac 81 #define EDGE_SENSOR_INACTIVE 0
Rhyme 0:f0de320e23ac 82 #define EDGE_SENSOR_WAIT 1
Rhyme 0:f0de320e23ac 83 #define EDGE_SENSOR_READY 2
Rhyme 0:f0de320e23ac 84 #define EDGE_SENSOR_PREPARED 3
Rhyme 0:f0de320e23ac 85 #define EDGE_SENSOR_SAMPLED 4
Rhyme 0:f0de320e23ac 86 #define EDGE_SENSOR_DELIVERD 5
Rhyme 0:f0de320e23ac 87 */
Rhyme 0:f0de320e23ac 88
Rhyme 0:f0de320e23ac 89 int edge_sensor::runStateMachine(void)
Rhyme 0:f0de320e23ac 90 {
Rhyme 0:f0de320e23ac 91 int result ;
Rhyme 0:f0de320e23ac 92 switch(_status) {
Rhyme 0:f0de320e23ac 93 case EDGE_SENSOR_INACTIVE: /* inactive */
Rhyme 0:f0de320e23ac 94 if (isEnabled()) {
Rhyme 0:f0de320e23ac 95 _status = EDGE_SENSOR_WAIT ;
Rhyme 0:f0de320e23ac 96 }
Rhyme 0:f0de320e23ac 97 _prev_status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:f0de320e23ac 98 break ;
Rhyme 0:f0de320e23ac 99 case EDGE_SENSOR_WAIT: /* wait for interval time expires */
Rhyme 0:f0de320e23ac 100 if (_prev_status != _status) {
Rhyme 0:f0de320e23ac 101 _end_interval = edge_time + _interval ;
Rhyme 0:f0de320e23ac 102 }
Rhyme 0:f0de320e23ac 103 _prev_status = EDGE_SENSOR_WAIT ;
Rhyme 0:f0de320e23ac 104 if (edge_time >= _end_interval) {
Rhyme 0:f0de320e23ac 105 _status = EDGE_SENSOR_READY ;
Rhyme 0:f0de320e23ac 106 }
Rhyme 0:f0de320e23ac 107 break ;
Rhyme 0:f0de320e23ac 108 case EDGE_SENSOR_READY: /* prepare to sample */
Rhyme 0:f0de320e23ac 109 sample() ;
Rhyme 0:f0de320e23ac 110 _prev_status = EDGE_SENSOR_READY ;
Rhyme 0:f0de320e23ac 111 _status = EDGE_SENSOR_SAMPLED ;
Rhyme 0:f0de320e23ac 112 break ;
Rhyme 0:f0de320e23ac 113 case EDGE_SENSOR_SAMPLED: /* data is ready, wait for delivery */
Rhyme 0:f0de320e23ac 114 if (_prev_status != EDGE_SENSOR_SAMPLED) {
Rhyme 0:f0de320e23ac 115 _error_count = 0 ;
Rhyme 0:f0de320e23ac 116 }
Rhyme 0:f0de320e23ac 117 result = deliver() ;
Rhyme 0:f0de320e23ac 118 if (result) {
Rhyme 0:f0de320e23ac 119 _status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:f0de320e23ac 120 } else {
Rhyme 0:f0de320e23ac 121 _error_count++ ;
Rhyme 0:f0de320e23ac 122 }
Rhyme 0:f0de320e23ac 123 _prev_status = EDGE_SENSOR_SAMPLED ;
Rhyme 0:f0de320e23ac 124
Rhyme 0:f0de320e23ac 125 break ;
Rhyme 0:f0de320e23ac 126 }
Rhyme 0:f0de320e23ac 127 return(_status) ;
Rhyme 0:f0de320e23ac 128 }
Rhyme 0:f0de320e23ac 129