Code for autonomous ground vehicle, Data Bus, 3rd place winner in 2012 Sparkfun AVC.

Dependencies:   Watchdog mbed Schedule SimpleFilter LSM303DLM PinDetect DebounceIn Servo

Committer:
shimniok
Date:
Wed Jun 20 14:57:48 2012 +0000
Revision:
0:826c6171fc1b
Updated documentation

Who changed what in which revision?

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