Eric Wieser / BarChart

BarChart.cpp

Committer:
EricWieser
Date:
2010-11-09
Revision:
0:db2aa0ada4f9
Child:
1:6b38423b75db

File content as of revision 0:db2aa0ada4f9:

#include "BarChart.h"
#include "mbed.h"


BarChart::~BarChart() {
    for(int i = 0; i < _numPins; i++)
    {
        delete _outputs[i];
    }
    delete [] _outputs;
}

BarChart::BarChart() {
    PwmOut ** tmp = _outputs = new PwmOut*[4];
    *tmp++ = new PwmOut(LED1);
    *tmp++ = new PwmOut(LED2);
    *tmp++ = new PwmOut(LED3);
    *tmp++ = new PwmOut(LED4);
    _numPins = 4;
    _init();
}

BarChart::BarChart(PinName p1,  PinName p2 = NC,  PinName p3 = NC,  PinName p4 = NC,
                   PinName p5 = NC,  PinName p6 = NC,  PinName p7 = NC,  PinName p8 = NC,
                   PinName p9 = NC,  PinName p10 = NC, PinName p11 = NC, PinName p12 = NC,
                   PinName p13 = NC, PinName p14 = NC, PinName p15 = NC, PinName p16 = NC) {
    PinName all[16] = {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16};

    _numPins = 0;
    for (int i = 0; i < 16; i++)
        if (all[i] != NC)
            _numPins++;

    _outputs = new PwmOut*[_numPins];

    _numPins = 0;
    for (int i = 0; i < 16; i++)
        if (all[i] != NC)
            _outputs[_numPins++] = new PwmOut(all[i]);

    _init();
}

void BarChart::_init() {
    setInputLimits(0, 1);
    setOutputLimits(0, 1);
}

void BarChart::setInputLimits(float min, float max) {
    _minInput = min;
    _maxInput = max;
}

void BarChart::setOutputLimits(float min, float max) {
    _minOutput = min;
    _maxOutput = max;
}

float BarChart::_linearScale(float value) {
    return (value - _minInput)/(_maxInput - _minInput);
}

void BarChart::show(float value) {
    value = _linearScale(value) * _numPins;

    for (int i = 0; i < _numPins; i++) {
       if (i < value - 1)
            *_outputs[i] = _maxOutput;
        else if (i > value)
            *_outputs[i] = _minOutput;
        else
            *_outputs[i] = _minOutput + (value - i)*(_maxOutput - _minOutput);
    }
}