A class to display a value as a bar on either the on-board LEDs, or using LEDs connected to the pwm pins.

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?

UserRevisionLine numberNew 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 }