cbf125life.files.wordpress.com€¦ · web view//arduino pin 0 (rx) goes to gps tx. #define gpsbaud...

23

Click here to load reader

Upload: doanmien

Post on 04-May-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

#include <IRremote.h>#include <IRremoteInt.h>//#include <MemoryFree.h>#include "TFTLCD.h"#include <TinyGPS.h>#include <EEPROM.h>

//LCD#define LCD_CS A3#define LCD_CD A2#define LCD_WR A1#define LCD_RD A0#define LCD_RESET A4

#define BLACK 0x0000#define BLUE 0x001F#define RED 0xF800#define GREEN 0x07E0#define CYAN 0x07FF#define MAGENTA 0xF81F#define YELLOW 0xFFE0 #define WHITE 0xFFFF

#define ICONCOLOURGOOD 0x07E0 //green#define ICONCOLOURBAD 0xF800 //red#define DATACOLOUR 0x001F //blue#define MENUTITLECOLOUR 0x07E0 //green#define MENUITEMCOLOUR 0xF81F //magenta#define ITEMINDEXCOLOUR 0x07E0 //green#define ITEMINDEXENTERCOLOUR 0x001F //blue

#define ITEMINDEXRADIUS 4

TFTLCD _tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

#define BATTERYICONX 5 //$ = battery#define BATTERYICONY 5#define PETROLCANALLICONX 5 //' = petrol can all#define PETROLCANALLICONY 80#define PETROLCANLAST1ICONX 5 //" = petrol can 1#define PETROLCANLAST1ICONY 115#define TEMPERATUREICONX 5 //@ = temperature#define TEMPERATUREICONY 210#define LATITUDEICONX 105 //^ = latitude#define LATITUDEICONY 180#define LONGITUDEICONX 105 //_ = longitude#define LONGITUDEICONY 210 #define ALTITUDEICONX 105 //# = altitude#define ALTITUDEICONY 150#define SATELLITEICONX 260 //; = satellite#define SATELLITEICONY 5 #define CHAINOILERICONX 260 //] = oiler#define CHAINOILERICONY 210#define COURSEICONX 255 #define COURSEICONY 90 //circle#define COURSELARGERADIUS 30

#define DATEX 105

Page 2: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

#define DATEY 5#define TIMEX 115#define TIMEY 35#define SPEEDX 135#define SPEEDY 70#define TRIPMETERMILEAGEX 125#define TRIPMETERMILEAGEY 120#define BATTERYDATAX 35 //$ = battery#define BATTERYDATAY 10#define PETROLCANALLDATAX 35 //' = petrol can all#define PETROLCANALLDATAY 85#define PETROLCANLAST1DATAX 35 //" = petrol can 1#define PETROLCANLAST1DATAY 120#define TEMPERATUREDATAX 35 //@ = temperature#define TEMPERATUREDATAY 215#define LATITUDEDATAX 140 //^ = latitude#define LATITUDEDATAY 185#define LONGITUDEDATAX 140 //_ = longitude#define LONGITUDEDATAY 215#define ALTITUDEDATAX 140 //# = altitude#define ALTITUDEDATAY 155#define SATELLITEDATAX 290 //; = satellite#define SATELLITEDATAY 10 #define CHAINOILERDATAX 290 //] = oiler#define CHAINOILERDATAY 215#define COURSEDATAX 245 #define COURSEDATAY 82#define COURSESMALLRADIUS 4

#define SCREENTITLEX 80#define SCREENTITLEY 5#define SCREENITEMTEXTX 15#define SCREENITEMTEXTY 60#define SCREENITEMDATAX 180#define SCREENITEMDATAY 60#define SCREENITEMYSPACING 30

//GPS//Arduino pin 0 (rx) goes to gps tx

#define GPSBAUD 9600

TinyGPS _tinyGps;

//Fuel#define LITRESPERGALLON 4.54609188

//Battery#define BATTERYVOLTAGEPIN A5

//Temperature#define TEMPERATUREPIN A6

//Remote#define RECV_PIN 12

IRrecv _irrecv(RECV_PIN);decode_results _remoteResults;

Page 3: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

#define NEXTMENUCODE 16761405#define SELECTMENUITEMDOWNCODE 16754775#define SELECTMENUITEMUPCODE 16748655#define SELECTMENUITEMENTERCODE 16720605#define DELETECODE 16750695#define NUM0CODE 16738455#define NUM1CODE 16724175#define NUM2CODE 16718055#define NUM3CODE 16743045#define NUM4CODE 16716015#define NUM5CODE 16726215#define NUM6CODE 16734885#define NUM7CODE 16728765#define NUM8CODE 16730805#define NUM9CODE 16732845#define POINTCODE 16756815#define SPACECODE 16769055

//EEPROM#define EEPROM_TOTALMILEAGE 4#define EEPROM_TOTALLITRES 8#define EEPROM_MILEAGELAST1 12#define EEPROM_LITRESLAST1 16

#define EEPROM_OIL 200#define EEPROM_SPARKPLUG 204#define EEPROM_VALVECLEARANCE 208#define EEPROM_OILSTRAINERCENTRIFUGALFILTER 212#define EEPROM_BRAKES 216#define EEPROM_AIRFILTER 220#define EEPROM_CHAINANDSPROCKETS 224#define EEPROM_WHEELBEARINGSFRONT 228#define EEPROM_WHEELBEARINGSREAR 232#define EEPROM_FORKOIL 236#define EEPROM_TYRES 240#define EEPROM_BRAKEFLUID 244

#define EEPROM_OILERMILEAGEWHENFULL 400#define EEPROM_OILERMILEAGEUNTILEMPTY 404#define EEPROM_TRIPMETERMILEAGE 408#define EEPROM_WRITECOUNT 412

#define EEPROM_LIMITOFFSET 1000

#define MINBATTERYVOLTAGE 13.2#define MAXBATTERYVOLTAGE 15#define MINMPG 140#define MAXMPG 200#define MINTEMPERATURE 3#define MAXTEMPERATURE 30#define MINSATELLITES 4#define MAXSATELLITES 25#define MINCHAINOILER 10#define MAXCHAINOILER 100#define MINTOTALMPG 150#define MAXTOTALMPG 200#define MINLAST1MPG 150

Page 4: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

#define MAXLAST1MPG 200

uint16_t _lastBatteryIconColour = ICONCOLOURGOOD;;uint16_t _lastTemperatureIconColour = ICONCOLOURGOOD;uint16_t _lastSatelliteIconColour = ICONCOLOURGOOD;uint16_t _lastChainOilerIconColour = ICONCOLOURGOOD;uint16_t _lastTotalMpgIconColour = ICONCOLOURGOOD;uint16_t _lastLast1MpgIconColour = ICONCOLOURGOOD;

float _lastLatitude = 0.0;float _lastLongitude = 0.0;int _lastYear = 0;byte _lastMonth = 0; byte _lastDay = 0;byte _lastHour = 0;byte _lastMinute = 0;byte _lastSecond = 0;int _lastAltitude = 0;int _lastCourse = 0;int _lastSpeed = 0;int _lastNumSatellites = 0;

double _lastTripMetermileage = 0;double _lastTotalMpg = 0.0;double _lastLast1Mpg = 0.0;double _lastBatteryVoltage = 0;double _lastTemperature = 0;int _lastOilerPercentageLeft = 0;int _lastCurrentItemIndex;

uint16_t _batteryIconColour = ICONCOLOURGOOD;uint16_t _temperatureIconColour = ICONCOLOURGOOD;uint16_t _satelliteIconColour = ICONCOLOURGOOD;uint16_t _chainOilerIconColour = ICONCOLOURGOOD;uint16_t _totalMpgIconColour = ICONCOLOURGOOD;uint16_t _last1MpgIconColour = ICONCOLOURGOOD;

float _latitude = 0.0;float _longitude = 0.0;int _year = 0;byte _month = 0; byte _day = 0;byte _hour = 0;byte _minute = 0;byte _second = 0;int _altitude = 0;int _course = 0;int _speed = 0;int _numSatellites = 0;

boolean _firstScreenIteration = true;double _tripMetermileage = 0;long _oilermileageWhenFull = 0;double _oilermileageUntilEmpty = 0;double _totalMpg = 0.0;double _last1Mpg = 0.0;double _runningDistanceUpToIncrement = 0; //increment is 0.1 milesint _currentScreenIndex = 0;

Page 5: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

int _currentItemIndex = 0;long _eepromWriteCountNum = 0;long _eepromLimitOffset = 0;

//int iteration = 0;

void setup(void) { InitialiseDisplay();

Serial.begin(GPSBAUD);

ReadEepromWriteCountData();

_irrecv.enableIRIn(); //Reset fuel data // EEPROMWritelong(EEPROM_TOTALMILEAGE, 0); // EEPROMWritelong(EEPROM_TOTALLITRES, 0); // EEPROMWritelong(EEPROM_MILEAGELAST1, 0); // EEPROMWritelong(EEPROM_LITRESLAST1, 0);}

void loop(void){ if (_irrecv.decode(&_remoteResults)) { if (_remoteResults.value == NEXTMENUCODE) { if (_currentScreenIndex < 3) _currentScreenIndex++; else if (_currentScreenIndex == 3) _currentScreenIndex = 0;

_firstScreenIteration = true; _currentItemIndex = 0; } else if (_remoteResults.value == SELECTMENUITEMDOWNCODE) { if (_currentItemIndex > 0) _currentItemIndex--; } else if (_remoteResults.value == SELECTMENUITEMUPCODE) { if ((_currentItemIndex < 5 && _currentScreenIndex < 3) || (_currentItemIndex < 3 && _currentScreenIndex == 3)) _currentItemIndex++; } else if (_remoteResults.value == SELECTMENUITEMENTERCODE && _currentScreenIndex > 0) { EnterNewData(_currentScreenIndex, _currentItemIndex); }

_irrecv.resume(); }

if (_currentScreenIndex == 0)

Page 6: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

ShowMainScreen(); else if (_currentScreenIndex == 1) ShowMaintenenceMenu1(); else if (_currentScreenIndex == 2) ShowMaintenenceMenu2(); else if (_currentScreenIndex == 3) ShowMaintenenceMenu3(); _lastCurrentItemIndex = _currentItemIndex; // iteration++;}

void ShowMainScreen(){ if (_firstScreenIteration) { _tft.fillScreen(BLACK);

ReadFuelData(); ReadOilerData(); ReadTripMetermileageData();

//Set all the default when chainging screen SetLastValues(ICONCOLOURGOOD, ICONCOLOURGOOD, ICONCOLOURGOOD, ICONCOLOURGOOD, ICONCOLOURGOOD, ICONCOLOURGOOD, 0.0, 0.0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true); } CheckForNewGpsData();

// float distanceFromLastPoint = _tinyGps.distance_between(_lastLatitude, _lastLongitude, _latitude, _longitude); float distanceFromLastPoint = HaverSine(_lastLatitude, _lastLongitude, _latitude, _longitude); //Only accumilate distance in > 10m strait line blocks boolean retainLastLatLong = distanceFromLastPoint < 0.00621371192; if (distanceFromLastPoint > 0.00621371192 && _lastLatitude != 0.0 && _lastLongitude != 0.0) // 0.0062 = 10 metres _runningDistanceUpToIncrement += distanceFromLastPoint;

if (_runningDistanceUpToIncrement >= 0.1) { //Update the oiler data _oilermileageUntilEmpty -= 0.1;

UpdateOilerData(_oilermileageUntilEmpty);

int oilerPercentageLeft = (_oilermileageUntilEmpty / _oilermileageWhenFull) * 100;

//Update the trip meter _tripMetermileage += 0.1;

Page 7: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

UpdateTripMetermileageData(_tripMetermileage); _runningDistanceUpToIncrement -= 0.1; }

int batteryVoltageReading = analogRead(BATTERYVOLTAGEPIN); //double batteryVoltage = MapBatteryVoltageReadingToVoltage(batteryVoltageReading); double batteryVoltage = batteryVoltageReading * 0.017998935; //0.017998935 = (10000.0 / 2200.0) * (3.27 / 1024.0) * 1.24; //1.24 = calibration

int temperatureReading = analogRead(TEMPERATUREPIN); // double temperature = MapTemperatureReadingToTemperature(temperatureReading); double temperature = (temperatureReading * 0.48876) - 11; //0.319648094 = (3.27 / 1023.0) * (1000 / 10) 0.48876 int couseDataX = COURSEICONX + sin(_course * DEG_TO_RAD) * COURSELARGERADIUS; int couseDataY = COURSEICONY + cos(_course * DEG_TO_RAD) * COURSELARGERADIUS; int lastCouseDataX = COURSEICONX + sin(_lastCourse * DEG_TO_RAD) * COURSELARGERADIUS; int lastCouseDataY = COURSEICONY + cos(_lastCourse * DEG_TO_RAD) * COURSELARGERADIUS;

int oilerPercentageLeft = (_oilermileageUntilEmpty / _oilermileageWhenFull) * 100;

uint16_t batteryIconColour = GetIconColour(MINBATTERYVOLTAGE, MAXBATTERYVOLTAGE, batteryVoltage); uint16_t temperatureIconColour = GetIconColour(MINTEMPERATURE, MAXTEMPERATURE, temperature); uint16_t satelliteIconColour = GetIconColour(MINSATELLITES, MAXSATELLITES, _numSatellites); uint16_t chainOilerIconColour = GetIconColour(MINCHAINOILER, MAXCHAINOILER, oilerPercentageLeft); uint16_t totalMpgIconColour = GetIconColour(MINTOTALMPG, MAXTOTALMPG, _totalMpg); uint16_t last1MpgIconColour = GetIconColour(MINLAST1MPG, MAXLAST1MPG, _last1Mpg);

DrawIcons(batteryVoltage, temperature, oilerPercentageLeft, batteryIconColour, temperatureIconColour, satelliteIconColour, chainOilerIconColour, totalMpgIconColour, last1MpgIconColour);

DrawDataValuesToScreen(batteryVoltage, temperature, couseDataX, couseDataY, lastCouseDataX, lastCouseDataY, oilerPercentageLeft);

SetLastValues(batteryIconColour, temperatureIconColour, satelliteIconColour, chainOilerIconColour, totalMpgIconColour, last1MpgIconColour, _latitude, _longitude, _year, _month, _day, _hour, _minute, _second, _altitude,

Page 8: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

_course, _speed, _numSatellites, _tripMetermileage, batteryVoltage, _totalMpg, _last1Mpg, temperature, oilerPercentageLeft, retainLastLatLong); _firstScreenIteration = false;}

void SetLastValues(uint16_t batteryIconColour, uint16_t temperatureIconColour, uint16_t satelliteIconColour, uint16_t chainOilerIconColour, uint16_t totalMpgIconColour, uint16_t last1MpgIconColour, float latitude, float longitude, int year, byte month, byte day, byte hour, byte minute, byte second, int altitude, int course, int speed, int numSatellites, double tripMetermileage, double batteryVoltage, double totalMpg, double last1Mpg, double temperature, int oilerPercentageLeft, boolean retainLastLatLong){ _lastBatteryIconColour = batteryIconColour; _lastTemperatureIconColour = temperatureIconColour; _lastSatelliteIconColour = satelliteIconColour; _lastChainOilerIconColour = chainOilerIconColour; _lastTotalMpgIconColour = totalMpgIconColour; _lastLast1MpgIconColour = last1MpgIconColour;

if (!retainLastLatLong) { _lastLatitude = latitude; _lastLongitude = longitude; } _lastYear = year; _lastMonth = month; _lastDay = day; _lastHour = hour; _lastMinute = minute; _lastSecond = second; _lastAltitude = altitude; _lastCourse = course; _lastSpeed = speed; _lastNumSatellites = numSatellites; _lastTripMetermileage = tripMetermileage; _lastBatteryVoltage = batteryVoltage; _lastTotalMpg = totalMpg; _lastLast1Mpg = last1Mpg; _lastTemperature = temperature; _lastOilerPercentageLeft = oilerPercentageLeft;}

void ShowMaintenenceMenu1(){ if (_firstScreenIteration) { _tft.fillScreen(BLACK);

DrawTextToScreen(SCREENTITLEX, SCREENTITLEY, MENUTITLECOLOUR, MENUTITLECOLOUR, 2, "Maintenence 1", "");

Page 9: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Oil", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_OIL)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Spark plug", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_SPARKPLUG)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Valve clear", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_VALVECLEARANCE)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (3 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Oil str/cent", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (3 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_OILSTRAINERCENTRIFUGALFILTER)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (4 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Brakes", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (4 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_BRAKES)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (5 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Air filter", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (5 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_AIRFILTER)), ""); }

DrawCurrentItemIndexMarker(ITEMINDEXCOLOUR, false);

_firstScreenIteration = false;}

void ShowMaintenenceMenu2(){ if (_firstScreenIteration) { _tft.fillScreen(BLACK);

DrawTextToScreen(SCREENTITLEX, SCREENTITLEY, MENUTITLECOLOUR, MENUTITLECOLOUR, 2, "Maintenence 2", ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Chain/sprock", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_CHAINANDSPROCKETS)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "W bearings f", "");

Page 10: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_WHEELBEARINGSFRONT)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "W bearings r", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_WHEELBEARINGSREAR)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (3 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Fork oil", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (3 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_FORKOIL)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (4 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Tyres", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (4 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_TYRES)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (5 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Brake Fluid", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (5 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_BRAKEFLUID)), ""); }

DrawCurrentItemIndexMarker(ITEMINDEXCOLOUR, false);

_firstScreenIteration = false;}

void ShowMaintenenceMenu3(){ if (_firstScreenIteration) { _tft.fillScreen(BLACK);

DrawTextToScreen(SCREENTITLEX, SCREENTITLEY, MENUTITLECOLOUR, MENUTITLECOLOUR, 2, "Data Menu", ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Add fuel m/l", ""); DrawDoubleToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (0 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, _totalMpg, 0, 7); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Full Oiler m", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (1 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_OILERMILEAGEWHENFULL)), ""); DrawTextToScreen(SCREENITEMTEXTX, SCREENITEMTEXTY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, "Set trip m", ""); DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (2 * SCREENITEMYSPACING), MENUITEMCOLOUR, MENUITEMCOLOUR, 2, String(EEPROMReadlong(EEPROM_TRIPMETERMILEAGE + _eepromLimitOffset)), "");

Page 11: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

}

DrawCurrentItemIndexMarker(ITEMINDEXCOLOUR, false);

_firstScreenIteration = false;}

void DrawCurrentItemIndexMarker(uint16_t colour, boolean enterNewData){ if (_firstScreenIteration || _currentItemIndex != _lastCurrentItemIndex || enterNewData) { _tft.fillRect(SCREENITEMTEXTX - 10 - ITEMINDEXRADIUS, SCREENITEMTEXTY, (ITEMINDEXRADIUS * 2) + 1, SCREENITEMYSPACING * 6 + (ITEMINDEXRADIUS * 2), BLACK); _tft.fillCircle(SCREENITEMTEXTX - 10, SCREENITEMTEXTY + 8 + (_currentItemIndex * SCREENITEMYSPACING), ITEMINDEXRADIUS, colour); }}

void EnterNewData(int _currentScreenIndex, int _currentItemIndex){ _irrecv.resume();

boolean finished = false; String newValue = "";

DrawCurrentItemIndexMarker(ITEMINDEXENTERCOLOUR, true);

while (!finished) { if (_irrecv.decode(&_remoteResults)) { if (_remoteResults.value == NUM0CODE) newValue += "0"; else if (_remoteResults.value == NUM1CODE) newValue += "1"; else if (_remoteResults.value == NUM2CODE) newValue += "2"; else if (_remoteResults.value == NUM3CODE) newValue += "3"; else if (_remoteResults.value == NUM4CODE) newValue += "4"; else if (_remoteResults.value == NUM5CODE) newValue += "5"; else if (_remoteResults.value == NUM6CODE) newValue += "6"; else if (_remoteResults.value == NUM7CODE) newValue += "7"; else if (_remoteResults.value == NUM8CODE) newValue += "8"; else if (_remoteResults.value == NUM9CODE) newValue += "9"; else if (_remoteResults.value == POINTCODE) newValue += "."; else if (_remoteResults.value == SPACECODE) newValue += " "; else if (_remoteResults.value == DELETECODE)

Page 12: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

{ if (newValue.length() > 0) newValue = newValue.substring(0, newValue.length() - 1); } else if (_remoteResults.value == SELECTMENUITEMENTERCODE) { UpdateEepromRecord(_currentScreenIndex, _currentItemIndex, newValue); finished = true; }

uint16_t dataColour; if (!finished) dataColour = GREEN; else dataColour = MAGENTA;

DrawTextToScreen(SCREENITEMDATAX, SCREENITEMDATAY + (_currentItemIndex * SCREENITEMYSPACING), dataColour, dataColour, 2, newValue, "-"); _irrecv.resume();

} }

DrawCurrentItemIndexMarker(ITEMINDEXCOLOUR, true);}

void UpdateEepromRecord(int _currentScreenIndex, int _currentItemIndex, String newValue){ if (_currentScreenIndex == 0) { return; } else if (_currentScreenIndex == 1) { if (_currentItemIndex == 0) EEPROMWritelong(EEPROM_OIL, newValue.toInt()); else if (_currentItemIndex == 1) EEPROMWritelong(EEPROM_SPARKPLUG, newValue.toInt()); else if (_currentItemIndex == 2) EEPROMWritelong(EEPROM_VALVECLEARANCE, newValue.toInt()); else if (_currentItemIndex == 3) EEPROMWritelong(EEPROM_OILSTRAINERCENTRIFUGALFILTER, newValue.toInt()); else if (_currentItemIndex == 4) EEPROMWritelong(EEPROM_BRAKES, newValue.toInt()); else if (_currentItemIndex == 5) EEPROMWritelong(EEPROM_AIRFILTER, newValue.toInt()); } else if (_currentScreenIndex == 2) { if (_currentItemIndex == 0) EEPROMWritelong(EEPROM_CHAINANDSPROCKETS, newValue.toInt()); else if (_currentItemIndex == 1)

Page 13: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

EEPROMWritelong(EEPROM_WHEELBEARINGSFRONT, newValue.toInt()); else if (_currentItemIndex == 2) EEPROMWritelong(EEPROM_WHEELBEARINGSREAR, newValue.toInt()); else if (_currentItemIndex == 3) EEPROMWritelong(EEPROM_FORKOIL, newValue.toInt()); else if (_currentItemIndex == 4) EEPROMWritelong(EEPROM_TYRES, newValue.toInt()); else if (_currentItemIndex == 5) EEPROMWritelong(EEPROM_BRAKEFLUID, newValue.toInt()); } else if (_currentScreenIndex == 3) { if (_currentItemIndex == 0) { if (newValue.length() == 8 || newValue.length() == 9) { String miles = newValue.substring(0, 3); String litresString = newValue.substring(4);

char litresCharArray[litresString.length()]; litresString.toCharArray(litresCharArray, litresString.length() + 1); double litres = atof(litresCharArray); AddNewFuelData(miles.toInt(), litres); } } else if (_currentItemIndex == 1) { EEPROMWritelong(EEPROM_OILERMILEAGEWHENFULL, newValue.toInt()); EEPROMWritelong(EEPROM_OILERMILEAGEUNTILEMPTY + _eepromLimitOffset, newValue.toInt()); } else if (_currentItemIndex == 2) { EEPROMWritelong(EEPROM_TRIPMETERMILEAGE + _eepromLimitOffset, newValue.toInt()); } }}

void CheckForNewGpsData(){ while(Serial.available()) // While there is data from the gps serial { int c = Serial.read();

if(_tinyGps.encode(c)) // if there is a new valid sentence { _tinyGps.f_get_position(&_latitude, &_longitude); _tinyGps.crack_datetime(&_year,&_month,&_day,&_hour,&_minute,&_second); _altitude = _tinyGps.f_altitude(); _course = _tinyGps.f_course(); _speed = _tinyGps.f_speed_mph(); _numSatellites = _tinyGps.satellites(); } }

Page 14: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

}

void InitialiseDisplay(){ _tft.reset(); _tft.initDisplay(); _tft.setRotation(1); }

void DrawIcons(double batteryVoltage, double temperature, int oilerPercentageLeft, uint16_t batteryIconColour, uint16_t temperatureIconColour, uint16_t satelliteIconColour, uint16_t chainOilerIconColour, uint16_t totalMpgIconColour, uint16_t last1MpgIconColour){ //Battery DrawTextToScreen(BATTERYICONX, BATTERYICONY, batteryIconColour, _lastBatteryIconColour, 1, "[", "[");

//DrawPetrolCanAllIcon DrawTextToScreen(PETROLCANALLICONX, PETROLCANALLICONY, totalMpgIconColour, _lastTotalMpgIconColour, 1, "=", "=");

//PetrolCanLast1 DrawTextToScreen(PETROLCANLAST1ICONX, PETROLCANLAST1ICONY, last1MpgIconColour, _lastLast1MpgIconColour, 1, "<", "<");

//Temperature DrawTextToScreen(TEMPERATUREICONX, TEMPERATUREICONY, temperatureIconColour, _lastTemperatureIconColour, 1, "@", "@");

//Latitude DrawTextToScreen(LATITUDEICONX, LATITUDEICONY, ICONCOLOURGOOD, ICONCOLOURGOOD, 1, "^", "^");

//Longitude DrawTextToScreen(LONGITUDEICONX, LONGITUDEICONY, ICONCOLOURGOOD, ICONCOLOURGOOD, 1, "_", "_");

//Altitude DrawTextToScreen(ALTITUDEICONX, ALTITUDEICONY, ICONCOLOURGOOD, ICONCOLOURGOOD, 1, ">", ">");

//Satellite DrawTextToScreen(SATELLITEICONX, SATELLITEICONY, satelliteIconColour, _lastSatelliteIconColour, 1, ";", ";");

//Chain Oiler DrawTextToScreen(CHAINOILERICONX, CHAINOILERICONY, chainOilerIconColour, _lastChainOilerIconColour, 1, "]", "]");}

uint16_t GetIconColour(double minGoodValue, double maxGoodValue, double currentValue){ if (currentValue >= minGoodValue && currentValue <= maxGoodValue) return ICONCOLOURGOOD; else

Page 15: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

return ICONCOLOURBAD;}

String FormatDateTime(byte dateTimeUnit){ if (String(dateTimeUnit).length() == 1) return "0" + String(dateTimeUnit); else return String(dateTimeUnit);}

void DrawDataValuesToScreen(double batteryVoltage, double temperature, int courseDataX, int courseDataY, int lastCourseDataX, int lastCourseDataY, int oilerPercentageLeft){ //Date DrawTextToScreen(DATEX, DATEY, DATACOLOUR, DATACOLOUR, 2, FormatDateTime(_day) + "/" + FormatDateTime(_month) + "/" + String(_year), FormatDateTime(_lastDay) + "/" + FormatDateTime(_lastMonth) + "/" + String(_lastYear));

//Time DrawTextToScreen(TIMEX, TIMEY, DATACOLOUR, DATACOLOUR, 2, FormatDateTime(_hour) + ":" + FormatDateTime(_minute) + ":" + FormatDateTime(_second), FormatDateTime(_lastHour) + ":" + FormatDateTime(_lastMinute) + ":" + FormatDateTime(_lastSecond));

//Speed DrawTextToScreen(SPEEDX, SPEEDY, DATACOLOUR, DATACOLOUR, 4, String(_speed), String(_lastSpeed)); //Trip meter DrawDoubleToScreen(TRIPMETERMILEAGEX, TRIPMETERMILEAGEY, DATACOLOUR, DATACOLOUR, 2, _tripMetermileage, _lastTripMetermileage, 1); //Battery Data DrawDoubleToScreen(BATTERYDATAX, BATTERYDATAY, DATACOLOUR, DATACOLOUR, 2, batteryVoltage, _lastBatteryVoltage, 1);

//DrawPetrolCanAllIcon Data DrawDoubleToScreen(PETROLCANALLDATAX, PETROLCANALLDATAY, DATACOLOUR, DATACOLOUR, 2, _totalMpg, _lastTotalMpg, 1);

//PetrolCanLast1 Data DrawDoubleToScreen(PETROLCANLAST1DATAX, PETROLCANLAST1DATAY, DATACOLOUR, DATACOLOUR, 2, _last1Mpg, _lastLast1Mpg, 1);

//Temperature Data DrawTextToScreen(TEMPERATUREDATAX, TEMPERATUREDATAY, DATACOLOUR, DATACOLOUR, 2, String((int)temperature), String((int)_lastTemperature));

//Latitude Data DrawDoubleToScreen(LATITUDEDATAX, LATITUDEDATAY, DATACOLOUR, DATACOLOUR, 2, _latitude, _lastLatitude, 5);

//Longitude Data DrawDoubleToScreen(LONGITUDEDATAX, LONGITUDEDATAY, DATACOLOUR, DATACOLOUR, 2, _longitude, _lastLongitude, 5);

Page 16: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

//Altitude Data DrawDoubleToScreen(ALTITUDEDATAX, ALTITUDEDATAY, DATACOLOUR, DATACOLOUR, 2, _altitude, _lastAltitude, 1);

//Satellite Data DrawTextToScreen(SATELLITEDATAX, SATELLITEDATAY, DATACOLOUR, DATACOLOUR, 2, String(_numSatellites), String(_lastNumSatellites));

//Chain Oiler Data DrawTextToScreen(CHAINOILERDATAX, CHAINOILERDATAY, DATACOLOUR, DATACOLOUR, 2, String(oilerPercentageLeft), String(_lastOilerPercentageLeft));

//Course Data DrawTextToScreen(COURSEDATAX, COURSEDATAY, DATACOLOUR, DATACOLOUR, 2, String(_course), String(_lastCourse));

if (_firstScreenIteration || _course != _lastCourse) { _tft.fillCircle(lastCourseDataX, lastCourseDataY, COURSESMALLRADIUS, BLACK);

//Redraw the big circle as we will have removed a chunk from it in the last line _tft.drawCircle(COURSEICONX, COURSEICONY, COURSELARGERADIUS, ICONCOLOURGOOD);

_tft.fillCircle(courseDataX, courseDataY, COURSESMALLRADIUS, DATACOLOUR); }

//Performance //DrawTextToScreen(70, 200, MAGENTA, MAGENTA, 1, String(freeMemory()), "&"); //DrawTextToScreen(180, 200, MAGENTA, MAGENTA, 1, String(iteration), "&");}

void DrawDoubleToScreen(int positionX, int positionY, uint16_t newColour, uint16_t oldColour, int textSize, double newValue, double oldValue, int decimalPlaces){ int newValueLength = String((int)newValue).length() + decimalPlaces + 2; //1 for decimal point, one for trailing null int oldValueLength = String((int)oldValue).length() + decimalPlaces + 2; char charArray[newValueLength]; char lastCharArray[oldValueLength];

DrawTextToScreen(positionX, positionY, newColour, oldColour, textSize, dtostrf(newValue, newValueLength - decimalPlaces, decimalPlaces, charArray), dtostrf(oldValue, oldValueLength - decimalPlaces, decimalPlaces, lastCharArray));}

Page 17: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

void DrawTextToScreen(int positionX, int positionY, uint16_t newColour, uint16_t oldColour, int textSize, String newText, String oldText){ if (_firstScreenIteration || newColour != oldColour || newText != oldText) { _tft.fillRect(positionX, positionY, (textSize * 6 * oldText.length()), textSize * 8, BLACK); _tft.setCursor(positionX, positionY); _tft.setTextColor(newColour); _tft.setTextSize(textSize); _tft.println(newText); }}

void AddNewFuelData(int mileage, double litres){ //Add to total mileage long totalmileage = EEPROMReadlong(EEPROM_TOTALMILEAGE); EEPROMWritelong(EEPROM_TOTALMILEAGE, totalmileage + mileage);

//Add to total litres double totalLitres = EEPROMReadDouble(EEPROM_TOTALLITRES); EEPROMWriteDouble(EEPROM_TOTALLITRES, totalLitres + litres);

//enter the new value EEPROMWritelong(EEPROM_MILEAGELAST1, mileage); EEPROMWriteDouble(EEPROM_LITRESLAST1, litres);}

void ReadFuelData(){ //Calculate total mpg long totalMileage = EEPROMReadlong(EEPROM_TOTALMILEAGE); double totalLitres = EEPROMReadDouble(EEPROM_TOTALLITRES);

if (totalMileage == 0) return;

double totalGallons = totalLitres / LITRESPERGALLON; _totalMpg = floor(totalMileage / totalGallons);

//Calculate last1 mpg long mileageLast1 = EEPROMReadlong(EEPROM_MILEAGELAST1); double litresLast1 = EEPROMReadDouble(EEPROM_LITRESLAST1);

double last1Gallons = litresLast1 / LITRESPERGALLON; _last1Mpg = floor(mileageLast1 / last1Gallons);}

void ReadEepromWriteCountData(){ _eepromLimitOffset = EEPROMReadlong(EEPROM_LIMITOFFSET); _eepromWriteCountNum = EEPROMReadlong(EEPROM_WRITECOUNT + _eepromLimitOffset);}

Page 18: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

void ReadOilerData(){ _oilermileageWhenFull = EEPROMReadlong(EEPROM_OILERMILEAGEWHENFULL); _oilermileageUntilEmpty = EEPROMReadDouble(EEPROM_OILERMILEAGEUNTILEMPTY + _eepromLimitOffset);}

void UpdateOilerData(double oilermileageUntilEmpty){ EEPROMWriteDouble(EEPROM_OILERMILEAGEUNTILEMPTY + _eepromLimitOffset, oilermileageUntilEmpty);}

void ReadTripMetermileageData(){ _tripMetermileage = EEPROMReadDouble(EEPROM_TRIPMETERMILEAGE + _eepromLimitOffset);}

void UpdateTripMetermileageData(double newmileage){ EEPROMWriteDouble(EEPROM_TRIPMETERMILEAGE + _eepromLimitOffset, newmileage);

_eepromWriteCountNum++; EEPROMWritelong(EEPROM_WRITECOUNT + _eepromLimitOffset, _eepromWriteCountNum);

//New cell will start from zero again if (_eepromWriteCountNum == 100000) { _eepromWriteCountNum = 0; _eepromLimitOffset += 50;

EEPROMWritelong(EEPROM_LIMITOFFSET, _eepromLimitOffset); EEPROMWriteDouble(EEPROM_TRIPMETERMILEAGE + _eepromLimitOffset, _tripMetermileage); EEPROMWriteDouble(EEPROM_OILERMILEAGEUNTILEMPTY + _eepromLimitOffset, _oilermileageUntilEmpty); EEPROMWritelong(EEPROM_WRITECOUNT + _eepromLimitOffset, _eepromWriteCountNum); }}

//double MapBatteryVoltageReadingToVoltage(int batteryVoltageReading)//{// return batteryVoltageReading * 0.017998935; //0.017998935 = (10000.0 / 2200.0) * (3.27 / 1024.0) * 1.24; //1.24 = calibration//}

//double MapTemperatureReadingToTemperature(int temperatureReading)//{// return temperatureReading * 0.319648094; //(3.27 / 1023.0) * (1000 / 10)//}

void EEPROMWriteDouble(int address, double value)

Page 19: cbf125life.files.wordpress.com€¦ · Web view//Arduino pin 0 (rx) goes to gps tx. #define GPSBAUD 9600. TinyGPS _tinyGps; //Fuel. #define LITRESPERGALLON 4.54609188 //Battery. #define

{ EEPROMWritelong(address, value * 100);}

double EEPROMReadDouble(int address){ return ((double)EEPROMReadlong(address)) / 100;}

//This function will write a 4 byte (32bit) long to the eeprom at//the specified address to adress + 3.void EEPROMWritelong(int address, long value){ //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. EEPROM.write(address, four); EEPROM.write(address + 1, three); EEPROM.write(address + 2, two); EEPROM.write(address + 3, one);}

long EEPROMReadlong(long address){ //Read the 4 bytes from the eeprom memory. long four = EEPROM.read(address); long three = EEPROM.read(address + 1); long two = EEPROM.read(address + 2); long one = EEPROM.read(address + 3);

//Return the recomposed long by using bitshift return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);}

float HaverSine(float lat1, float lon1, float lat2, float lon2){ float ToRad = PI / 180.0; float R = 3956.6; // radius earth in miles float dLat = (lat2-lat1) * ToRad; float dLon = (lon2-lon1) * ToRad; float a = sin(dLat/2) * sin(dLat/2) + cos(lat1 * ToRad) * cos(lat2 * ToRad) * sin(dLon/2) * sin(dLon/2); float c = 2 * atan2(sqrt(a), sqrt(1-a)); float d = R * c; return d;}