Code for autonomous rover for Sparkfun AVC. DataBus won 3rd in 2012 and the same code was used on Troubled Child, a 1986 Jeep Grand Wagoneer to win 1st in 2014.
Dependencies: mbed Watchdog SDFileSystem DigoleSerialDisp
UI/LCD/Bargraph.cpp@25:bb5356402687, 2018-11-30 (annotated)
- Committer:
- shimniok
- Date:
- Fri Nov 30 16:11:53 2018 +0000
- Revision:
- 25:bb5356402687
- Parent:
- 0:a6a169de725f
Initial publish of revised version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shimniok | 0:a6a169de725f | 1 | #include "Bargraph.h" |
shimniok | 0:a6a169de725f | 2 | |
shimniok | 0:a6a169de725f | 3 | #define CHAR_WIDTH 6 |
shimniok | 0:a6a169de725f | 4 | #define WIDTH 8 |
shimniok | 0:a6a169de725f | 5 | #define HEIGHT 9 |
shimniok | 0:a6a169de725f | 6 | |
shimniok | 0:a6a169de725f | 7 | SerialGraphicLCD *Bargraph::lcd = 0; |
shimniok | 0:a6a169de725f | 8 | |
shimniok | 0:a6a169de725f | 9 | Bargraph::Bargraph(int x, int y, int size, char name): |
shimniok | 0:a6a169de725f | 10 | _x(x), _y(y), _x2(x+WIDTH), _y2(y+size-1), _s(size), _n(name), _last(0) |
shimniok | 0:a6a169de725f | 11 | { |
shimniok | 0:a6a169de725f | 12 | } |
shimniok | 0:a6a169de725f | 13 | |
shimniok | 0:a6a169de725f | 14 | Bargraph::Bargraph(int x, int y, int size, int width, char name): |
shimniok | 0:a6a169de725f | 15 | _x(x), _y(y), _x2(x+width-1), _y2(y+size-1), _s(size), _w(width), _n(name), _last(0) |
shimniok | 0:a6a169de725f | 16 | { |
shimniok | 0:a6a169de725f | 17 | } |
shimniok | 0:a6a169de725f | 18 | |
shimniok | 0:a6a169de725f | 19 | void Bargraph::init() |
shimniok | 0:a6a169de725f | 20 | { |
shimniok | 0:a6a169de725f | 21 | if (lcd) { |
shimniok | 0:a6a169de725f | 22 | if (_n != ' ') { |
shimniok | 0:a6a169de725f | 23 | lcd->posXY(_x + (_w/2 - CHAR_WIDTH/2), _y2+2); // horizontal center |
shimniok | 0:a6a169de725f | 24 | //wait_ms(5); |
shimniok | 0:a6a169de725f | 25 | lcd->printf("%c", _n); |
shimniok | 0:a6a169de725f | 26 | //wait_ms(5); |
shimniok | 0:a6a169de725f | 27 | } |
shimniok | 0:a6a169de725f | 28 | lcd->rect(_x, _y, _x2, _y2, true); |
shimniok | 0:a6a169de725f | 29 | //wait_ms(5); // doesn't seem to help |
shimniok | 0:a6a169de725f | 30 | int value = _last; |
shimniok | 0:a6a169de725f | 31 | _last = 0; |
shimniok | 0:a6a169de725f | 32 | update(value); |
shimniok | 0:a6a169de725f | 33 | } |
shimniok | 0:a6a169de725f | 34 | } |
shimniok | 0:a6a169de725f | 35 | |
shimniok | 0:a6a169de725f | 36 | void Bargraph::calibrate(float min, float max) |
shimniok | 0:a6a169de725f | 37 | { |
shimniok | 0:a6a169de725f | 38 | _min = min; |
shimniok | 0:a6a169de725f | 39 | _max = max; |
shimniok | 0:a6a169de725f | 40 | } |
shimniok | 0:a6a169de725f | 41 | |
shimniok | 0:a6a169de725f | 42 | void Bargraph::update(float value) |
shimniok | 0:a6a169de725f | 43 | { |
shimniok | 0:a6a169de725f | 44 | int ivalue; |
shimniok | 0:a6a169de725f | 45 | |
shimniok | 0:a6a169de725f | 46 | ivalue = (int) ((value - _min) * (_s-1)/(_max - _min)); |
shimniok | 0:a6a169de725f | 47 | |
shimniok | 0:a6a169de725f | 48 | update(ivalue); |
shimniok | 0:a6a169de725f | 49 | |
shimniok | 0:a6a169de725f | 50 | return; |
shimniok | 0:a6a169de725f | 51 | } |
shimniok | 0:a6a169de725f | 52 | |
shimniok | 0:a6a169de725f | 53 | void Bargraph::update(int value) |
shimniok | 0:a6a169de725f | 54 | { |
shimniok | 0:a6a169de725f | 55 | if (lcd) { |
shimniok | 0:a6a169de725f | 56 | if (value >= 0 && value < _s) { |
shimniok | 0:a6a169de725f | 57 | int newY = _y2-value; |
shimniok | 0:a6a169de725f | 58 | |
shimniok | 0:a6a169de725f | 59 | for (int y=_y+1; y < _y2; y++) { |
shimniok | 0:a6a169de725f | 60 | lcd->line(_x+1, y, _x2-1, y, (y > newY)); |
shimniok | 0:a6a169de725f | 61 | wait_ms(8); |
shimniok | 0:a6a169de725f | 62 | } |
shimniok | 0:a6a169de725f | 63 | } |
shimniok | 0:a6a169de725f | 64 | _last = value; |
shimniok | 0:a6a169de725f | 65 | } |
shimniok | 0:a6a169de725f | 66 | } |
shimniok | 0:a6a169de725f | 67 |