Orefatoi
/
afero_poc15_171201
POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel
edge_sensor/edge_sensor.cpp@13:88ee926c56ae, 2017-12-12 (annotated)
- 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?
User | Revision | Line number | New 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 |