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