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:
Wed Nov 10 15:15:17 2010 +0000
Revision:
1:6b38423b75db
Parent:
0:db2aa0ada4f9
Fixed default arguments

Who changed what in which revision?

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