Code for autonomous ground vehicle, Data Bus, 3rd place winner in 2012 Sparkfun AVC.
Dependencies: Watchdog mbed Schedule SimpleFilter LSM303DLM PinDetect DebounceIn Servo
UI/LCD/Bargraph.cpp@0:826c6171fc1b, 2012-06-20 (annotated)
- Committer:
- shimniok
- Date:
- Wed Jun 20 14:57:48 2012 +0000
- Revision:
- 0:826c6171fc1b
Updated documentation
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shimniok | 0:826c6171fc1b | 1 | #include "Bargraph.h" |
shimniok | 0:826c6171fc1b | 2 | |
shimniok | 0:826c6171fc1b | 3 | #define WIDTH 8 |
shimniok | 0:826c6171fc1b | 4 | #define HEIGHT 9 |
shimniok | 0:826c6171fc1b | 5 | |
shimniok | 0:826c6171fc1b | 6 | SerialGraphicLCD *Bargraph::lcd = 0; |
shimniok | 0:826c6171fc1b | 7 | |
shimniok | 0:826c6171fc1b | 8 | Bargraph::Bargraph(int x, int y, int size, char name): |
shimniok | 0:826c6171fc1b | 9 | _x(x), _y(y), _x2(x+WIDTH), _y2(y+size-1), _s(size), _n(name), _last(0) |
shimniok | 0:826c6171fc1b | 10 | { |
shimniok | 0:826c6171fc1b | 11 | } |
shimniok | 0:826c6171fc1b | 12 | |
shimniok | 0:826c6171fc1b | 13 | Bargraph::Bargraph(int x, int y, int size, int width, char name): |
shimniok | 0:826c6171fc1b | 14 | _x(x), _y(y), _x2(x+width-1), _y2(y+size-1), _s(size), _w(width), _n(name), _last(0) |
shimniok | 0:826c6171fc1b | 15 | { |
shimniok | 0:826c6171fc1b | 16 | } |
shimniok | 0:826c6171fc1b | 17 | |
shimniok | 0:826c6171fc1b | 18 | void Bargraph::init() |
shimniok | 0:826c6171fc1b | 19 | { |
shimniok | 0:826c6171fc1b | 20 | if (lcd) { |
shimniok | 0:826c6171fc1b | 21 | if (_n != ' ') { |
shimniok | 0:826c6171fc1b | 22 | lcd->posXY(_x, _y2+2); // horizontal center |
shimniok | 0:826c6171fc1b | 23 | lcd->printf("%c", _n); |
shimniok | 0:826c6171fc1b | 24 | } |
shimniok | 0:826c6171fc1b | 25 | lcd->rect(_x, _y, _x2, _y2, true); |
shimniok | 0:826c6171fc1b | 26 | int value = _last; |
shimniok | 0:826c6171fc1b | 27 | _last = 0; |
shimniok | 0:826c6171fc1b | 28 | update(value); |
shimniok | 0:826c6171fc1b | 29 | } |
shimniok | 0:826c6171fc1b | 30 | } |
shimniok | 0:826c6171fc1b | 31 | |
shimniok | 0:826c6171fc1b | 32 | void Bargraph::calibrate(float min, float max) |
shimniok | 0:826c6171fc1b | 33 | { |
shimniok | 0:826c6171fc1b | 34 | _min = min; |
shimniok | 0:826c6171fc1b | 35 | _max = max; |
shimniok | 0:826c6171fc1b | 36 | } |
shimniok | 0:826c6171fc1b | 37 | |
shimniok | 0:826c6171fc1b | 38 | void Bargraph::update(float value) |
shimniok | 0:826c6171fc1b | 39 | { |
shimniok | 0:826c6171fc1b | 40 | int ivalue; |
shimniok | 0:826c6171fc1b | 41 | |
shimniok | 0:826c6171fc1b | 42 | ivalue = (int) ((value - _min) * (_s-1)/(_max - _min)); |
shimniok | 0:826c6171fc1b | 43 | |
shimniok | 0:826c6171fc1b | 44 | update(ivalue); |
shimniok | 0:826c6171fc1b | 45 | |
shimniok | 0:826c6171fc1b | 46 | return; |
shimniok | 0:826c6171fc1b | 47 | } |
shimniok | 0:826c6171fc1b | 48 | |
shimniok | 0:826c6171fc1b | 49 | void Bargraph::update(int value) |
shimniok | 0:826c6171fc1b | 50 | { |
shimniok | 0:826c6171fc1b | 51 | if (lcd) { |
shimniok | 0:826c6171fc1b | 52 | if (value >= 0 && value < _s) { |
shimniok | 0:826c6171fc1b | 53 | int newY = _y2-value; |
shimniok | 0:826c6171fc1b | 54 | |
shimniok | 0:826c6171fc1b | 55 | for (int y=_y+1; y < _y2; y++) { |
shimniok | 0:826c6171fc1b | 56 | lcd->line(_x+1, y, _x2-1, y, (y > newY)); |
shimniok | 0:826c6171fc1b | 57 | wait_ms(5); |
shimniok | 0:826c6171fc1b | 58 | } |
shimniok | 0:826c6171fc1b | 59 | } |
shimniok | 0:826c6171fc1b | 60 | _last = value; |
shimniok | 0:826c6171fc1b | 61 | } |
shimniok | 0:826c6171fc1b | 62 | } |
shimniok | 0:826c6171fc1b | 63 |