speeduino/speeduino/display.ino

197 lines
4.8 KiB
C++

/*
Speeduino - Simple engine management for the Arduino Mega 2560 platform
Copyright (C) Josh Stewart
A full copy of the license may be found in the projects root directory
*/
#ifdef USE_DISPLAY
#include <SPI.h>
#include <Wire.h>
#include "src/Adafruit_SSD1306/Adafruit_GFX.h"
#include "src/Adafruit_SSD1306/Adafruit_SSD1306.h"
Adafruit_SSD1306 display(pinDisplayReset);
void initialiseDisplay()
{
//Protection against older pin mappings where the crank/cam signals were on the SDA and SCL pins. This will cause the Arduino to lock hard if you try to initialise i2c devices when a crank signal is coming in
if(pinTrigger == 20 || pinTrigger == 21 || pinTrigger2 == 20 || pinTrigger2 == 21) { return; }
switch(configPage1.displayType)
{
case 1:
display.SSD1306_SETCOMPINS_V = 0x02;
break;
case 2:
display.SSD1306_SETCOMPINS_V = 0x12;
break;
case 3:
display.SSD1306_SETCOMPINS_V = 0x12;
break;
case 4:
display.SSD1306_SETCOMPINS_V = 0x12;
break;
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("RPM: ");
display.setCursor(0,16);
display.print("CPU: ");
}
void updateDisplay()
{
display.clearDisplay();
display.setCursor(0,0);
switch(configPage1.display1)
{
case 0:
display.print("RPM: ");
display.setCursor(28,0);
display.print(currentStatus.RPM);
break;
case 1:
display.print("PW: ");
display.setCursor(28,0);
display.print(currentStatus.PW1);
break;
case 2:
display.print("Adv: ");
display.setCursor(28,0);
display.print(currentStatus.advance);
break;
case 3:
display.print("VE: ");
display.setCursor(28,0);
display.print(currentStatus.VE);
break;
case 4:
display.print("GamE: ");
display.setCursor(28,0);
display.print(currentStatus.corrections);
break;
case 5:
display.print("TPS: ");
display.setCursor(28,0);
display.print(currentStatus.TPS);
break;
case 6:
display.print("IAT: ");
display.setCursor(28,0);
display.print(currentStatus.IAT);
break;
case 7:
display.print("CLT: ");
display.setCursor(28,0);
display.print(currentStatus.coolant);
break;
}
display.setCursor(0,11);
switch(configPage1.display3)
{
case 0:
display.print("RPM: ");
display.setCursor(28,11);
display.print(currentStatus.RPM);
break;
case 1:
display.print("PW: ");
display.setCursor(28,11);
display.print(currentStatus.PW1);
break;
case 2:
display.print("Adv: ");
display.setCursor(28,11);
display.print(currentStatus.advance);
break;
case 3:
display.print("VE: ");
display.setCursor(28,11);
display.print(currentStatus.VE);
break;
case 4:
display.print("GamE: ");
display.setCursor(28,11);
display.print(currentStatus.corrections);
break;
case 5:
display.print("TPS: ");
display.setCursor(28,11);
display.print(currentStatus.TPS);
break;
case 6:
display.print("IAT: ");
display.setCursor(28,11);
display.print(currentStatus.IAT);
break;
case 7:
display.print("CLT: ");
display.setCursor(28,11);
display.print(currentStatus.coolant);
break;
}
display.setCursor(64,0);
switch(configPage1.display2)
{
case 0:
display.print("O2: ");
display.setCursor(92,0);
display.print(currentStatus.O2);
break;
case 1:
display.print("Vdc: ");
display.setCursor(92,0);
display.print(currentStatus.battery10);
break;
case 2:
display.print("CPU: ");
display.setCursor(92,0);
display.print(currentStatus.loopsPerSecond);
break;
case 3:
display.print("Mem: ");
display.setCursor(92,0);
display.print(currentStatus.freeRAM);
break;
}
display.setCursor(64,11);
switch(configPage1.display4)
{
case 0:
display.print("O2: ");
display.setCursor(92,11);
display.print(currentStatus.O2);
break;
case 1:
display.print("Vdc: ");
display.setCursor(92,11);
display.print(currentStatus.battery10);
break;
case 2:
display.print("CPU: ");
display.setCursor(92,11);
display.print(currentStatus.loopsPerSecond);
break;
case 3:
display.print("Mem: ");
display.setCursor(92,11);
display.print(currentStatus.freeRAM);
break;
}
int barWidth = ldiv(((unsigned long)currentStatus.RPM * 128), 9000).quot;
//int barWidth = map(currentStatus.RPM, 0, 9000, 0, 128);
display.fillRect(0, 20, barWidth, 10, 1);
display.display();
}
#endif