A class to display a value as a bar on either the on-board LEDs, or using LEDs connected to the pwm pins.
BarChart.cpp@0:db2aa0ada4f9, 2010-11-09 (annotated)
- Committer:
- EricWieser
- Date:
- Tue Nov 09 19:30:45 2010 +0000
- Revision:
- 0:db2aa0ada4f9
- Child:
- 1:6b38423b75db
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
EricWieser | 0:db2aa0ada4f9 | 1 | #include "BarChart.h" |
EricWieser | 0:db2aa0ada4f9 | 2 | #include "mbed.h" |
EricWieser | 0:db2aa0ada4f9 | 3 | |
EricWieser | 0:db2aa0ada4f9 | 4 | |
EricWieser | 0:db2aa0ada4f9 | 5 | BarChart::~BarChart() { |
EricWieser | 0:db2aa0ada4f9 | 6 | for(int i = 0; i < _numPins; i++) |
EricWieser | 0:db2aa0ada4f9 | 7 | { |
EricWieser | 0:db2aa0ada4f9 | 8 | delete _outputs[i]; |
EricWieser | 0:db2aa0ada4f9 | 9 | } |
EricWieser | 0:db2aa0ada4f9 | 10 | delete [] _outputs; |
EricWieser | 0:db2aa0ada4f9 | 11 | } |
EricWieser | 0:db2aa0ada4f9 | 12 | |
EricWieser | 0:db2aa0ada4f9 | 13 | BarChart::BarChart() { |
EricWieser | 0:db2aa0ada4f9 | 14 | PwmOut ** tmp = _outputs = new PwmOut*[4]; |
EricWieser | 0:db2aa0ada4f9 | 15 | *tmp++ = new PwmOut(LED1); |
EricWieser | 0:db2aa0ada4f9 | 16 | *tmp++ = new PwmOut(LED2); |
EricWieser | 0:db2aa0ada4f9 | 17 | *tmp++ = new PwmOut(LED3); |
EricWieser | 0:db2aa0ada4f9 | 18 | *tmp++ = new PwmOut(LED4); |
EricWieser | 0:db2aa0ada4f9 | 19 | _numPins = 4; |
EricWieser | 0:db2aa0ada4f9 | 20 | _init(); |
EricWieser | 0:db2aa0ada4f9 | 21 | } |
EricWieser | 0:db2aa0ada4f9 | 22 | |
EricWieser | 0:db2aa0ada4f9 | 23 | BarChart::BarChart(PinName p1, PinName p2 = NC, PinName p3 = NC, PinName p4 = NC, |
EricWieser | 0:db2aa0ada4f9 | 24 | PinName p5 = NC, PinName p6 = NC, PinName p7 = NC, PinName p8 = NC, |
EricWieser | 0:db2aa0ada4f9 | 25 | PinName p9 = NC, PinName p10 = NC, PinName p11 = NC, PinName p12 = NC, |
EricWieser | 0:db2aa0ada4f9 | 26 | PinName p13 = NC, PinName p14 = NC, PinName p15 = NC, PinName p16 = NC) { |
EricWieser | 0:db2aa0ada4f9 | 27 | PinName all[16] = {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16}; |
EricWieser | 0:db2aa0ada4f9 | 28 | |
EricWieser | 0:db2aa0ada4f9 | 29 | _numPins = 0; |
EricWieser | 0:db2aa0ada4f9 | 30 | for (int i = 0; i < 16; i++) |
EricWieser | 0:db2aa0ada4f9 | 31 | if (all[i] != NC) |
EricWieser | 0:db2aa0ada4f9 | 32 | _numPins++; |
EricWieser | 0:db2aa0ada4f9 | 33 | |
EricWieser | 0:db2aa0ada4f9 | 34 | _outputs = new PwmOut*[_numPins]; |
EricWieser | 0:db2aa0ada4f9 | 35 | |
EricWieser | 0:db2aa0ada4f9 | 36 | _numPins = 0; |
EricWieser | 0:db2aa0ada4f9 | 37 | for (int i = 0; i < 16; i++) |
EricWieser | 0:db2aa0ada4f9 | 38 | if (all[i] != NC) |
EricWieser | 0:db2aa0ada4f9 | 39 | _outputs[_numPins++] = new PwmOut(all[i]); |
EricWieser | 0:db2aa0ada4f9 | 40 | |
EricWieser | 0:db2aa0ada4f9 | 41 | _init(); |
EricWieser | 0:db2aa0ada4f9 | 42 | } |
EricWieser | 0:db2aa0ada4f9 | 43 | |
EricWieser | 0:db2aa0ada4f9 | 44 | void BarChart::_init() { |
EricWieser | 0:db2aa0ada4f9 | 45 | setInputLimits(0, 1); |
EricWieser | 0:db2aa0ada4f9 | 46 | setOutputLimits(0, 1); |
EricWieser | 0:db2aa0ada4f9 | 47 | } |
EricWieser | 0:db2aa0ada4f9 | 48 | |
EricWieser | 0:db2aa0ada4f9 | 49 | void BarChart::setInputLimits(float min, float max) { |
EricWieser | 0:db2aa0ada4f9 | 50 | _minInput = min; |
EricWieser | 0:db2aa0ada4f9 | 51 | _maxInput = max; |
EricWieser | 0:db2aa0ada4f9 | 52 | } |
EricWieser | 0:db2aa0ada4f9 | 53 | |
EricWieser | 0:db2aa0ada4f9 | 54 | void BarChart::setOutputLimits(float min, float max) { |
EricWieser | 0:db2aa0ada4f9 | 55 | _minOutput = min; |
EricWieser | 0:db2aa0ada4f9 | 56 | _maxOutput = max; |
EricWieser | 0:db2aa0ada4f9 | 57 | } |
EricWieser | 0:db2aa0ada4f9 | 58 | |
EricWieser | 0:db2aa0ada4f9 | 59 | float BarChart::_linearScale(float value) { |
EricWieser | 0:db2aa0ada4f9 | 60 | return (value - _minInput)/(_maxInput - _minInput); |
EricWieser | 0:db2aa0ada4f9 | 61 | } |
EricWieser | 0:db2aa0ada4f9 | 62 | |
EricWieser | 0:db2aa0ada4f9 | 63 | void BarChart::show(float value) { |
EricWieser | 0:db2aa0ada4f9 | 64 | value = _linearScale(value) * _numPins; |
EricWieser | 0:db2aa0ada4f9 | 65 | |
EricWieser | 0:db2aa0ada4f9 | 66 | for (int i = 0; i < _numPins; i++) { |
EricWieser | 0:db2aa0ada4f9 | 67 | if (i < value - 1) |
EricWieser | 0:db2aa0ada4f9 | 68 | *_outputs[i] = _maxOutput; |
EricWieser | 0:db2aa0ada4f9 | 69 | else if (i > value) |
EricWieser | 0:db2aa0ada4f9 | 70 | *_outputs[i] = _minOutput; |
EricWieser | 0:db2aa0ada4f9 | 71 | else |
EricWieser | 0:db2aa0ada4f9 | 72 | *_outputs[i] = _minOutput + (value - i)*(_maxOutput - _minOutput); |
EricWieser | 0:db2aa0ada4f9 | 73 | } |
EricWieser | 0:db2aa0ada4f9 | 74 | } |