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

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?

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