Add files via upload

This commit is contained in:
Bouletmarc 2020-12-04 09:06:00 -05:00 committed by GitHub
parent 51271365bc
commit 1b4470a970
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 3983 additions and 1 deletions

View File

@ -0,0 +1,659 @@
//#####################################################
//#####################################################
//#####################################################
/*
THIS IS THE BM DEVS DATALOGGER
THIS WORKS BY DATALOGGING BMTUNE ISR V3 PROTOCOL ON
THE TX/RX SERIAL PORT. THIS WORKS WITH 2X BUTTONS
NAVIGATION ONLY. IT ONLY WORKS FOR THE 20X04 LCD
IF YOUR SCREEN DOESNT DISPLAY ANY CHARACTERS :
FIND THE LINE 'LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);'
AND REPLACE 0x3F BY 0x20 OR 0x27 OR 0x30
####################################################
ALL CREDITS GOES TO :
-Bouletmarc (BM Devs)
*/
//#####################################################
//#####################################################
//#####################################################
#include "Wire.h"
//#include <stdio.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
//#include <EnableInterrupt.h>
//#include <digitalWriteFast.h>
#include <SPI.h>
#include <SD.h>
//#####################################################
//#####################################################
//#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(I2CByte, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
#include <LiquidCrystal.h>
const int rs = 37, en = 39, d4 = 41, d5 = 42, d6 = 43, d7 = 44;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void noBacklight() {
digitalWrite(46, LOW);
}
void backlight() {
RefreshBackLight();
}
//#####################################################
//#####################################################
//0x20-0x27 - 0x30 - 0x3F
//byte I2CByte = 0x27;
const int NextButton = 29; //Atmega644P=20; //Atmega328P=8
const int BackButton = 28; //Atmega644P=19; //Atmega328P=9
const int BackLightPin = A1; //Atmega644P=12; //Atmega328P=10
const int ContrastPin = A0; //Atmega644P=13; //Atmega328P=None
const int ChipSelectPin = 8; //Atmega644P=4; //Atmega328P=None CS Pin for SD Card
const int StatusLEDPin = 4; //Atmega644P=1; //Atmega328P=None LED Pin for Status
byte Brightness = 255;
byte BrightnessNight = 110;
bool NightMode = false;
byte ContrastLevel = 150;
byte ScreenCurrentPage = 1;
byte ScreenCurrentPeak = 0;
byte ScreenCurrentMenu = 0;
byte ScreenSettingSelected = 0;
byte ScreenOptionSelected = 0;
byte ThisScreenIndex = 0; //current display index number
byte XPos = 0;
byte YPos = 0;
char StringBuffer[20];
const int MaxDataValue = 79;
//bool EcuConnected = false;
bool InMain = true;
bool EngineRunning = false;
unsigned long last_datalog_time = 0;
bool Sleeping = false;
//bool J12Cut = true;
//bool ShowJ12 = false;
//bool WasAvailable = false;
int ScreenPage1[8] = {100, 0, 1, 2, 3, 9, 5, 11};
int ScreenPage2[8] = {200, 0, 7, 8, 14, 15, 28, 30};
int ScreenPage3[8] = {300, 0, 13, 20, 18, 19, 4, 5};
int ScreenPage4[8] = {100, 0, 100, 0, 18, 11, 19, 9};
int ScreenPage5[8] = {100, 0, 100, 0, 107, 0, 8, 16};
int ScreenPage6[8] = {100, 0, 61, 9, 53, 4, 57, 59};
int ScreenPage7[8] = {100, 0, 3, 12, 6, 4, 13, 26};
int ScreenPage8[8] = {41, 37, 35, 24, 25, 23, 17, 21};
const String BoardVersionStr = "2.0";
const String FirmwareVersionStr = "2.01";
byte ProgressBarMode = 2;
byte ProgressBarLeft = 0;
int Timeout = 150;
int Injectors_Size = 240;
byte O2Input = 0;
byte MapValue = 0;
byte UseCelcius = 1;
byte UseKMH = 1;
byte O2Type = 0;
double WBConversion[4] = {0, 1.3, 1, 0.71};
int WBModel = 0;
byte MapByte[4] = {186, 127, 254, 134};
byte Tranny[4] = {72, 113, 178, 214};
int TrannyModel = 0;
int MapModel = 0;
int Warning_RPM = 7600;
int Warning_IAT = 65;
int Warning_ECT = 107;
int mBarMin = -70;
int mBarMax = 1790;
int TempMin = -40;
int TempMax = 140;
int WaitingDelay = 0;
bool WaitingQuick = false;
const int SettingVersion = 3;
//int TimeoutCount = 0;
byte LastChecksum = 0;
const long AutoSaveTime = 120000;
unsigned long last_save_time = 0;
bool SDDetected = true;
bool SDLogging = true;
File myFile;
unsigned int SDFileCount = 0;
//#####################################################
void setup() {
FirstLoadEEPROM();
pinMode(BackButton, INPUT_PULLUP);
pinMode(NextButton, INPUT_PULLUP);
pinMode(StatusLEDPin, OUTPUT);
digitalWrite(StatusLEDPin, HIGH);
pinMode(BackLightPin, OUTPUT);
RefreshBackLight();
//pinMode(ContrastPin,OUTPUT);
//analogWrite(ContrastPin, ContrastLevel); // PWM values from 0 to 255 (0% 100% duty cycle)
//#######################################################
//Atmega644 Interrupt
//enableInterrupt(BackButton, pin_ISR1, CHANGE);
//enableInterrupt(NextButton, pin_ISR2, CHANGE);
digitalWrite(38, LOW); //RW Pins on Atmega64A
//#######################################################
ReCalcValueRange();
//###################
//screen start
lcd.begin(20, 4);
lcd.clear();
ResetBufferIndex();
GetInfosString(20);
PrintTextAnimated(20, 4, 0);
//delay(200);
ResetBufferIndex();
Add_String(BoardVersionStr);
//PrintTextAnimated(3, 15, 0);
writeBigStringAnimated(6, 1);
//delay(200);
ResetBufferIndex();
Add_String("Firmware V" + FirmwareVersionStr);
PrintTextAnimated(20, 3, 3);
/*delay(200);
ResetBufferIndex();
Add_String(FirmwareVersionStr);
PrintTextAnimated(20, 8, 2);*/
/*delay(200);
ResetBufferIndex();
GetInfosString(21);
PrintTextAnimated(20, 3, 3);*/
delay(700);
//lcd.clear();
//###################
Serial.begin(38400);
Serial1.begin(38400);
//ScanForI2C();
//ScanForSD();
digitalWrite(StatusLEDPin, LOW);
lcd.clear();
}
void ScanForSD() {
if (!SD.begin(ChipSelectPin)) {
SDDetected = false;
Serial.println("Card failed, or not present");
}
if (SDDetected) {
SDFileCount = 0;
/*while (SD.exists("BMDatalogger" + SDFileCount + ".bml")) {
SDFileCount++;
Serial.println("BMDatalogger" + SDFileCount + ".bml already exists!");
}*/
}
}
void ReCalcValueRange() {
mBarMin = (int) ((((long) MapByte[1] * 256) + (long) MapByte[0]) - 32768);
mBarMax = (int) ((((long) MapByte[3] * 256) + (long) MapByte[2]) - 32768);
if (UseCelcius == 0) {
TempMin = TempMin * 1.8 + 32.0;
TempMax = TempMax * 1.8 + 32.0;
Warning_IAT = Warning_IAT * 1.8 + 32.0;
Warning_ECT = Warning_ECT * 1.8 + 32.0;
}
}
//#####################################################
void loop() {
RefreshBackLight();
//analogWrite(ContrastPin, ContrastLevel); // PWM values from 0 to 255 (0% 100% duty cycle)
//ConnectBT();
//CheckButtons();
if (millis() - last_save_time > AutoSaveTime) {
AutoSaveEEPROM();
}
//############################
while (WaitingDelay > 0) {
if (InMain && WaitingQuick) ScreenMain();
if (!InMain && WaitingQuick) Display();
delay(1);
WaitingDelay--;
CheckButtons();
if (WaitingDelay <= 0) {
//if (!WaitingQuick) lcd.clear();
//if (WaitingQuick) WaitingQuick = false;
WaitingQuick = false;
}
//if (WaitingQuick) WaitingQuick = false;
}
//############################
if (millis() - last_datalog_time > Timeout) {
//if (TimeoutCount >= Timeout) {
/*if (!J12Cut) {
ScreenJ12();
}
else {*/
GetData();
SetEngineRunning();
ApplyPeak();
//TimeoutCount = 0;
//}
last_datalog_time = millis();
}
//if (!ShowJ12) {
SetSpeedTime();
GetWarnings();
if (InMain) ScreenMain();
if (!InMain) Display();
//}
CheckButtons();
//_delay_us(100);
//TimeoutCount++;
}
//#####################################################
/*void ScanForI2C() {
// Leonardo: wait for serial port to connect
while (!Serial) { }
//scan
byte count = 0;
Wire.begin();
for (byte i = 1; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
if (i != I2CByte)
{
I2CByte = i;
Serial.println ();
Serial.print ("I2CByte Address not set correctly, please set to: ");
Serial.print ("0x");
Serial.print (i, HEX);
//Enless Loop
//while(true) { } //desactivated due to New AutoConnect
}
count++;
}
}
}*/
//#####################################################
void FirstLoadEEPROM() {
if (EEPROM.read(0) != SettingVersion) {
SaveLoadEEPROM(true); //save (never create this version settings)
}
SaveLoadEEPROM(false); //load
LastChecksum = GetSettingsSum();
}
void AutoSaveEEPROM() {
last_save_time = millis();
byte NewChecksum = GetSettingsSum();
if (NewChecksum != LastChecksum) {
if (EEPROM.read(1) != NewChecksum) {
EEPROM.write(0, SettingVersion);
EEPROM.write(1, NewChecksum);
SaveLoadEEPROM(true); //save
LastChecksum = GetSettingsSum();
}
}
//SaveLoadEEPROM(false); //load
//LastChecksum = GetSettingsSum();
}
byte GetSettingsSum() {
byte num = 0;
num = (byte) (num + SettingVersion);
num = (byte) (num + ScreenCurrentPage);
num = (byte) (num + ScreenCurrentPeak);
num = (byte) (num + ScreenCurrentMenu);
if (Sleeping) num = (byte) (num + 1);
if (InMain) num = (byte) (num + 1);
num = (byte) (num + Brightness);
num = (byte) (num + BrightnessNight);
if (NightMode) num = (byte) (num + 1);
num = (byte) (num + ScreenSettingSelected);
num = (byte) (num + ScreenOptionSelected);
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage1[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage1[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage2[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage2[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage3[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage3[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage4[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage4[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage5[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage5[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage6[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage6[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage7[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage7[i]));
}
for (byte i = 1; i < 8; i++) {
num = (byte) (num + GetMSBFromInt(ScreenPage8[i]));
num = (byte) (num + GetLSBFromInt(ScreenPage8[i]));
}
num = (byte) (num + ProgressBarMode);
num = (byte) (num + ProgressBarLeft);
num = (byte) (num + GetMSBFromInt(Timeout));
num = (byte) (num + GetLSBFromInt(Timeout));
num = (byte) (num + GetMSBFromInt(Injectors_Size));
num = (byte) (num + GetLSBFromInt(Injectors_Size));
num = (byte) (num + O2Input);
num = (byte) (num + MapValue);
num = (byte) (num + UseCelcius);
num = (byte) (num + UseKMH);
num = (byte) (num + O2Type);
//missing WB table
for (byte i = 1; i < 4; i++) {
//(int) (ThisDouble * 100)
num = (byte) (num + GetMSBFromInt((int) (WBConversion[i] * 100)));
num = (byte) (num + GetLSBFromInt((int) (WBConversion[i] * 100)));
//num = (byte) (num + GetMSBFromDouble(WBConversion[i]));
//num = (byte) (num + GetLSBFromDouble(WBConversion[i]));
}
num = (byte) (num + WBModel);
for (byte i = 1; i < 4; i++) num = (byte) (num + MapByte[i]);
for (byte i = 1; i < 4; i++) num = (byte) (num + Tranny[i]);
num = (byte) (num + TrannyModel);
num = (byte) (num + MapModel);
num = (byte) (num + GetMSBFromInt(Warning_RPM));
num = (byte) (num + GetLSBFromInt(Warning_RPM));
num = (byte) (num + GetMSBFromInt(Warning_IAT + 40));
num = (byte) (num + GetLSBFromInt(Warning_IAT + 40));
num = (byte) (num + GetMSBFromInt(Warning_ECT + 40));
num = (byte) (num + GetLSBFromInt(Warning_ECT + 40));
num = (byte) (num + GetMSBFromInt(mBarMin + 300));
num = (byte) (num + GetLSBFromInt(mBarMin + 300));
num = (byte) (num + GetMSBFromInt(mBarMax));
num = (byte) (num + GetLSBFromInt(mBarMax));
num = (byte) (num + GetMSBFromInt(TempMin + 40));
num = (byte) (num + GetLSBFromInt(TempMin + 40));
num = (byte) (num + GetMSBFromInt(TempMax + 40));
num = (byte) (num + GetLSBFromInt(TempMax + 40));
return num;
}
/*byte GetMSBFromDouble(double ThisDouble) {
int ThisInt = (int) (ThisDouble * 100);
return GetMSBFromInt(int ThisInt);
}
byte GetLSBFromDouble(double ThisDouble) {
int ThisInt = (int) (ThisDouble * 100);
return GetLSBFromInt(int ThisInt);
}*/
byte GetMSBFromInt(int ThisInt) {
byte MSB = (byte) (ThisInt / 256);
return MSB;
}
byte GetLSBFromInt(int ThisInt) {
byte MSB = (byte) (ThisInt / 256);
byte LSB = (byte) (ThisInt - MSB);
return LSB;
}
void SaveLoadEEPROM(bool IsSaving) {
int CurrAddr = 5;
if (IsSaving) EEPROM.write(CurrAddr, ScreenCurrentPage);
else ScreenCurrentPage = EEPROM.read(CurrAddr);
ScreenCurrentPeak = CheckThisByte(IsSaving, CurrAddr, ScreenCurrentPeak);
CurrAddr++;
ScreenCurrentMenu = CheckThisByte(IsSaving, CurrAddr, ScreenCurrentMenu);
CurrAddr++;
Sleeping = CheckThisBool(IsSaving, CurrAddr, Sleeping);
CurrAddr++;
InMain = CheckThisBool(IsSaving, CurrAddr, InMain);
CurrAddr++;
Brightness = CheckThisByte(IsSaving, CurrAddr, Brightness);
CurrAddr++;
BrightnessNight = CheckThisByte(IsSaving, CurrAddr, BrightnessNight);
CurrAddr++;
NightMode = CheckThisBool(IsSaving, CurrAddr, NightMode);
CurrAddr++;
ScreenSettingSelected = CheckThisByte(IsSaving, CurrAddr, ScreenSettingSelected);
CurrAddr++;
ScreenOptionSelected = CheckThisByte(IsSaving, CurrAddr, ScreenOptionSelected);
CurrAddr++;
//#####################################################################
for (byte i = 1; i < 8; i++) {
ScreenPage1[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage1[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage2[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage2[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage3[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage3[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage4[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage4[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage5[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage5[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage6[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage6[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage7[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage7[i]);
CurrAddr++;
CurrAddr++;
}
for (byte i = 1; i < 8; i++) {
ScreenPage8[i] = CheckThisInt(IsSaving, CurrAddr, ScreenPage8[i]);
CurrAddr++;
CurrAddr++;
}
//#####################################################################
ProgressBarMode = CheckThisByte(IsSaving, CurrAddr, ProgressBarMode);
CurrAddr++;
ProgressBarLeft = CheckThisByte(IsSaving, CurrAddr, ProgressBarLeft);
CurrAddr++;
Timeout = CheckThisInt(IsSaving, CurrAddr, Timeout);
CurrAddr++;
CurrAddr++;
Injectors_Size = CheckThisInt(IsSaving, CurrAddr, Injectors_Size);
CurrAddr++;
CurrAddr++;
O2Input = CheckThisByte(IsSaving, CurrAddr, O2Input);
CurrAddr++;
MapValue = CheckThisByte(IsSaving, CurrAddr, MapValue);
CurrAddr++;
UseCelcius = CheckThisByte(IsSaving, CurrAddr, UseCelcius);
CurrAddr++;
UseKMH = CheckThisByte(IsSaving, CurrAddr, UseKMH);
CurrAddr++;
O2Type = CheckThisByte(IsSaving, CurrAddr, O2Type);
CurrAddr++;
//Missing WB Conversion (double here)
for (byte i = 1; i < 4; i++) {
WBConversion[i] = CheckThisDouble(IsSaving, CurrAddr, WBConversion[i]);
CurrAddr++;
CurrAddr++;
}
WBModel = CheckThisByte(IsSaving, CurrAddr, WBModel);
CurrAddr++;
for (byte i = 1; i < 4; i++) {
MapByte[i] = CheckThisByte(IsSaving, CurrAddr, MapByte[i]);
CurrAddr++;
}
for (byte i = 1; i < 4; i++) {
Tranny[i] = CheckThisByte(IsSaving, CurrAddr, Tranny[i]);
CurrAddr++;
}
TrannyModel = CheckThisByte(IsSaving, CurrAddr, TrannyModel);
CurrAddr++;
MapModel = CheckThisByte(IsSaving, CurrAddr, MapModel);
CurrAddr++;
Warning_RPM = CheckThisInt(IsSaving, CurrAddr, Warning_RPM);
CurrAddr++;
CurrAddr++;
Warning_IAT = CheckThisInt(IsSaving, CurrAddr, Warning_IAT + 40) - 40;
CurrAddr++;
CurrAddr++;
Warning_ECT = CheckThisInt(IsSaving, CurrAddr, Warning_ECT + 40) - 40;
CurrAddr++;
CurrAddr++;
mBarMin = CheckThisInt(IsSaving, CurrAddr, mBarMin + 300) - 300;
CurrAddr++;
CurrAddr++;
mBarMax = CheckThisInt(IsSaving, CurrAddr, mBarMax);
CurrAddr++;
CurrAddr++;
TempMin = CheckThisInt(IsSaving, CurrAddr, TempMin + 40) - 40;
CurrAddr++;
CurrAddr++;
TempMax = CheckThisInt(IsSaving, CurrAddr, TempMax + 40) - 40;
CurrAddr++;
CurrAddr++;
}
//##################################################################
double CheckThisDouble(bool IsSaving, int CurrAddr, double ThisDouble) {
if (IsSaving) {
int ThisInt = (int) (ThisDouble * 100);
CheckThisInt(IsSaving, CurrAddr, ThisInt);
}
else {
return (double) ((double) CheckThisInt(IsSaving, CurrAddr, 9999) / 100.0);
}
return ThisDouble;
}
int CheckThisInt(bool IsSaving, int CurrAddr, int ThisInt) {
if (IsSaving) {
byte MSB = (byte) (ThisInt / 256);
byte LSB = (byte) (ThisInt - MSB);
WriteSingleByte(CurrAddr, MSB);
CurrAddr++;
WriteSingleByte(CurrAddr, LSB);
}
else {
byte MSB = ReadSingleByte(CurrAddr);
CurrAddr++;
byte LSB = ReadSingleByte(CurrAddr);
return ((int) LSB + ((int) MSB * 256));
}
return ThisInt;
}
bool CheckThisBool(bool IsSaving, int CurrAddr, bool ThisBool) {
if (IsSaving) {
if (ThisBool) WriteSingleByte(CurrAddr, 1);
else WriteSingleByte(CurrAddr, 0);
}
else {
if (ReadSingleByte(CurrAddr) == 1) return true;
else return false;
//return ReadSingleByte(CurrAddr);
}
return ThisBool;
}
byte CheckThisByte(bool IsSaving, int CurrAddr, byte ThisByte) {
if (IsSaving) {
WriteSingleByte(CurrAddr, ThisByte);
}
else {
return ReadSingleByte(CurrAddr);
}
return ThisByte;
}
void WriteSingleByte(int CurrAddr, byte ThisByte) {
CurrAddr++;
EEPROM.write(CurrAddr, ThisByte);
}
byte ReadSingleByte(int CurrAddr) {
CurrAddr++;
return EEPROM.read(CurrAddr);
}
//###################################################################

View File

@ -0,0 +1,453 @@
#define ON 1
#define OFF 0
volatile int buttonBack = 0;
volatile int buttonNext = 0;
volatile int buttonDual = 0;
unsigned long last_interrupt_time=0;
const int debouncing = 60;
volatile bool ButtonsPressed = false;
int BrightnessBuffer = 255;
int BrightnessBufferNight = 150;
void CheckButtons() {
//###################
//Atmega64A
pin_ISR1();
pin_ISR2();
//###################
if (ButtonsPressed) {
if (millis() - last_interrupt_time > debouncing) {
ButtonsPressed = false;
last_interrupt_time = millis();
GetButtonStates();
buttonBack=OFF;
buttonNext=OFF;
buttonDual=OFF;
//last_interrupt_time = millis();
}
}
}
void pin_ISR1()
{
if (digitalRead(BackButton) == LOW) {
buttonBack=ON;
ButtonsPressed = true;
ResetButtonTime();
}
CheckDualButton();
}
void pin_ISR2()
{
if (digitalRead(NextButton) == LOW) {
buttonNext=ON;
ButtonsPressed = true;
ResetButtonTime();
}
CheckDualButton();
}
void CheckDualButton() {
if (digitalRead(NextButton) == LOW && digitalRead(BackButton) == LOW) {
buttonBack=OFF;
buttonNext=OFF;
buttonDual=ON;
ButtonsPressed = true;
ResetButtonTime();
}
//ResetButtonTime();
}
void ResetButtonTime() {
last_interrupt_time = millis();
WaitingQuick = true;
WaitingDelay = debouncing*2;
}
void GetButtonStates() {
if (buttonBack == ON) {
/*if (ShowJ12) {
BypassJ12();
}
else {*/
if (!InMain) {
if (ScreenCurrentMenu >= 4 && ScreenCurrentMenu < 12) {
SettingMenuNext();
}
else if (ScreenCurrentMenu >= 13 && ScreenCurrentMenu <= 32) {
SettingMenuNext();
}
else if (ScreenCurrentMenu == 32) {
MainMenu();
}
else if (ScreenCurrentMenu == 33) {
OptionMenuNext();
}
else if (ScreenCurrentMenu == 12) {
SettingPageNext();
}
else {
MainMenu(); //Return to Main Menu
}
} else {
if (!Sleeping) {
MainMenuNext();
}
else {
SleepDevice(); //disable sleeping
}
}
//}
//AutoSaveEEPROM();
}
if (buttonNext == ON) {
/*if (ShowJ12) {
BypassJ12();
}
else {*/
if (!InMain) {
if (ScreenCurrentMenu >= 4) {
if (ScreenCurrentMenu >= 4 && ScreenCurrentMenu < 12) {
SettingMenu(1);
}
else if (ScreenCurrentMenu >= 13 && ScreenCurrentMenu < 32) {
SettingMenu(2);
}
else if (ScreenCurrentMenu == 12) {
IncreaseScreenIndex();
}
else if (ScreenCurrentMenu == 32) {
MainMenu();
}
else if (ScreenCurrentMenu == 33) {
if (ScreenOptionSelected == 0) DecreaseOption();
if (ScreenOptionSelected == 1) IncreaseOption();
if (ScreenOptionSelected == 2) SettingMenu(0);
}
else {
//settings menu (secondary page)
}
}
else {
if(ScreenCurrentMenu != 2) {
NextDisplay();
}
else {
ResetMilCodes();
}
}
}
else {
if(ScreenCurrentMenu == 3) {
SleepDevice();
}
else if(ScreenCurrentMenu == 4) {
SettingMenu(0);
}
else if(ScreenCurrentMenu == 5) {
SetNightMode();
}
else {
MainMenu(); //Select Current Menu
}
}
//}
//AutoSaveEEPROM();
}
//Dual buttons
if (buttonDual == ON) {
if (!InMain) {
if (ScreenCurrentMenu == 0) {
NextDisplay();
}
else if (ScreenCurrentMenu == 1) {
ResetPeaks();
}
else if (ScreenCurrentMenu == 2) {
ResetMilCodes();
}
else if (ScreenCurrentMenu >= 4 && ScreenCurrentMenu < 12) {
MainMenu();
}
else if (ScreenCurrentMenu == 12) {
SettingMenu(0);
}
else if (ScreenCurrentMenu >= 13 && ScreenCurrentMenu <= 32) {
MainMenu();
}
else {
MainMenu();
}
}
else {
if (ScreenCurrentMenu != 3) {
SettingMenu(0);
}
else {
SleepDevice();
}
}
//AutoSaveEEPROM();
}
}
/*void BypassJ12() {
J12Cut = true;
ShowJ12 = false;
WasAvailable = true;
lcd.clear();
ResetBufferIndex();
}*/
void ResetMilCodes() {
lcd.clear();
ResetBufferIndex();
GetInfosString(11);
writeBigString(0, 0);
ResetBufferIndex();
bool Resetted = ResetMil();
if (Resetted) GetInfosString(12);
if (!Resetted) GetInfosString(13);
writeBigString(0, 2);
delay(1000);
lcd.clear();
}
void ResetPeaks() {
lcd.clear();
ResetBufferIndex();
GetInfosString(11);
writeBigString(0, 0);
ResetBufferIndex();
InitPeak();
GetInfosString(8);
writeBigString(2, 2);
delay(1000);
lcd.clear();
ResetBufferIndex();
GetInfosString(12);
writeBigString(0, 0);
//writeBigString(0, 2);
delay(1000);
lcd.clear();
}
void NextDisplay() {
if(ScreenCurrentMenu == 0) {
ScreenCurrentPage++;
if(ScreenCurrentPage > 8) ScreenCurrentPage = 1;
}
if(ScreenCurrentMenu == 1) {
ScreenCurrentPeak++;
if(ScreenCurrentPeak >= MaxDataValue) ScreenCurrentPeak = 0;
}
//SaveLoadEEPROM(true); //save
ShowPage();
}
void MainMenu() {
if (InMain) InMain = false;
else InMain = true;
if (ScreenCurrentMenu > 3) ScreenCurrentMenu = 0;
//SaveLoadEEPROM(true); //save
lcd.clear();
if (InMain) AutoSaveEEPROM();
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
/*void SetWait() {
WaitingQuick = true;
WaitingDelay = debouncing*2;
}*/
void SettingMenu(int PartMenu) {
InMain = false;
if (PartMenu == 0) {
if (ScreenCurrentMenu == 33) {
ScreenCurrentMenu = ScreenSettingSelected;
}
else if (ScreenCurrentMenu == 12) {
ScreenCurrentMenu = ScreenCurrentPage + 3;
}
else {
ScreenCurrentMenu = 4;
}
}
else if (PartMenu == 1) {
ScreenCurrentPage = ScreenCurrentMenu - 3;
ScreenSettingSelected = 0;
ScreenCurrentMenu = 12;
}
else if (PartMenu == 2) {
ScreenSettingSelected = ScreenCurrentMenu;
ScreenOptionSelected = 0;
ScreenCurrentMenu = 33;
}
lcd.clear();
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void SettingMenuNext() {
int PartMenu = 0;
if (ScreenCurrentMenu == 12) PartMenu = 1;
ScreenCurrentMenu++;
//if(ScreenCurrentMenu > 11 && PartMenu == 0) ScreenCurrentMenu = 4;
if(ScreenCurrentMenu == 12 && PartMenu == 0) ScreenCurrentMenu++;
if(ScreenCurrentMenu > 32 && PartMenu == 0) ScreenCurrentMenu = 4;
if(ScreenCurrentMenu != 12 && PartMenu == 1) ScreenCurrentMenu = 12;
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void OptionMenuNext() {
ScreenOptionSelected++;
if (ScreenOptionSelected > 2) ScreenOptionSelected = 0;
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void SettingPageNext() {
ScreenSettingSelected++;
if (ScreenSettingSelected > 15) ScreenSettingSelected = 0;
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void SleepDevice() {
if (!Sleeping) {
BrightnessBuffer = Brightness;
BrightnessBufferNight = BrightnessNight;
Brightness = 0;
BrightnessNight = 0;
analogWrite(BackLightPin, 0); // PWM values from 0 to 255 (0% 100% duty cycle)
//lcd.noBacklight();
noBacklight();
Sleeping = true;
Serial1.end();
} else {
Brightness = BrightnessBuffer;
BrightnessNight = BrightnessBufferNight;
RefreshBackLight();
//lcd.backlight();
backlight();
Sleeping = false;
Serial1.begin(38400);
}
//SaveLoadEEPROM(true); //save
}
void SetNightMode() {
if (!NightMode) {
NightMode = true;
}
else {
NightMode = false;
}
RefreshBackLight();
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void RefreshBackLight() {
if (!NightMode) analogWrite(BackLightPin, Brightness); // PWM values from 0 to 255 (0% 100% duty cycle)
if (NightMode) analogWrite(BackLightPin, BrightnessNight); // PWM values from 0 to 255 (0% 100% duty cycle)
}
void MainMenuNext() {
ScreenCurrentMenu++;
if(ScreenCurrentMenu > 5) ScreenCurrentMenu = 0;
//if(ScreenCurrentMenu > 3) ScreenCurrentMenu = 0;
//SaveLoadEEPROM(true); //save
//delay(40);
WaitingDelay = 40;
WaitingQuick = false;
//SetWait();
}
void ShowPage() {
lcd.clear();
ResetBufferIndex();
GetInfosString(5);
writeBigString(3, 0);
ResetBufferIndex();
if(ScreenCurrentMenu == 0) Add_String(String(ScreenCurrentPage));
if(ScreenCurrentMenu == 1) Add_String(String(ScreenCurrentPeak));
writeBigString(7, 2);
WaitingDelay = 500;
WaitingQuick = false;
//_delay_ms(500);
//lcd.clear();
}
/*void ShowMenu() {
lcd.clear();
ResetBufferIndex();
GetInfosString(6);
writeBigString(3, 0);
ResetBufferIndex();
int XOffset = 0;
if (ScreenCurrentMenu == 0) GetInfosString(7);
if (ScreenCurrentMenu == 1) {
GetInfosString(8);
XOffset = 2;
}
if (ScreenCurrentMenu == 2) {
GetInfosString(9);
XOffset = 5;
}
if (ScreenCurrentMenu == 4) GetInfosString(24);
writeBigString(XOffset, 2);
WaitingDelay = 700;
WaitingQuick = false;
//_delay_ms(1000);
//lcd.clear();
}*/

View File

@ -0,0 +1,397 @@
const char Progbar2_START[][8] PROGMEM = {
{ B01111, B11000, B10000, B10000, B10000, B10000, B11000, B01111 },
{ B01111, B11000, B10011, B10111, B10111, B10011, B11000, B01111 }
};
const char Progbar2_MIDDLE[][8] PROGMEM = {
{ B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111 },
{ B11111, B00000, B11000, B11000, B11000, B11000, B00000, B11111 },
{ B11111, B00000, B11011, B11011, B11011, B11011, B00000, B11111 },
{ B11111, B00000, B00011, B00011, B00011, B00011, B00000, B11111 }
};
const char Progbar2_END[][8] PROGMEM = {
{ B11110, B00011, B00001, B00001, B00001, B00001, B00011, B11110 },
{ B11110, B00011, B11001, B11101, B11101, B11001, B00011, B11110 }
};
const char Progbar3[][8] PROGMEM = {
{ B10101, B00000, B00000, B00000, B00000, B00000, B00000, B10101 },
{ B10101, B10000, B10000, B10000, B10000, B10000, B10000, B10101 },
{ B10101, B10100, B10100, B10100, B10100, B10100, B10100, B10101 },
{ B10101, B10101, B10101, B10101, B10101, B10101, B10101, B10101 },
{ B10101, B00100, B00100, B00100, B00100, B00100, B00100, B10101 },
{ B10101, B00001, B00001, B00001, B00001, B00001, B00001, B10101 }
};
const char Progbar4[][8] PROGMEM = {
{ B11111, B10000, B10000, B10000, B10000, B10000, B10000, B11111 },
{ B11111, B01000, B01000, B01000, B01000, B01000, B01000, B11111 },
{ B11111, B00100, B00100, B00100, B00100, B00100, B00100, B11111 },
{ B11111, B00010, B00010, B00010, B00010, B00010, B00010, B11111 },
{ B11111, B00001, B00001, B00001, B00001, B00001, B00001, B11111 },
{ B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111 }
};
const char custom[][8] PROGMEM = {
{ 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00 }, // char 1
{ 0x18, 0x1C, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F }, // char 2
{ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x03 }, // char 3
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F }, // char 4
{ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1E, 0x1C, 0x18 }, // char 5
{ 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F }, // char 6
{ 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F }, // char 7
{ 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F } // char 8
};
const char *bigChars[][2] = {
{"\024", "\024"}, // Space
{"\024", "\004"}, // .
{"\010\001\002", "\003\004\005"}, // 0
{"\001\002", "\024\377"}, // 1
{"\006\006\002", "\003\007\007"}, // 2
{"\006\006\002", "\007\007\005"}, // 3
{"\003\004\002", "\024\024\377"}, // 4
{"\377\006\006", "\007\007\005"}, // 5
{"\010\006\006", "\003\007\005"}, // 6
{"\001\001\002", "\024\010\024"}, // 7
{"\010\006\002", "\003\007\005"}, // 8
{"\010\006\002", "\024\024\377"}, // 9
{"\004", "\001"}, // :
{"\010\006\002", "\377\024\377"}, // A
{"\377\006\005", "\377\007\002"}, // B
{"\010\001\001", "\003\004\004"}, // C
{"\377\001\002", "\377\004\005"}, // D
{"\377\006\006", "\377\007\007"}, // E
{"\377\006\006", "\377\024\024"}, // F
{"\010\001\001", "\003\004\002"}, // G
{"\377\004\377", "\377\024\377"}, // H
{"\001\377\001", "\004\377\004"}, // I
{"\024\024\377", "\004\004\005"}, // J
{"\377\004\005", "\377\024\002"}, // K
{"\377\024\024", "\377\004\004"}, // L
{"\010\003\005\002", "\377\024\024\377"}, // M
{"\010\002\024\377", "\377\024\003\005"}, // N
{"\010\001\002", "\003\004\005"}, // 0
{"\377\006\002", "\377\024\024"}, // P
{"\010\001\002\024", "\003\004\377\004"}, // Q
{"\377\006\002", "\377\024\002"}, // R
{"\010\006\006", "\007\007\005"}, // S
{"\001\377\001", "\024\377\024"}, // T
{"\377\024\377", "\003\004\005"}, // U
{"\003\024\024\005", "\024\002\010\024"}, // V
{"\377\024\024\377", "\003\010\002\005"}, // W
{"\003\004\005", "\010\024\002"}, // X
{"\003\004\005", "\024\377\024"}, // Y
{"\001\006\005", "\010\007\004"}, // Z
};
byte InitMode = 99;
void CharacterInit(byte bank) {
if (InitMode != bank) {
uint8_t ThisArray[8];
switch (bank) {
case 0:
for (int i=0; i<5; i++ ) {
byte ThisByte = 0x00;
if (ProgressBarMode == 0) {
if (i == 0) ThisByte = 0x1F;
if (i == 1) ThisByte = 0x10;
if (i == 2) ThisByte = 0x18;
if (i == 3) ThisByte = 0x1C;
if (i == 4) ThisByte = 0x1E;
}
if (ProgressBarMode == 1) {
if (i == 0) ThisByte = 0x01;
if (i == 1) ThisByte = 0x10;
if (i == 2) ThisByte = 0x08;
if (i == 3) ThisByte = 0x04;
if (i == 4) ThisByte = 0x02;
}
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) ThisByte;
lcd.createChar (i, ThisArray);
}
break;
case 1:
for (int i=0; i<8; i++ ) {
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &custom[i][i2] );
lcd.createChar (i+1, ThisArray);
}
break;
case 2:
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_START[0][i2] ); lcd.createChar (1, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_START[1][i2] ); lcd.createChar (2, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_MIDDLE[0][i2] ); lcd.createChar (3, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_MIDDLE[1][i2] ); lcd.createChar (4, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_MIDDLE[2][i2] ); lcd.createChar (5, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_END[0][i2] ); lcd.createChar (6, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_END[1][i2] ); lcd.createChar (7, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar2_MIDDLE[3][i2] ); lcd.createChar (8, ThisArray);
break;
case 3:
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[0][i2] ); lcd.createChar (0, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[1][i2] ); lcd.createChar (1, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[2][i2] ); lcd.createChar (2, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[3][i2] ); lcd.createChar (3, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[4][i2] ); lcd.createChar (4, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar3[5][i2] ); lcd.createChar (5, ThisArray);
break;
case 4:
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[0][i2] ); lcd.createChar (0, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[1][i2] ); lcd.createChar (1, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[2][i2] ); lcd.createChar (2, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[3][i2] ); lcd.createChar (3, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[4][i2] ); lcd.createChar (4, ThisArray);
for (int i2=0; i2<8; i2++) ThisArray[i2]= (uint8_t) pgm_read_byte( &Progbar4[5][i2] ); lcd.createChar (5, ThisArray);
break;
}
InitMode = bank;
}
}
void DrawProgressBar(const int value, const int Lenght) {
int percent = GetPeakPercent(value);
DrawProgressBarPercent(percent, Lenght);
}
void DrawProgressBarPercent(const int value, const int Lenght) {
int StyleMode = 1;
if (ProgressBarMode == 2 | ProgressBarMode == 3) StyleMode = 2;
if (ProgressBarMode == 4 | ProgressBarMode == 5) StyleMode = 3;
if (ProgressBarMode == 6) StyleMode = 4;
int WhiteMode = 0;
if (ProgressBarMode == 1| ProgressBarMode == 3 | ProgressBarMode == 5) WhiteMode = 1;
if (StyleMode == 1) CharacterInit(0);
if (StyleMode == 2) CharacterInit(2);
if (StyleMode == 3) CharacterInit(3);
if (StyleMode == 4) CharacterInit(4);
int percent = value;
//int nb_columns = map(percent, 0, 100, 0, Lenght * 2 * 4 - 2 * 4);
//int nb_columns = (percent * ((Lenght * 8) - 8)) / 100;
int nb_columns = (percent * ((Lenght * 2) - 2)) / 100;
double RowsNumber = ((double) Lenght / 100) * (double) percent;
int RowsDone = 0;
lcd.setCursor(XPos, YPos);
//ProgBar Style #1
if (StyleMode == 1) {
if (RowsNumber >= 1) {
for (int i=1; i < RowsNumber; i++) {
if (WhiteMode == 0) lcd.write((uint8_t)0);
if (WhiteMode == 1) lcd.write(' ');
RowsDone++;
}
}
RowsNumber = RowsNumber - RowsDone;
unsigned int peace = RowsNumber * 5;
switch (peace) {
case 0:
if (WhiteMode == 1) {
lcd.write((uint8_t)1);
RowsDone++;
}
break;
case 1:
lcd.write((uint8_t)1); RowsDone++;
break;
case 2:
lcd.write((uint8_t)2); RowsDone++;
break;
case 3:
lcd.write((uint8_t)3); RowsDone++;
break;
case 4:
lcd.write((uint8_t)4); RowsDone++;
break;
case 5:
lcd.write((uint8_t)0); RowsDone++;
break;
}
for (int i =0; i < (Lenght - RowsDone); i++) lcd.write(' ');
}
//ProgBar Style #2
if (StyleMode == 2) {
for (byte i = 0; i < Lenght; ++i) {
if (i == 0) {
if ((nb_columns > 0 && WhiteMode == 0) | (nb_columns == 1 && WhiteMode == 1)) {
lcd.write(2);
nb_columns -= 1;
} else {
lcd.write((uint8_t)1);
}
} else if (i == Lenght -1) {
if (nb_columns > 0) lcd.write(7);
if (nb_columns == 0) lcd.write(6);
} else {
if ((nb_columns >= 2 && WhiteMode == 0) | (nb_columns == 2 && WhiteMode == 1)) {
if (WhiteMode == 0) lcd.write(5);
if (WhiteMode == 1) lcd.write(8);
nb_columns -= 2;
} else if (nb_columns == 1) {
lcd.write(4);
nb_columns -= 1;
} else {
lcd.write(3);
if (WhiteMode == 1 && nb_columns > 2) nb_columns -= 2;
}
}
}
}
//ProgBar Style #3
if (StyleMode == 3) {
if (RowsNumber >= 1) {
for (int i=1; i < RowsNumber; i++) {
if (RowsDone < Lenght - 1) {
if (WhiteMode == 0) lcd.write((uint8_t)3);
if (WhiteMode == 1) lcd.write((uint8_t)0);
RowsDone++;
}
}
}
RowsNumber = RowsNumber - RowsDone;
unsigned int peace = RowsNumber * 5;
switch (peace) {
case 0:
if (RowsDone == 0) {
lcd.write((uint8_t)0); RowsDone++;
}
break;
case 1:
lcd.write((uint8_t)1); RowsDone++;
break;
case 2:
if (WhiteMode == 0) lcd.write((uint8_t)2);
if (WhiteMode == 1) lcd.write((uint8_t)4);
RowsDone++;
break;
case 3:
if (WhiteMode == 0) lcd.write((uint8_t)2);
if (WhiteMode == 1) lcd.write((uint8_t)4);
RowsDone++;
break;
case 4:
if (WhiteMode == 0) lcd.write((uint8_t)3);
if (WhiteMode == 1) lcd.write((uint8_t)5);
RowsDone++;
break;
case 5:
if (WhiteMode == 0) lcd.write((uint8_t)3);
if (WhiteMode == 1) lcd.write((uint8_t)5);
RowsDone++;
break;
}
for (int i =0; i < (Lenght - RowsDone); i++) lcd.write((uint8_t)0);
}
//ProgBar Style #4
if (StyleMode == 4) {
if (RowsNumber >= 1) {
for (int i=1; i < RowsNumber; i++) {
if (RowsDone < Lenght - 1) {
lcd.write((uint8_t)5); RowsDone++;
}
}
}
RowsNumber = RowsNumber - RowsDone;
unsigned int peace = RowsNumber * 5;
switch (peace) {
case 0:
if (RowsDone == 0) {
lcd.write((uint8_t)0); RowsDone++;
}
break;
case 1:
lcd.write((uint8_t)0); RowsDone++;
break;
case 2:
lcd.write((uint8_t)1); RowsDone++;
break;
case 3:
lcd.write((uint8_t)2); RowsDone++;
break;
case 4:
lcd.write((uint8_t)3); RowsDone++;
break;
case 5:
lcd.write((uint8_t)4); RowsDone++;
break;
}
for (int i =0; i < (Lenght - RowsDone); i++) lcd.write((uint8_t)5);
}
}
int writeBigChar(const char ch, const int x, const int y) {
const char *(*blocks)[2] = NULL;
if (ch < ' ' || ch > 'Z') return 0;
if (ch >= '!' && ch <= '-') return 0;
if (ch == '/') return 0;
if (ch >= ';' && ch <= '@') return 0;
int Index = (int) ch - (int) ' ';
if (ch > '!') Index -= 13;
if (ch > '/') Index -= 1;
if (ch > ';') Index -= 6;
blocks = &bigChars[Index];
for (int half = 0; half <=1; half++) {
int t = x;
for (const char *cp = (*blocks)[half]; *cp; cp++) {
if (t < 20) {
lcd.setCursor(t, y+half);
lcd.write(*cp);
t = (t+1) % 40;
}
}
//lcd.setCursor(t, y+half);
//lcd.write(' ');
}
return strlen((*blocks)[0]);
}
void writeBigString(int x, int y) {
CharacterInit(1);
for (int i=0; i < 20; i++) {
char c = StringBuffer[i];
//if ((int) c != 0) x += writeBigChar(c, x, y) + 1;
if ((int) c >= 20) x += writeBigChar(c, x, y);
if ((int) c < 20) i += 20;
}
}
void writeBigStringAnimated(int x, int y) {
CharacterInit(1);
for (int i=0; i < 20; i++) {
char c = StringBuffer[i];
//if ((int) c != 0) x += writeBigChar(c, x, y) + 1;
if ((int) c >= 20) x += writeBigChar(c, x, y);
if ((int) c < 20) i += 20;
delay(20);
}
}

View File

@ -0,0 +1,546 @@
const int Array_Size = 52;
byte Datalog_Bytes[Array_Size];
unsigned long CurrentSDWrite = 0;
// ect, iat, o2, baro, map
// tps, rpmlo, rpmhi, vtec, locam
// hicam, column, vss, injlo, injhi
// ign, knonk, (crank|batt) (crank for crome 1.2, batt for crome 1.4)
//Crome 1.2 Protocol
const byte Crome12_Bytes[18] = {
0x10, 0x11, 0x12, 0x13, 0x14,
0x15, 0x16, 0x17, 0x18, 0x19,
0x1A, 0x1B, 0x20, 0x21, 0x08,
0x23, 0x24, 0x25
};
//Crome 1.4 QD2 Protocol
const byte Crome14_Bytes[18] = {
0x1D, 0x1B, 0x20, 0x1E, 0x14,
0x15, 0x10, 0x11, 0x22, 0x12,
0x13, 0x16, 0x1C, 0x17, 0x18,
0x19, 0x1A, 0x22 //0x22 or 0x1F for Batt
};
//################################################
// ect, iat, map, baro, tps
// o2, rpmlo, rpmhi, rows, column
// vtec, vss, err1, err2, err3
// (fuello, fuelhi, gear, eld, ign) (NG63++)
//NG60-NG62 Protocol
const byte NG60_Bytes[15] = {
0x30, 0x32, 0xF8, 0x34, 0x39,
0xFB, 0xFA, 0x47, 0xFE, 0xFD,
0x18, 0x6C, 0x2B, 0x2C, 0x2D,
};
//NG63 Protocol
const byte NG63_Bytes[20] = {
0x30, 0x32, 0xF8, 0x34, 0x39,
0xFB, 0xFA, 0x47, 0x3B, 0xFD,
0x18, 0x6C, 0x2B, 0x2C, 0x2D,
0x70, 0x6F, 0xFE, 0xFC, 0x63
};
/*void GetJ12Cut() {
J12Cut = false;
WasAvailable = false;
Serial.write((byte) 16);
_delay_ms(500);
if (Serial.available()) {
WasAvailable = true;
if (Serial.read() == 0xcd) J12Cut = true;
}
}*/
void WriteToSD() {
unsigned long FLenght = ((CurrentSDWrite * 72) + 14);
unsigned long long_2 = ((int)((FLenght - 0x7b) - 0x10L)) / (0x7b + 1);
//this.long_3 = struct12_1.long_3;
myFile = SD.open("BMDatalogger.bml", FILE_WRITE);
//myFile = SD.open("BMDatalogger" + SDFileCount + ".bml", FILE_WRITE);
if (CurrentSDWrite == 0)
{
myFile.write((const uint8_t *) 0x42, 1);
myFile.write((const uint8_t *) 0x4d, 1);
myFile.write((const uint8_t *) 0x54, 1);
myFile.write((const uint8_t *) 0x75, 1);
myFile.write((const uint8_t *) 0x6e, 1);
myFile.write((const uint8_t *) 0x65, 1);
myFile.write((const uint8_t *) 0x2e, 1);
myFile.write((const uint8_t *) 0x62, 1);
myFile.write((const uint8_t *) 0x6d, 1);
myFile.write((const uint8_t *) 0x6c, 1);
myFile.write((const uint8_t *) 0x06, 1);
myFile.write((const uint8_t *) 0x00, 1);
myFile.write((const uint8_t *) 0x7b, 1);
myFile.write((const uint8_t *) 0x00, 1);
}
myFile.write((const uint8_t *) Datalog_Bytes[0], 1);
myFile.write((const uint8_t *) Datalog_Bytes[1], 1);
myFile.write((const uint8_t *) Datalog_Bytes[2], 1);
myFile.write((const uint8_t *) Datalog_Bytes[3], 1);
myFile.write((const uint8_t *) Datalog_Bytes[4], 1);
myFile.write((const uint8_t *) Datalog_Bytes[5], 1);
myFile.write((const uint8_t *) Datalog_Bytes[6], 1);
myFile.write((const uint8_t *) Datalog_Bytes[7], 1);
myFile.write((const uint8_t *) Datalog_Bytes[8], 1);
myFile.write((const uint8_t *) Datalog_Bytes[9], 1);
myFile.write((const uint8_t *) Datalog_Bytes[10], 1);
myFile.write((const uint8_t *) Datalog_Bytes[11], 1);
myFile.write((const uint8_t *) Datalog_Bytes[12], 1);
myFile.write((const uint8_t *) Datalog_Bytes[13], 1);
myFile.write((const uint8_t *) Datalog_Bytes[14], 1);
myFile.write((const uint8_t *) Datalog_Bytes[15], 1);
myFile.write((const uint8_t *) Datalog_Bytes[16], 1);
myFile.write((const uint8_t *) Datalog_Bytes[17], 1);
myFile.write((const uint8_t *) Datalog_Bytes[18], 1);
myFile.write((const uint8_t *) Datalog_Bytes[19], 1);
myFile.write((const uint8_t *) Datalog_Bytes[20], 1);
myFile.write((const uint8_t *) Datalog_Bytes[21], 1);
myFile.write((const uint8_t *) Datalog_Bytes[22], 1);
myFile.write((const uint8_t *) Datalog_Bytes[23], 1);
myFile.write((const uint8_t *) Datalog_Bytes[24], 1);
myFile.write((const uint8_t *) Datalog_Bytes[25], 1);
myFile.write((const uint8_t *) GetByte1(CurrentSDWrite + 1), 1);
myFile.write((const uint8_t *) GetByte2(CurrentSDWrite + 1), 1);
myFile.write((const uint8_t *) GetByte1(Timeout), 1);
myFile.write((const uint8_t *) GetByte2(Timeout), 1);
myFile.write((const uint8_t *) Datalog_Bytes[26], 1);
myFile.write((const uint8_t *) Datalog_Bytes[27], 1);
myFile.write((const uint8_t *) Datalog_Bytes[28], 1);
myFile.write((const uint8_t *) Datalog_Bytes[29], 1);
myFile.write((const uint8_t *) Datalog_Bytes[30], 1);
myFile.write((const uint8_t *) Datalog_Bytes[31], 1);
myFile.write((const uint8_t *) Datalog_Bytes[32], 1);
myFile.write((const uint8_t *) Datalog_Bytes[33], 1);
myFile.write((const uint8_t *) Datalog_Bytes[34], 1);
myFile.write((const uint8_t *) Datalog_Bytes[35], 1);
myFile.write((const uint8_t *) Datalog_Bytes[36], 1);
myFile.write((const uint8_t *) Datalog_Bytes[37], 1);
myFile.write((const uint8_t *) Datalog_Bytes[38], 1);
myFile.write((const uint8_t *) Datalog_Bytes[39], 1);
myFile.write((const uint8_t *) Datalog_Bytes[40], 1);
myFile.write((const uint8_t *) Datalog_Bytes[41], 1);
myFile.write((const uint8_t *) Datalog_Bytes[42], 1);
myFile.write((const uint8_t *) Datalog_Bytes[43], 1);
myFile.write((const uint8_t *) Datalog_Bytes[44], 1);
myFile.write((const uint8_t *) Datalog_Bytes[45], 1);
myFile.write((const uint8_t *) Datalog_Bytes[46], 1);
myFile.write((const uint8_t *) Datalog_Bytes[47], 1);
myFile.write((const uint8_t *) Datalog_Bytes[48], 1);
myFile.write((const uint8_t *) Datalog_Bytes[49], 1);
myFile.write((const uint8_t *) Datalog_Bytes[50], 1);
myFile.write((const uint8_t *) GetWBByte(), 1);
myFile.write((const uint8_t *) Datalog_Bytes[8], 1);
myFile.write((const uint8_t *) Datalog_Bytes[9], 1);
myFile.write((const uint8_t *) Datalog_Bytes[10], 1);
myFile.write((const uint8_t *) Datalog_Bytes[11], 1);
//NOT FINISHED HERE //float_0 in bmtune
//myFile.write((const uint8_t *)&Datalog_Bytes, sizeof(Datalog_Bytes));
myFile.close();
CurrentSDWrite++;
}
byte GetByte1(long ThisNumber) {
int Divider = ThisNumber / 255;
return ThisNumber - (Divider * 255);
}
byte GetByte2(long ThisNumber) {
return ThisNumber / 255;
}
void GetData(){
//digitalWrite(StatusLEDPin, HIGH);
if(Serial1.available()) {
int Tries = 0;
while (Serial1.available() < 52 && Tries < 50) {
//delayMicroseconds(1);
delay(1);
Tries++;
}
for (int i = 0; i < Array_Size; i++) {
Datalog_Bytes[i] = Serial1.read();
}
}
Serial1.flush();
Serial1.write(" ");
//digitalWrite(StatusLEDPin, LOW);
//FakeValue += 1;
//if (FakeValue >= 180) FakeValue = 0;
}
bool ResetMil() {
bool MilResetted = false;
Serial1.write((byte) 80);
delay(500);
if (Serial1.available()) {
byte MilReadByte[4] = {0,0,0,0};
for (int i = 0; i < 4; i++) MilReadByte[i] = Serial1.read();
if (MilReadByte[1] == 80) MilResetted = true;
}
return MilResetted;
}
void GetMil() {
int Displayed = 0;
for (int i = 1; i <= 8; i++) {
if (Displayed < 4) {
if (GetActivated(Datalog_Bytes[12], i - 1, false) == 1) {
ResetBufferIndex();
GetErrorString(FixMil(i));
DisplayMil(Displayed);
Displayed++;
}
}
}
for (int j = 1; j <= 8; j++) {
if (Displayed < 4) {
if (GetActivated(Datalog_Bytes[13], j - 1, false) == 1) {
ResetBufferIndex();
GetErrorString(FixMil(j + 8));
DisplayMil(Displayed);
Displayed++;
}
}
}
for (int k = 1; k <= 8; k++) {
if (Displayed < 4) {
if (GetActivated(Datalog_Bytes[14], k - 1, false) == 1) {
ResetBufferIndex();
GetErrorString(FixMil((k + 8) + 8));
DisplayMil(Displayed);
Displayed++;
}
}
}
for (int m = 1; m <= 8; m++) {
if (Displayed < 4) {
if (GetActivated(Datalog_Bytes[15], m - 1, false) == 1) {
ResetBufferIndex();
GetErrorString(FixMil(((m + 8) + 8) + 8));
DisplayMil(Displayed);
Displayed++;
}
}
}
//Nothing Displayed
if (Displayed == 0) {
ResetBufferIndex();
GetInfosString(10);
writeBigString(0, 2);
}
//Reset Overlay if displayed
if (Displayed == 1) {
ResetBufferIndex();
PrintText(10, 10, 2);
}
if (Displayed == 2) {
ResetBufferIndex();
PrintTextLenght(0, 3);
}
if (Displayed == 3) {
ResetBufferIndex();
PrintText(10, 10, 3);
}
}
int FixMil(int Value) {
switch (Value) {
case 0x18:
return 30;
case 0x19:
return 0x1f;
case 0x1a:
return 0x24;
case 0x1b:
return 0x29;
case 0x1c:
return 0x2b;
}
//if (Value >= 0x18) return 0;
return Value;
}
long Long2Bytes(const byte ThisByte1, const byte ThisByte2) {
return ((long) ThisByte2 * 256) + (long) ThisByte1;
}
float GetTemperature(const byte ThisByte) {
float ThisTemp = (float) ThisByte / 51;
ThisTemp = (0.1423*pow(ThisTemp,6)) - (2.4938*pow(ThisTemp,5)) + (17.837*pow(ThisTemp,4)) - (68.698*pow(ThisTemp,3)) + (154.69*pow(ThisTemp,2)) - (232.75*ThisTemp) + 284.24;
ThisTemp = ((ThisTemp - 32)*5)/9;
if (UseCelcius == 0)
ThisTemp = ThisTemp * 1.8 + 32.0;
return ThisTemp;
}
double GetVolt(const byte ThisByte) {
return (double) ThisByte * 0.0196078438311815;
}
float GetDuration(const int ThisInt) {
return ((float) ThisInt * 3.20000004768372) / 1000.0;
}
byte GetActivated(byte ThisByte, const int ThisPos, const bool Reversed) {
int bitArray[8];
for (int i=0; i < 8; ++i ) {
bitArray[i] = ThisByte & 1;
ThisByte = ThisByte >> 1;
}
if (Reversed)
return bitArray[ThisPos] ? (byte) 0 : (byte) 1;
return bitArray[ThisPos] ? (byte) 1 : (byte) 0;
}
float GetInstantConsumption(){
if (GetVssKMH() == 0) return 0;
//float hundredkm = ((60 / GetVssKMH()) * 100) / 60; //minutes needed to travel 100km (OLD)
float hundredkm = 6000 / GetVssKMH(); //minutes needed to travel 100km
float fuelc = (hundredkm * ((Injectors_Size / 100) * GetDuty())) / 1000;
return constrain(fuelc * 4, 0.0, 50.0); //Vary between 0-50 L/100km
}
float GetDuty(){
return ((float) GetRpm() * (float) GetInjDurr()) / 1200;
}
int GetInjDurr(){
//return (int) (Long2Bytes(Datalog_Bytes[17], Datalog_Bytes[18]) / 352);
return GetDuration((int) Long2Bytes(Datalog_Bytes[17], Datalog_Bytes[18]));
}
int GetEct(){
return constrain(GetTemperature(Datalog_Bytes[0]), TempMin, TempMax);
}
int GetIat(){
return constrain(GetTemperature(Datalog_Bytes[1]), TempMin, TempMax);
}
byte GetWBByte(){
byte WBByte = 0;
if (O2Input == 0) WBByte = Datalog_Bytes[2];
if (O2Input == 1) WBByte = Datalog_Bytes[24];
if (O2Input == 2) WBByte = Datalog_Bytes[44];
if (O2Input == 3) WBByte = Datalog_Bytes[45];
return WBByte;
}
double GetO2(){
byte WBByte = 0;
if (O2Input == 0) WBByte = Datalog_Bytes[2];
if (O2Input == 1) WBByte = Datalog_Bytes[24];
if (O2Input == 2) WBByte = Datalog_Bytes[44];
if (O2Input == 3) WBByte = Datalog_Bytes[45];
double RTND = 0.0;
if (O2Type == 0) RTND = constrain((double) InterpolateWB(GetVolt(WBByte)) * 14.7, 10, 20);
if (O2Type == 1) RTND = constrain((double) InterpolateWB(GetVolt(WBByte)), 0, 5);
if (O2Type == 2) RTND = constrain((double) GetVolt(WBByte), 0, 16);
//return RoundThis(1, RTND);
return RTND;
}
double InterpolateWB(double ThisDouble) {
if (ThisDouble < WBConversion[0]) return WBConversion[1];
if (ThisDouble > WBConversion[2]) return WBConversion[3];
return (WBConversion[1] + (((ThisDouble - WBConversion[0]) * (WBConversion[3] - WBConversion[1])) / (WBConversion[2] - WBConversion[0])));
}
int GetMBar() {
long Value = (long) Datalog_Bytes[4];
long MapLow = (long) mBarMin + 32768;
long MapHigh = (long) mBarMax + 32768;
return (int) ((((Value * (MapHigh - MapLow)) / 255) + MapLow) - 32768);
}
int GetMap(){
int mBar = GetMBar();
if (MapValue == 0) return constrain(mBar, mBarMin, mBarMax);
else if (MapValue == 1) {
if (mBar <= 1013) return 0;
else return constrain((int) (((float) mBar - 1013) * 0.01450377), 0, 40); //GetValuePSI(ThisInt);
}
else if (MapValue == 2) return constrain((int) round((double) mBar * 0.1), 0, 105); //GetValueKPa(ThisInt);
else return 0;
}
double GetBoost(){
int ThisInt = GetMBar();
if (ThisInt <= 1013) return 0;
else return (double) (((double) ThisInt - 1013) * 0.0145037695765495);
}
unsigned int GetTps(){
return constrain((int) round(((double) Datalog_Bytes[5] - 25.0) / 2.04), 0, 100);
//return constrain((0.4716 * Datalog_Bytes[5]) - 11.3184, 0, 100);
}
unsigned int GetRpm(){
//return (int) (1875000/Long2Bytes(Datalog_Bytes[6], Datalog_Bytes[7])); //unused
int rpm = (int) (1851562/Long2Bytes(Datalog_Bytes[6], Datalog_Bytes[7]));
return constrain(rpm, 0, 11000);
}
void SetEngineRunning() {
if (GetRpm() < 400) EngineRunning = false;
else EngineRunning = true;
}
unsigned int GetVss(){
if (UseKMH == 1) return (int) Datalog_Bytes[16];
return (int) round((float) Datalog_Bytes[16] / 1.6f);
}
unsigned int GetVssKMH(){
return (unsigned int) Datalog_Bytes[16];
}
double GetInjFV() {
return (double) Long2Bytes(Datalog_Bytes[17], Datalog_Bytes[18]) / 4.0;
}
int GetIgn(){
return constrain((0.25 * Datalog_Bytes[19]) - 6, -6, 60);
}
float GetBattery(){
return constrain((26.0 * Datalog_Bytes[25]) / 270.0, 0, 18);
}
int GetIACVDuty(){
return constrain((int) (Long2Bytes(Datalog_Bytes[49], Datalog_Bytes[50]) / 327.68) - 100, -100, 100);
}
double GetMapVolt(){
return constrain(GetVolt(Datalog_Bytes[4]), 0, 5);
}
double GetTPSVolt(){
return constrain(GetVolt(Datalog_Bytes[5]), 0, 5);
}
//###############################
double GetELDVolt(){
return GetVolt(Datalog_Bytes[24]);
}
unsigned int GetGear(){
long VSS = (long) GetVssKMH();
long FAKERPM = Long2Bytes(Datalog_Bytes[6], Datalog_Bytes[7]);
if (VSS == 0 | GetRpm() == 0) return 0;
long num = ((VSS * 256) * FAKERPM) / 65535;
for (int i = 0; i < 4; i++) if (num < (long) Tranny[i]) return i + 1;
return 5;
}
int GetIgnTable(){
return (0.25 * Datalog_Bytes[20]) - 6;
}
//###############################
bool GetSensorsActived(int ThisB, int ThisI){
return (bool) GetActivated(Datalog_Bytes[ThisB], ThisI, false);
}
//###############################
int GetBaro(){
return (int) round((double) ((int) Datalog_Bytes[3] / 2 + 24) * 7.221 - 59.0);
}
double GetECTFC(){
return GetFC(Datalog_Bytes[26], 128);
}
double GetO2Short(){
return (double) GetFC(Long2Bytes(Datalog_Bytes[27], Datalog_Bytes[28]), 32768);
}
double GetO2Long(){
return (double) GetFC(Long2Bytes(Datalog_Bytes[29], Datalog_Bytes[30]), 32768);
}
double GetIATFC(){
return (double) GetFC(Long2Bytes(Datalog_Bytes[31], Datalog_Bytes[32]), 32768);
}
double GetVEFC(){
return GetFC(Datalog_Bytes[33], 128);
}
float GetIATIC(){
return GetIC(Datalog_Bytes[34]);
}
float GetECTIC(){
return GetIC(Datalog_Bytes[35]);
}
float GetGEARIC(){
return GetIC(Datalog_Bytes[36]);
}
double GetEBCBaseDuty(){
return GetEBC(Datalog_Bytes[40]);
}
double GetEBCDuty(){
return GetEBC(Datalog_Bytes[41]);
}
float GetIC(byte ThisByte) {
if ((int) ThisByte == 128)
return 0.0f;
if ((int) ThisByte < 128)
return (float) (128 - (int) ThisByte) * -0.25f;
return (float) ((int) ThisByte - 128) * 0.25f;
}
double GetFC(long ThisByte, long ThisLong) {
double num = (double) ThisByte / (double) ThisLong;
//if (CorrectionUnits == "multi")
return round((num) * 100) / 100;
//return round(num * 100.0 - 100.0);
}
double GetEBC(byte ThisByte) {
double num = (double) ThisByte / 2.0;
if (num > 100.0) num = 100.0;
return round((num * 10)) / 10;
}

13
BMDatalogger/FileList.txt Normal file
View File

@ -0,0 +1,13 @@
BMDatalogger.ino
ButtonsManager.ino
CustomCharacter.ino
DatalogProtocol.ino
PeakValues.ino
ScreenDisplay.ino
ScreenJ12.ino
ScreenStart.ino
ScreenTexts.ino
SpeedCounter.ino
UNUSEDDISPLAY.ino
Warnings.ino
Version.txt

After

Width:  |  Height:  |  Size: 214 B

598
BMDatalogger/OptionPage.ino Normal file
View File

@ -0,0 +1,598 @@
unsigned long last_shown_option_time=0;
const int SpawnTimeoutOption = 1200;
int CurrentShowOption = 0;
void DisplayOptionPage() {
if (millis() - last_shown_option_time > SpawnTimeoutOption) {
CurrentShowOption++;
if (CurrentShowOption > 3) CurrentShowOption = 0;
last_shown_option_time = millis();
}
ResetBufferIndex();
GetOptionString(ScreenSettingSelected);
GetInfosString(39);
PrintText(20, 0, 0);
//###########################
//Option Value
ResetBufferIndex();
if (ScreenSettingSelected == 13) {
Add_String(String(Timeout));
Add_String("ms");
}
if (ScreenSettingSelected == 14) {
Add_String(String(Brightness));
//int Percent = (Brightness * 100) / 255;
//Add_String(String(Percent));
//Add_String("%");
NightMode = false;
RefreshBackLight();
}
if (ScreenSettingSelected == 15) {
Add_String(String((int) ProgressBarMode));
XPos = 10;
YPos = 1;
DrawProgressBarPercent(50, 10);
}
if (ScreenSettingSelected == 16) {
Add_String(String((int) ProgressBarLeft));
if (ProgressBarLeft == 0) Add_String(" (right)");
if (ProgressBarLeft == 1) Add_String(" (left)");
}
if (ScreenSettingSelected == 17) {
Add_String(String(Injectors_Size));
Add_String("cc");
}
if (ScreenSettingSelected == 18) {
Add_String(String((int) O2Input));
if (O2Input == 0) Add_String(" (O2)");
if (O2Input == 1) Add_String(" (EGR)");
if (O2Input == 2) Add_String(" (ELD)");
if (O2Input == 3) Add_String(" (B6)");
}
if (ScreenSettingSelected == 19) {
Add_String(String((int) UseCelcius));
Add_String(" (");
GetTempCelcius();
Add_String(")");
}
if (ScreenSettingSelected == 20) {
Add_String(String((int) UseKMH));
if (UseKMH == 0) Add_String(" (mph)");
if (UseKMH == 1) Add_String(" (kmh)");
}
if (ScreenSettingSelected == 21) {
Add_String(String((int) O2Type));
if (O2Type == 0) Add_String(" (AFR)");
if (O2Type == 1) Add_String(" (Lambda)");
if (O2Type == 2) Add_String(" (Voltage)");
}
if (ScreenSettingSelected == 22) {
Add_String(String((int) Warning_RPM));
Add_String("rpm");
}
if (ScreenSettingSelected == 23) {
Add_String(String((int) Warning_ECT));
GetTempCelcius();
}
if (ScreenSettingSelected == 24) {
Add_String(String((int) Warning_IAT));
GetTempCelcius();
}
if (ScreenSettingSelected == 25) {
Add_String(String((int) mBarMin));
Add_String("mBar");
}
if (ScreenSettingSelected == 26) {
Add_String(String((int) mBarMax));
Add_String("mBar");
}
if (ScreenSettingSelected == 27) {
Add_String(String((int) TempMin));
GetTempCelcius();
}
if (ScreenSettingSelected == 28) {
Add_String(String((int) TempMax));
GetTempCelcius();
}
if (ScreenSettingSelected == 29) {
if (CurrentShowOption == 0) {
Add_String("Volt:");
Add_String(String((double) WBConversion[0]) + "/" + String((double) WBConversion[2]));
}
if (CurrentShowOption == 1) {
Add_String("Lambda:");
Add_String(String((double) WBConversion[1]) + "/" + String((double) WBConversion[3]));
}
if (CurrentShowOption == 2) {
Add_String("AFR:");
Add_String(String((double) (WBConversion[1] * 14.7)) + "/" + String((double) (WBConversion[3] * 14.7)));
}
if (CurrentShowOption == 3) {
Add_String("Sensor:");
if (WBModel == 0) Add_String("OEM");
if (WBModel == 1) Add_String("AEM");
if (WBModel == 2) Add_String("PLX-M");
if (WBModel == 3) Add_String("FJO");
if (WBModel == 4) Add_String("LC1/LM1");
if (WBModel == 5) Add_String("Techedge");
if (WBModel == 6) Add_String("Zeitronix");
if (WBModel == 7) Add_String("Motec PLM");
if (WBModel == 8) Add_String("JAW");
//if (WBModel == 9) Add_String("Custom");
}
}
if (ScreenSettingSelected == 30) {
if (CurrentShowOption == 0) {
long Value = (((long) MapByte[1] * 256) + (long) MapByte[0]) - 32768;
Add_String("mBar Min:" + String(Value));
}
if (CurrentShowOption == 1) {
long Value = (((long) MapByte[3] * 256) + (long) MapByte[2]) - 32768;
Add_String("mBar Max:" + String(Value));
}
if (CurrentShowOption == 2 || CurrentShowOption == 3) {
Add_String("Sensor:");
if (MapModel == 0) Add_String("OEM");
if (MapModel == 1) Add_String("GM 2");
if (MapModel == 2) Add_String("GM 3");
if (MapModel == 3) Add_String("Motorola 2.5");
if (MapModel == 4) Add_String("AEM 3.5");
if (MapModel == 5) Add_String("Xenocron 3");
if (MapModel == 6) Add_String("Xenocron 4");
if (MapModel == 7) Add_String("AEM 5");
if (MapModel == 8) Add_String("Omni/Hondata4");
}
}
if (ScreenSettingSelected == 31) {
if (CurrentShowOption == 0) {
Add_String("Gear1-2:");
Add_String(String((int) Tranny[0]) + "/" + String((int) Tranny[1]));
}
if (CurrentShowOption == 1) {
Add_String("Gear2-3:");
Add_String(String((int) Tranny[1]) + "/" + String((int) Tranny[2]));
}
if (CurrentShowOption == 2) {
Add_String("Gear3-4:");
Add_String(String((int) Tranny[2]) + "/" + String((int) Tranny[3]));
}
if (CurrentShowOption == 3) {
Add_String("Box:");
if (TrannyModel == 0) Add_String("Y21/Y80/S80 EDM");
if (TrannyModel == 1) Add_String("ITR S80 JDM96-97");
if (TrannyModel == 2) Add_String("ITR S80 JDM98-01");
if (TrannyModel == 3) Add_String("ITR S80 USDM97+");
if (TrannyModel == 4) Add_String("Z6/Y8");
if (TrannyModel == 5) Add_String("GSR USDM 94+");
if (TrannyModel == 6) Add_String("GSR JDM 93+ SIR");
if (TrannyModel == 7) Add_String("LS/RS/GS/SE 94+");
if (TrannyModel == 8) Add_String("H22 USDM 92-96");
if (TrannyModel == 9) Add_String("H22 JDM 92-96");
if (TrannyModel == 10) Add_String("H23 USDM 92-96");
if (TrannyModel == 11) Add_String("H23 JDM 92-96");
if (TrannyModel == 12) Add_String("D16Y7");
}
}
if (ScreenSettingSelected == 15) {
PrintText(10, 0, 1);
}
else {
PrintText(20, 0, 1);
}
//###########################
ResetBufferIndex();
GetInfosString(41);
PrintText(9, 1, 2);
ResetBufferIndex();
GetInfosString(40);
PrintText(9, 11, 2);
ResetBufferIndex();
GetInfosString(34);
PrintText(19, 1, 3);
//###########################
//reset empty indicator
ResetBufferIndex();
if (ScreenOptionSelected != 0) PrintText(1, 0, 2);
if (ScreenOptionSelected != 1) PrintText(1, 10, 2);
if (ScreenOptionSelected != 2) PrintText(1, 0, 3);
//Set Indicator
StringBuffer[0] = '>';
if (ScreenOptionSelected == 0) PrintText(1, 0, 2);
if (ScreenOptionSelected == 1) PrintText(1, 10, 2);
if (ScreenOptionSelected == 2) PrintText(1, 0, 3);
}
//####################################################################################################
//####################################################################################################
//####################################################################################################
void GetOptionString(int ThisOptionIndex) {
//Timeout, backlight, Bar Type, Bar Side
if (ThisOptionIndex == 13) {
GetInfosString(27);
}
else if (ThisOptionIndex == 14) {
GetInfosString(28);
}
else if (ThisOptionIndex == 15) {
GetInfosString(29);
AddThisChar(' ');
GetInfosString(30);
}
else if (ThisOptionIndex == 16) {
GetInfosString(29);
AddThisChar(' ');
GetInfosString(31);
}
//Inj_Size, O2_Input, Temp, Speed
else if (ThisOptionIndex == 17) {
GetInfosString(32);
AddThisChar(' ');
GetInfosString(33);
}
else if (ThisOptionIndex == 18) {
GetSensorString(4);
AddThisChar(' ');
GetInfosString(35);
}
else if (ThisOptionIndex == 19) {
GetInfosString(37);
}
else if (ThisOptionIndex == 20) {
GetInfosString(38);
}
//O2 Type, Warning_Max_RPM, Warning_Max_ECT, Warning_Max_IAT
else if (ThisOptionIndex == 21) {
GetSensorString(4);
AddThisChar(' ');
GetInfosString(30);
}
else if (ThisOptionIndex == 22) {
GetInfosString(16);
AddThisChar(' ');
GetSensorString(0);
}
else if (ThisOptionIndex == 23) {
GetInfosString(16);
AddThisChar(' ');
GetSensorString(1);
}
else if (ThisOptionIndex == 24) {
GetInfosString(16);
AddThisChar(' ');
GetSensorString(2);
}
//MAP_Min, MAP_Max, Temp_Min, Temp_Max
else if (ThisOptionIndex == 25) {
GetInfosString(15);
AddThisChar(' ');
GetSensorString(9);
}
else if (ThisOptionIndex == 26) {
GetInfosString(16);
AddThisChar(' ');
GetSensorString(9);
}
else if (ThisOptionIndex == 27) {
GetInfosString(15);
AddThisChar(' ');
GetInfosString(37);
}
else if (ThisOptionIndex == 28) {
GetInfosString(16);
AddThisChar(' ');
GetInfosString(37);
}
//WBConversion, MapByte, Tranny
else if (ThisOptionIndex == 29) {
GetInfosString(42);
AddThisChar(' ');
GetInfosString(43);
}
else if (ThisOptionIndex == 30) {
GetSensorString(9);
AddThisChar(' ');
GetInfosString(43);
}
else if (ThisOptionIndex == 31) {
GetInfosString(44);
GetInfosString(43);
}
}
//####################################################################################################
//####################################################################################################
//####################################################################################################
void DecreaseOption() {
CurrentShowOption = 3;
last_shown_option_time = millis();
if (ScreenSettingSelected == 13) {
Timeout -= 25;
if (Timeout < 50) Timeout = 600;
}
if (ScreenSettingSelected == 14) {
if (Brightness == 255) Brightness = 250;
Brightness -= 25;
if (Brightness < 0) Brightness = 255;
RefreshBackLight();
}
if (ScreenSettingSelected == 15) {
ProgressBarMode -= 1;
if (ProgressBarMode < 0 || ProgressBarMode > 6) ProgressBarMode = 6;
}
if (ScreenSettingSelected == 16) {
ProgressBarLeft -= 1;
if (ProgressBarLeft < 0 || ProgressBarLeft > 1) ProgressBarLeft = 1;
}
if (ScreenSettingSelected == 17) {
Injectors_Size -= 10;
if (Injectors_Size < 180) Injectors_Size = 2000;
}
if (ScreenSettingSelected == 18) {
O2Input -= 1;
if (O2Input < 0 || O2Input > 3) O2Input = 3;
}
if (ScreenSettingSelected == 19) {
UseCelcius -= 1;
if (UseCelcius < 0 || UseCelcius > 1) UseCelcius = 1;
}
if (ScreenSettingSelected == 20) {
UseKMH -= 1;
if (UseKMH < 0 || UseKMH > 1) UseKMH = 1;
}
if (ScreenSettingSelected == 21) {
O2Type -= 1;
if (O2Type < 0 || O2Type > 2) O2Type = 2;
}
if (ScreenSettingSelected == 22) {
Warning_RPM -= 50;
if (Warning_RPM < 5000) Warning_RPM = 11000;
}
if (ScreenSettingSelected == 23) {
if (UseCelcius == 0) {
Warning_ECT -= 5;
if (Warning_ECT < -40) Warning_ECT = 290;
}
else {
Warning_ECT -= 1;
if (Warning_ECT < -40) Warning_ECT = 141;
}
}
if (ScreenSettingSelected == 24) {
if (UseCelcius == 0) {
Warning_IAT -= 5;
if (Warning_IAT < -40) Warning_IAT = 290;
}
else {
Warning_IAT -= 1;
if (Warning_IAT < -40) Warning_IAT = 141;
}
}
if (ScreenSettingSelected == 25) {
mBarMin -= 10;
if (mBarMin < -70) mBarMin = 250;
}
if (ScreenSettingSelected == 26) {
if (mBarMax == 1790) mBarMax = 1800;
mBarMax -= 100;
if (mBarMax < 1000) mBarMax = 5000;
if (mBarMax == 1800) mBarMax = 1790;
}
if (ScreenSettingSelected == 27) {
if (UseCelcius == 0) {
TempMin -= 5;
if (TempMin < -40) TempMin = 290;
}
else {
TempMin -= 1;
if (TempMin < -40) TempMin = 141;
}
}
if (ScreenSettingSelected == 28) {
if (UseCelcius == 0) {
TempMax -= 5;
if (TempMax < -40) TempMax = 290;
}
else {
TempMax -= 1;
if (TempMax < -40) TempMax = 141;
}
}
if (ScreenSettingSelected == 29) {
WBModel -= 1;
if (WBModel < 0) WBModel = 8;
SetWB();
}
if (ScreenSettingSelected == 30) {
MapModel -= 1;
if (MapModel < 0) MapModel = 8;
SetMap();
}
if (ScreenSettingSelected == 31) {
TrannyModel -= 1;
if (TrannyModel < 0) TrannyModel = 12;
SetTranny();
}
delay(40);
//SetWait();
last_shown_option_time = millis();
}
//####################################################################################################
//####################################################################################################
//####################################################################################################
void SetWB() {
if (WBModel == 0) { WBConversion[0] = 0; WBConversion[1] = 1.3; WBConversion[2] = 1; WBConversion[3] = 0.71; }
if (WBModel == 1) { WBConversion[0] = 0.5; WBConversion[1] = 0.75; WBConversion[2] = 3.38; WBConversion[3] = 1.14; }
if (WBModel == 2) { WBConversion[0] = 0; WBConversion[1] = 0.68; WBConversion[2] = 5; WBConversion[3] = 1.36; }
if (WBModel == 3) { WBConversion[0] = 0.85; WBConversion[1] = 0.68; WBConversion[2] = 5; WBConversion[3] = 1.36; }
if (WBModel == 4) { WBConversion[0] = 0; WBConversion[1] = 0.51; WBConversion[2] = 5; WBConversion[3] = 1.52; }
if (WBModel == 5) { WBConversion[0] = 0; WBConversion[1] = 0.61; WBConversion[2] = 5; WBConversion[3] = 1.29; }
if (WBModel == 6) { WBConversion[0] = 0.15; WBConversion[1] = 0.65; WBConversion[2] = 3.47; WBConversion[3] = 1.51; }
if (WBModel == 7) { WBConversion[0] = 1; WBConversion[1] = 0.73; WBConversion[2] = 4.5; WBConversion[3] = 1.5; }
if (WBModel == 8) { WBConversion[0] = 1.02; WBConversion[1] = 0.69; WBConversion[2] = 2.21; WBConversion[3] = 1.5; }
}
void SetTranny() {
if (TrannyModel == 0) { Tranny[0] = 0x46; Tranny[1] = 0x67; Tranny[2] = 0x8E; Tranny[3] = 0xB8; }
if (TrannyModel == 1) { Tranny[0] = 0x46; Tranny[1] = 0x67; Tranny[2] = 0x8E; Tranny[3] = 0xB8; }
if (TrannyModel == 2) { Tranny[0] = 0x42; Tranny[1] = 0x5D; Tranny[2] = 0x87; Tranny[3] = 0xB6; }
if (TrannyModel == 3) { Tranny[0] = 0x46; Tranny[1] = 0x64; Tranny[2] = 0x91; Tranny[3] = 0xB8; }
if (TrannyModel == 4) { Tranny[0] = 0x48; Tranny[1] = 0x71; Tranny[2] = 0xAA; Tranny[3] = 0xE3; }
if (TrannyModel == 5) { Tranny[0] = 0x46; Tranny[1] = 0x6E; Tranny[2] = 0x9A; Tranny[3] = 0xC4; }
if (TrannyModel == 6) { Tranny[0] = 0x46; Tranny[1] = 0x6E; Tranny[2] = 0x9A; Tranny[3] = 0xC4; }
if (TrannyModel == 7) { Tranny[0] = 0x48; Tranny[1] = 0x71; Tranny[2] = 0xB2; Tranny[3] = 0xD6; }
if (TrannyModel == 8) { Tranny[0] = 0x47; Tranny[1] = 0x6E; Tranny[2] = 0x9E; Tranny[3] = 0xC3; }
if (TrannyModel == 9) { Tranny[0] = 0x47; Tranny[1] = 0x6E; Tranny[2] = 0x9E; Tranny[3] = 0xC9; }
if (TrannyModel == 10) { Tranny[0] = 0x47; Tranny[1] = 0x6E; Tranny[2] = 0x9E; Tranny[3] = 0xC9; }
if (TrannyModel == 11) { Tranny[0] = 0x4A; Tranny[1] = 0x7B; Tranny[2] = 0xAF; Tranny[3] = 0xE0; }
if (TrannyModel == 12) { Tranny[0] = 0x4B; Tranny[1] = 0x7D; Tranny[2] = 0xBC; Tranny[3] = 0xED; }
}
void SetMap() {
if (MapModel == 0) { MapByte[0] = 0xba; MapByte[1] = 0x7f; MapByte[2] = 0xfe; MapByte[3] = 0x86; }
if (MapModel == 1) { MapByte[0] = 0x08; MapByte[1] = 0x80; MapByte[2] = 0xf9; MapByte[3] = 0x87; }
if (MapModel == 2) { MapByte[0] = 0x0b; MapByte[1] = 0x80; MapByte[2] = 0x53; MapByte[3] = 0x8c; }
if (MapModel == 3) { MapByte[0] = 0x46; MapByte[1] = 0x80; MapByte[2] = 0x1e; MapByte[3] = 0x8a; }
if (MapModel == 4) { MapByte[0] = 0x51; MapByte[1] = 0x7e; MapByte[2] = 0x04; MapByte[3] = 0x8f; }
if (MapModel == 5) { MapByte[0] = 0x0b; MapByte[1] = 0x80; MapByte[2] = 0xe0; MapByte[3] = 0x8b; }
if (MapModel == 6) { MapByte[0] = 0x23; MapByte[1] = 0x80; MapByte[2] = 0x54; MapByte[3] = 0x90; }
if (MapModel == 7) { MapByte[0] = 0x8f; MapByte[1] = 0x7d; MapByte[2] = 0xf9; MapByte[3] = 0x95; }
if (MapModel == 8) { MapByte[0] = 0x23; MapByte[1] = 0x80; MapByte[2] = 0x54; MapByte[3] = 0x90; }
mBarMin = (int) ((((long) MapByte[1] * 256) + (long) MapByte[0]) - 32768);
mBarMax = (int) ((((long) MapByte[3] * 256) + (long) MapByte[2]) - 32768);
}
//####################################################################################################
//####################################################################################################
//####################################################################################################
void IncreaseOption() {
CurrentShowOption = 3;
last_shown_option_time = millis();
if (ScreenSettingSelected == 13) {
Timeout += 25;
if (Timeout > 600) Timeout = 50;
}
if (ScreenSettingSelected == 14) {
if (Brightness == 255) Brightness = 250;
Brightness += 25;
if (Brightness == 250) Brightness = 255;
if (Brightness > 255) Brightness = 0;
RefreshBackLight();
}
if (ScreenSettingSelected == 15) {
ProgressBarMode += 1;
if (ProgressBarMode > 6) ProgressBarMode = 0;
}
if (ScreenSettingSelected == 16) {
ProgressBarLeft += 1;
if (ProgressBarLeft > 1) ProgressBarLeft = 0;
}
if (ScreenSettingSelected == 17) {
Injectors_Size += 10;
if (Injectors_Size > 2000) Injectors_Size = 180;
}
if (ScreenSettingSelected == 18) {
O2Input += 1;
if (O2Input > 3) O2Input = 0;
}
if (ScreenSettingSelected == 19) {
UseCelcius += 1;
if (UseCelcius > 1) UseCelcius = 0;
}
if (ScreenSettingSelected == 20) {
UseKMH += 1;
if (UseKMH > 1) UseKMH = 0;
}
if (ScreenSettingSelected == 21) {
O2Type += 1;
if (O2Type > 2) O2Type = 0;
}
if (ScreenSettingSelected == 22) {
Warning_RPM += 50;
if (Warning_RPM > 11000) Warning_RPM = 5000;
}
if (ScreenSettingSelected == 23) {
if (UseCelcius == 0) {
Warning_ECT += 5;
if (Warning_ECT > 190) Warning_ECT = -40;
}
else {
Warning_ECT += 1;
if (Warning_ECT > 141) Warning_ECT = -40;
}
}
if (ScreenSettingSelected == 24) {
if (UseCelcius == 0) {
Warning_IAT += 5;
if (Warning_IAT > 190) Warning_IAT = -40;
}
else {
Warning_IAT += 1;
if (Warning_IAT > 141) Warning_IAT = -40;
}
}
if (ScreenSettingSelected == 25) {
mBarMin += 10;
if (mBarMin > 250) mBarMin = -70;
}
if (ScreenSettingSelected == 26) {
if (mBarMax == 1790) mBarMax = 1800;
mBarMax += 100;
if (mBarMax > 5000) mBarMax = 1000;
if (mBarMax == 1800) mBarMax = 1790;
}
if (ScreenSettingSelected == 27) {
if (UseCelcius == 0) {
TempMin += 5;
if (TempMin > 290) TempMin = -40;
}
else {
TempMin += 1;
if (TempMin > 141) TempMin = -40;
}
}
if (ScreenSettingSelected == 28) {
if (UseCelcius == 0) {
TempMax += 5;
if (TempMax > 290) TempMax = -40;
}
else {
TempMax += 1;
if (TempMax > 141) TempMax = -40;
}
}
if (ScreenSettingSelected == 29) {
WBModel += 1;
if (WBModel > 8) WBModel = 0;
SetWB();
}
if (ScreenSettingSelected == 30) {
MapModel += 1;
if (MapModel > 8) MapModel = 0;
SetMap();
}
if (ScreenSettingSelected == 31) {
TrannyModel += 1;
if (TrannyModel > 12) TrannyModel = 0;
SetTranny();
}
delay(40);
//SetWait();
last_shown_option_time = millis();
}

View File

@ -0,0 +1,86 @@
int PeakValuesMin[MaxDataValue];
int PeakValuesMax[MaxDataValue];
int PeakMinValue = 0;
int PeakMaxValue = 1;
byte PeakInitialized = 0;
bool PeakSet = false;
void InitPeak() {
for (int i=0; i < MaxDataValue; i++) {
ThisScreenIndex = i;
int Value = (int) GetInt();
PeakValuesMin[i] = Value;
PeakValuesMax[i] = Value;
}
PeakInitialized = 1;
}
void SetPeakValue(const int minValue, const int maxValue) {
if (PeakInitialized == 0) InitPeak();
PeakMinValue = minValue;
PeakMaxValue = maxValue;
PeakSet = true;
}
void ApplyPeak() {
for (int i=0; i < MaxDataValue; i++) {
ThisScreenIndex = i;
SetPeak();
int ThisValue = (int) GetInt();
if (ThisValue < PeakValuesMin[ThisScreenIndex]) PeakValuesMin[ThisScreenIndex] = ThisValue;
if (ThisValue > PeakValuesMax[ThisScreenIndex]) PeakValuesMax[ThisScreenIndex] = ThisValue;
}
}
void SetPeak() {
PeakSet = false;
if (ThisScreenIndex == 0) SetPeakValue(0,11000);
if (ThisScreenIndex == 1) SetPeakValue(TempMin, TempMax);
if (ThisScreenIndex == 1) SetPeakValue(TempMin, TempMax);
if (ThisScreenIndex == 3) SetPeakValue(0,100);
if (ThisScreenIndex == 4) SetPeakValue(10,20);
if (ThisScreenIndex == 5) SetPeakValue(-6,60);
if (ThisScreenIndex == 6) SetPeakValue(0,20);
if (ThisScreenIndex == 7) SetPeakValue(0,50);
if (ThisScreenIndex == 8) SetPeakValue(-100,100);
if (ThisScreenIndex == 9) SetPeakValue(mBarMin, mBarMax);
if (ThisScreenIndex == 10) SetPeakValue(0,40);
if (ThisScreenIndex == 11) SetPeakValue(0,300);
if (ThisScreenIndex == 13) SetPeakValue(0,18);
if (ThisScreenIndex == 16) SetPeakValue(0,3000);
if (ThisScreenIndex == 18) SetPeakValue(2,18);
if (ThisScreenIndex == 19) SetPeakValue(2,18);
if (ThisScreenIndex == 22) SetPeakValue(0,18);
if (ThisScreenIndex == 26) SetPeakValue(0,5);
if (ThisScreenIndex == 59) SetPeakValue(-6,60);
if (ThisScreenIndex == 68) SetPeakValue(114, 3800);
if (ThisScreenIndex == 69) SetPeakValue(0, 100);
if (ThisScreenIndex == 70) SetPeakValue(0, 255);
if (ThisScreenIndex == 71) SetPeakValue(0, 255);
if (ThisScreenIndex == 72) SetPeakValue(0, 255);
if (ThisScreenIndex == 73) SetPeakValue(0, 255);
if (ThisScreenIndex == 74) SetPeakValue(0, 255);
if (ThisScreenIndex == 75) SetPeakValue(0, 60);
if (ThisScreenIndex == 76) SetPeakValue(0, 60);
if (ThisScreenIndex == 77) SetPeakValue(0, 60);
if (ThisScreenIndex == 78) SetPeakValue(0, 100);
if (ThisScreenIndex == 79) SetPeakValue(0, 100);
if (!PeakSet) SetPeakValue(0,1);
}
double GetPeakPercent(int value) {
SetPeak();
if (value < PeakMinValue) return 0.0;
if (value > PeakMaxValue) return 100.0;
return map((double) value, (double) PeakMinValue, (double) PeakMaxValue, (double) 0, (double) 100);
}
int GetPeakMin() {
return PeakValuesMin[ThisScreenIndex];
}
int GetPeakMax() {
return PeakValuesMax[ThisScreenIndex];
}

View File

@ -0,0 +1,268 @@
void Display() {
if (ScreenCurrentMenu == 2) {
//Mil Menu
ResetBufferIndex();
GetInfosString(9);
writeBigString(5, 0);
GetMil();
}
else if (ScreenCurrentMenu >= 4 && ScreenCurrentMenu < 12) {
DisplaySettingPage();
}
else if (ScreenCurrentMenu >= 13 && ScreenCurrentMenu <= 32) {
DisplaySettingPageOption();
}
else if (ScreenCurrentMenu == 33) {
DisplayOptionPage();
}
else {
for (int i=0; i<8; i++) {
ThisScreenIndex = 0;
if (ScreenCurrentPage == 0) ScreenCurrentPage = 1;
if (ScreenCurrentPage == 1) ThisScreenIndex = ScreenPage1[i];
if (ScreenCurrentPage == 2) ThisScreenIndex = ScreenPage2[i];
if (ScreenCurrentPage == 3) ThisScreenIndex = ScreenPage3[i];
if (ScreenCurrentPage == 4) ThisScreenIndex = ScreenPage4[i];
if (ScreenCurrentPage == 5) ThisScreenIndex = ScreenPage5[i];
if (ScreenCurrentPage == 6) ThisScreenIndex = ScreenPage6[i];
if (ScreenCurrentPage == 7) ThisScreenIndex = ScreenPage7[i];
if (ScreenCurrentPage == 8) ThisScreenIndex = ScreenPage8[i];
int ThisScreenMode = 0; //normal
if (ThisScreenIndex >= 100) ThisScreenMode = 1; //progressbar
if (ThisScreenIndex >= 200) ThisScreenMode = 2; //big
if (ThisScreenIndex >= 300) ThisScreenMode = 3; //big2
//peak values
if (ScreenCurrentMenu == 1) {
ThisScreenMode = 4;
ThisScreenIndex = ScreenCurrentPeak;
}
//setting page menu '>' indicator
if (ScreenCurrentMenu == 12) {
SetCursor();
}
//####
while (ThisScreenIndex >= 100) {
ThisScreenIndex -= 100;
}
/*if (ThisScreenIndex >= 100) ThisScreenIndex -= 100;
else if (ThisScreenIndex >= 200) ThisScreenIndex -= 200;
else if (ThisScreenIndex >= 300) ThisScreenIndex -= 300;*/
ResetBufferIndex();
//Only Run 'reconized' data values
if (ThisScreenIndex <= MaxDataValue) {
GetSensorString(ThisScreenIndex);
GetInfosString(39);
if (ThisScreenMode < 2) {
SetValueToBuffer();
Add_Sensor_Desc();
}
SetPos(i);
if (ThisScreenMode >= 1) XPos = 0;
if (ThisScreenMode >= 3) YPos = 0;
//normal
if (ThisScreenMode == 0) {
PrintText(10, XPos, YPos);
}
//progressbar
if (ThisScreenMode == 1) {
if (ProgressBarLeft == 0) XPos = 10;
PrintText(10, XPos, YPos);
if (ProgressBarLeft == 0) XPos = 0;
if (ProgressBarLeft == 1) XPos = 10;
DrawProgressBar((int) GetInt(), 10);
i++;
}
//big font
if (ThisScreenMode == 2) {
PrintTextLenght(XPos, YPos);
PrintTextLenghtEmpty(XPos, YPos + 1);
int StartAt = GetBufferLenght();
ResetBufferIndex();
SetValueToBuffer();
writeBigString(StartAt, YPos);
i += 3;
}
//big font #2
if (ThisScreenMode == 3) {
writeBigString(XPos, YPos);
ResetBufferIndex();
SetValueToBuffer();
writeBigString(XPos, YPos+2);
i += 8;
}
//peak
if (ThisScreenMode == 4) {
writeBigString(XPos, YPos);
ResetBufferIndex();
GetInfosString(15);
GetInfosString(39);
Add_String(String(GetPeakMin()));
Add_Sensor_Desc();
PrintText(10, XPos, YPos + 2);
ResetBufferIndex();
GetInfosString(17);
GetInfosString(39);
SetValueToBuffer();
Add_Sensor_Desc();
PrintText(10, XPos + 10, YPos + 2);
ResetBufferIndex();
GetInfosString(16);
GetInfosString(39);
Add_String(String(GetPeakMax()));
Add_Sensor_Desc();
PrintText(20, XPos, YPos + 3);
i += 8;
}
}
}
}
}
void SetPos(const int ThisLine) {
XPos = 0;
YPos = ThisLine;
if (ThisLine == 1) {
XPos = 10;
YPos = 0;
}
if (ThisLine == 2) YPos = 1;
if (ThisLine == 3) {
XPos = 10;
YPos = 1;
}
if (ThisLine == 4) YPos = 2;
if (ThisLine == 5) {
XPos = 10;
YPos = 2;
}
if (ThisLine == 6) YPos = 3;
if (ThisLine == 7) {
XPos = 10;
YPos = 3;
}
}
double GetInt() {
if (ThisScreenIndex == 0) return (double) GetRpm();
if (ThisScreenIndex == 1) return (double) GetEct();
if (ThisScreenIndex == 2) return (double) GetIat();
if (ThisScreenIndex == 3) return (double) GetTps();
if (ThisScreenIndex == 4) return (double) GetO2();
if (ThisScreenIndex == 5) return (double) GetIgn();
if (ThisScreenIndex == 6) return (double) GetInjDurr();
if (ThisScreenIndex == 7) return (double) GetInstantConsumption();
if (ThisScreenIndex == 8) return (double) GetIACVDuty();
if (ThisScreenIndex == 9) return (double) GetMap();
if (ThisScreenIndex == 10) return (double) GetBoost();
if (ThisScreenIndex == 11) return (double) GetVss();
if (ThisScreenIndex == 12) return (double) GetSensorsActived(39, 6);
if (ThisScreenIndex == 13) return (double) GetBattery();
if (ThisScreenIndex == 14) return (double) GetSensorsActived(8, 2);
if (ThisScreenIndex == 15) return (double) GetSensorsActived(8, 4);
if (ThisScreenIndex == 16) return (double) GetInjFV();
if (ThisScreenIndex == 17) return (double) GetSensorsActived(39, 5);
if (ThisScreenIndex == 18) return (double) GetSpeedTime();
if (ThisScreenIndex == 19) return (double) GetBestSpeedTime();
if (ThisScreenIndex == 20) return (double) GetSensorsActived(23, 7);
if (ThisScreenIndex == 21) return (double) GetSensorsActived(21, 3);
if (ThisScreenIndex == 22) return (double) GetELDVolt();
if (ThisScreenIndex == 23) return (double) GetSensorsActived(23, 6);
if (ThisScreenIndex == 24) return (double) GetSensorsActived(22, 7);
if (ThisScreenIndex == 25) return (double) GetSensorsActived(22, 5);
if (ThisScreenIndex == 26) return (double) GetGear();
if (ThisScreenIndex == 27) return (double) GetSensorsActived(39, 7);
if (ThisScreenIndex == 28) return (double) GetSensorsActived(39, 0);
if (ThisScreenIndex == 29) return (double) GetSensorsActived(39, 1);
if (ThisScreenIndex == 30) return (double) GetSensorsActived(39, 2);
if (ThisScreenIndex == 31) return (double) GetSensorsActived(39, 4);
if (ThisScreenIndex == 32) return (double) GetSensorsActived(39, 3);
if (ThisScreenIndex == 33) return (double) GetSensorsActived(43, 7);
if (ThisScreenIndex == 34) return (double) GetSensorsActived(21, 0);
if (ThisScreenIndex == 35) return (double) GetSensorsActived(21, 1);
if (ThisScreenIndex == 36) return (double) GetSensorsActived(21, 2);
if (ThisScreenIndex == 37) return (double) GetSensorsActived(21, 4);
if (ThisScreenIndex == 38) return (double) GetSensorsActived(21, 5);
if (ThisScreenIndex == 39) return (double) GetSensorsActived(8, 5);
if (ThisScreenIndex == 40) return (double) GetSensorsActived(21, 7);
if (ThisScreenIndex == 41) return (double) GetSensorsActived(22, 0);
if (ThisScreenIndex == 42) return (double) GetSensorsActived(22, 2);
if (ThisScreenIndex == 43) return (double) GetSensorsActived(22, 6);
if (ThisScreenIndex == 44) return (double) GetSensorsActived(43, 0);
if (ThisScreenIndex == 45) return (double) GetSensorsActived(43, 1);
if (ThisScreenIndex == 46) return (double) GetSensorsActived(43, 2);
if (ThisScreenIndex == 47) return (double) GetSensorsActived(43, 3);
if (ThisScreenIndex == 48) return (double) GetSensorsActived(43, 4);
if (ThisScreenIndex == 49) return (double) GetSensorsActived(43, 5);
if (ThisScreenIndex == 50) return (double) GetSensorsActived(8, 0);
if (ThisScreenIndex == 51) return (double) GetSensorsActived(8, 1);
if (ThisScreenIndex == 52) return (double) GetSensorsActived(8, 3);
if (ThisScreenIndex == 53) return (double) GetSensorsActived(8, 6);
if (ThisScreenIndex == 54) return (double) GetSensorsActived(8, 7);
if (ThisScreenIndex == 55) return (double) GetSensorsActived(21, 6);
if (ThisScreenIndex == 56) return (double) GetSensorsActived(22, 4);
if (ThisScreenIndex == 57) return (double) GetSensorsActived(23, 5);
if (ThisScreenIndex == 58) return (double) GetSensorsActived(43, 6);
if (ThisScreenIndex == 59) return (double) GetIgnTable();
if (ThisScreenIndex == 60) return (double) GetSensorsActived(38, 0);
if (ThisScreenIndex == 61) return (double) GetSensorsActived(38, 1);
if (ThisScreenIndex == 62) return (double) GetSensorsActived(38, 2);
if (ThisScreenIndex == 63) return (double) GetSensorsActived(38, 3);
if (ThisScreenIndex == 64) return (double) GetSensorsActived(38, 4);
if (ThisScreenIndex == 65) return (double) GetSensorsActived(38, 5);
if (ThisScreenIndex == 66) return (double) GetSensorsActived(38, 6);
if (ThisScreenIndex == 67) return (double) GetSensorsActived(38, 7);
if (ThisScreenIndex == 68) return (double) GetBaro();
if (ThisScreenIndex == 69) return (double) GetDuty();
if (ThisScreenIndex == 70) return (double) GetECTFC();
if (ThisScreenIndex == 71) return (double) GetO2Short();
if (ThisScreenIndex == 72) return (double) GetO2Long();
if (ThisScreenIndex == 73) return (double) GetIATFC();
if (ThisScreenIndex == 74) return (double) GetVEFC();
if (ThisScreenIndex == 75) return (double) GetIATIC();
if (ThisScreenIndex == 76) return (double) GetECTIC();
if (ThisScreenIndex == 77) return (double) GetGEARIC();
if (ThisScreenIndex == 78) return (double) GetEBCBaseDuty();
if (ThisScreenIndex == 79) return (double) GetEBCDuty();
}
void SetValueToBuffer() {
if (ThisScreenIndex == 4 || ThisScreenIndex == 5 || ThisScreenIndex == 6 || ThisScreenIndex == 7
|| ThisScreenIndex == 10 || ThisScreenIndex == 13 || ThisScreenIndex == 16 || ThisScreenIndex == 18
|| ThisScreenIndex == 19 || ThisScreenIndex == 22 || ThisScreenIndex == 59 || ThisScreenIndex == 69
|| ThisScreenIndex == 70 || ThisScreenIndex == 71 || ThisScreenIndex == 72 || ThisScreenIndex == 73
|| ThisScreenIndex == 74 || ThisScreenIndex == 75 || ThisScreenIndex == 76 || ThisScreenIndex == 77
|| ThisScreenIndex == 78 || ThisScreenIndex == 79)
{
Add_String(String(GetInt()));
}
else Add_String(String((int) GetInt()));
//remake double into 1decimal
if (ThisScreenIndex == 4) RemoveLastChar();
if (ThisScreenIndex == 7) RemoveLastChar();
if (ThisScreenIndex == 10) RemoveLastChar();
if (ThisScreenIndex == 13) RemoveLastChar();
if (ThisScreenIndex == 18) RemoveLastChar();
if (ThisScreenIndex == 19) RemoveLastChar();
}

View File

@ -0,0 +1,15 @@
/*void ScreenJ12() {
GetJ12Cut();
if (WasAvailable && !J12Cut) {
ShowJ12 = true;
ResetBufferIndex();
GetInfosString(23);
writeBigString(2, 0);
ResetBufferIndex();
GetInfosString(13);
writeBigString(0, 2);
}
}*/

View File

@ -0,0 +1,50 @@
void ScreenMain(){
ResetBufferIndex();
GetInfosString(6);
writeBigString(3, 0);
if (ScreenCurrentMenu >= 0 && ScreenCurrentMenu < 4) {
ResetBufferIndex();
GetInfosString(7);
PrintText(9, 1, 2);
ResetBufferIndex();
GetInfosString(8);
PrintText(9, 11, 2);
ResetBufferIndex();
GetInfosString(25);
PrintText(9, 1, 3);
ResetBufferIndex();
GetInfosString(22);
PrintText(9, 11, 3);
}
else if (ScreenCurrentMenu >= 4 && ScreenCurrentMenu < 8) {
ResetBufferIndex();
GetInfosString(24);
PrintText(9, 1, 2);
ResetBufferIndex();
GetInfosString(46);
PrintText(9, 11, 2);
ResetBufferIndex();
PrintText(9, 1, 3);
PrintText(9, 11, 3);
}
//reset empty indicator
ResetBufferIndex();
if (ScreenCurrentMenu != 0 && ScreenCurrentMenu != 4) PrintText(1, 0, 2);
if (ScreenCurrentMenu != 1 && ScreenCurrentMenu != 5) PrintText(1, 10, 2);
if (ScreenCurrentMenu != 2) PrintText(1, 0, 3);
if (ScreenCurrentMenu != 3) PrintText(1, 10, 3);
//Set Indicator
StringBuffer[0] = '>';
if (ScreenCurrentMenu == 0 || ScreenCurrentMenu == 4) PrintText(1, 0, 2);
if (ScreenCurrentMenu == 1 || ScreenCurrentMenu == 5) PrintText(1, 10, 2);
if (ScreenCurrentMenu == 2) PrintText(1, 0, 3);
if (ScreenCurrentMenu == 3) PrintText(1, 10, 3);
}

View File

@ -0,0 +1,376 @@
const char sensor_0[] PROGMEM = "RPM";
const char sensor_1[] PROGMEM = "ECT";
const char sensor_2[] PROGMEM = "IAT";
const char sensor_3[] PROGMEM = "TPS";
const char sensor_4[] PROGMEM = "O2";
const char sensor_5[] PROGMEM = "IGN";
const char sensor_6[] PROGMEM = "INJ";
const char sensor_7[] PROGMEM = "FUEL";
const char sensor_8[] PROGMEM = "IACV";
const char sensor_9[] PROGMEM = "MAP";
const char sensor_10[] PROGMEM = "BST";
const char sensor_11[] PROGMEM = "VSS";
const char sensor_12[] PROGMEM = "FAN";
const char sensor_13[] PROGMEM = "BATT";
const char sensor_14[] PROGMEM = "ICUT";
const char sensor_15[] PROGMEM = "FCUT";
const char sensor_16[] PROGMEM = "INJFV";
const char sensor_17[] PROGMEM = "2MAP";
const char sensor_18[] PROGMEM = "TIME";
const char sensor_19[] PROGMEM = "BTIME";
const char sensor_20[] PROGMEM = "VTS";
const char sensor_21[] PROGMEM = "VTP";
const char sensor_22[] PROGMEM = "ELDV";
const char sensor_23[] PROGMEM = "O2H";
const char sensor_24[] PROGMEM = "AC";
const char sensor_25[] PROGMEM = "ALT";
const char sensor_26[] PROGMEM = "GEAR";
const char sensor_27[] PROGMEM = "BST";
const char sensor_28[] PROGMEM = "FTL";
const char sensor_29[] PROGMEM = "ATLG";
const char sensor_30[] PROGMEM = "FTS";
const char sensor_31[] PROGMEM = "EBC";
const char sensor_32[] PROGMEM = "BSTCT";
const char sensor_33[] PROGMEM = "LEAN";
const char sensor_34[] PROGMEM = "PARK";
const char sensor_35[] PROGMEM = "BKSW";
const char sensor_36[] PROGMEM = "ACC";
const char sensor_37[] PROGMEM = "START";
const char sensor_38[] PROGMEM = "SCC";
const char sensor_39[] PROGMEM = "FCUT2";
const char sensor_40[] PROGMEM = "PSP";
const char sensor_41[] PROGMEM = "FPMP";
const char sensor_42[] PROGMEM = "IAB";
const char sensor_43[] PROGMEM = "PURGE";
const char sensor_44[] PROGMEM = "GPO1";
const char sensor_45[] PROGMEM = "GPO2";
const char sensor_46[] PROGMEM = "GPO3";
const char sensor_47[] PROGMEM = "BSTS2";
const char sensor_48[] PROGMEM = "BSTS3";
const char sensor_49[] PROGMEM = "BSTS4";
const char sensor_50[] PROGMEM = "PSTF";
const char sensor_51[] PROGMEM = "SCCCK";
const char sensor_52[] PROGMEM = "VTSM";
const char sensor_53[] PROGMEM = "ATS1";
const char sensor_54[] PROGMEM = "ATS2";
const char sensor_55[] PROGMEM = "VTSFB";
const char sensor_56[] PROGMEM = "FANC";
const char sensor_57[] PROGMEM = "MIL";
const char sensor_58[] PROGMEM = "OHEAT";
const char sensor_59[] PROGMEM = "IGNT";
const char sensor_60[] PROGMEM = "IFTL";
const char sensor_61[] PROGMEM = "IFTS";
const char sensor_62[] PROGMEM = "IEBC";
const char sensor_63[] PROGMEM = "IGPO1";
const char sensor_64[] PROGMEM = "IGPO2";
const char sensor_65[] PROGMEM = "IGPO3";
const char sensor_66[] PROGMEM = "IBST";
const char sensor_67[] PROGMEM = "BARO";
const char sensor_68[] PROGMEM = "INJD";
const char sensor_69[] PROGMEM = "ECTFC";
const char sensor_70[] PROGMEM = "O2SHT";
const char sensor_71[] PROGMEM = "O2LNG";
const char sensor_72[] PROGMEM = "IATFC";
const char sensor_73[] PROGMEM = "VEFC";
const char sensor_74[] PROGMEM = "IATIC";
const char sensor_75[] PROGMEM = "ECTIC";
const char sensor_76[] PROGMEM = "GEARI";
const char sensor_77[] PROGMEM = "EBCBD";
const char sensor_78[] PROGMEM = "EBCDT";
const char sensor_79[] PROGMEM = "EBCDT";
const char inf_0[] PROGMEM = "kmh";
const char inf_1[] PROGMEM = "mph";
const char inf_2[] PROGMEM = "%";
const char inf_3[] PROGMEM = "ms";
const char inf_4[] PROGMEM = "L";
const char inf_5[] PROGMEM = "PAGE";
const char inf_6[] PROGMEM = "MENU";
const char inf_7[] PROGMEM = "SENSORS";
const char inf_8[] PROGMEM = "PEAKS";
const char inf_9[] PROGMEM = "MIL";
const char inf_10[] PROGMEM = "NO CODE";
const char inf_11[] PROGMEM = " RESET";
const char inf_12[] PROGMEM = " DONE";
const char inf_13[] PROGMEM = "FAILED";
const char inf_14[] PROGMEM = "START";
const char inf_15[] PROGMEM = "Min";
const char inf_16[] PROGMEM = "Max";
const char inf_17[] PROGMEM = "Curr";
const char inf_18[] PROGMEM = "Off";
const char inf_19[] PROGMEM = "On";
const char inf_20[] PROGMEM = "BMDatalogger";
const char inf_21[] PROGMEM = "By Bouletmarc";
const char inf_22[] PROGMEM = "SLEEP";
const char inf_23[] PROGMEM = "J12";
const char inf_24[] PROGMEM = "SETUP";
const char inf_25[] PROGMEM = "CODES";
const char inf_26[] PROGMEM = "Page";
const char inf_27[] PROGMEM = "Timeout";
const char inf_28[] PROGMEM = "DAYLight";
const char inf_29[] PROGMEM = "Bar";
const char inf_30[] PROGMEM = "Type";
const char inf_31[] PROGMEM = "Side";
const char inf_32[] PROGMEM = "Inj";
const char inf_33[] PROGMEM = "Size";
const char inf_34[] PROGMEM = "Back";
const char inf_35[] PROGMEM = "Input";
const char inf_36[] PROGMEM = "B6";
const char inf_37[] PROGMEM = "Temp";
const char inf_38[] PROGMEM = "Speed";
const char inf_39[] PROGMEM = ":";
const char inf_40[] PROGMEM = "Increase";
const char inf_41[] PROGMEM = "Decrease";
const char inf_42[] PROGMEM = "WB";
const char inf_43[] PROGMEM = "Tbl";
const char inf_44[] PROGMEM = "Gearbx";
const char inf_45[] PROGMEM = "NIGTLight";
const char inf_46[] PROGMEM = "NightMode";
//const char inf_45[] PROGMEM = "";
//ProgressBarMode
//ProgressBarLeft
//Injectors_Size
//O2Input
//MapValue
//UseCelcius
//UseKMH
//O2Type
//Warning_RPM
//Warning_IAT
//Warning_ECT
//mBarMin = -70;
//mBarMax = 1790;
//TempMin = -40;
//TempMax = 140;
const char err_0[] PROGMEM = "UKNW";
const char err_1[] PROGMEM = "O2A";
const char err_2[] PROGMEM = "O2B";
const char err_3[] PROGMEM = "MAP";
const char err_4[] PROGMEM = "CKP";
const char err_5[] PROGMEM = "MAP";
const char err_6[] PROGMEM = "ECT";
const char err_7[] PROGMEM = "TPS";
const char err_8[] PROGMEM = "TDC";
const char err_9[] PROGMEM = "CYP";
const char err_10[] PROGMEM = "IAT";
const char err_12[] PROGMEM = "EGR";
const char err_13[] PROGMEM = "BARO";
const char err_14[] PROGMEM = "IACV";
const char err_15[] PROGMEM = "ICM";
const char err_16[] PROGMEM = "INJ";
const char err_17[] PROGMEM = "VSS";
const char err_19[] PROGMEM = "AUTO";
const char err_20[] PROGMEM = "ELD";
const char err_21[] PROGMEM = "VTS";
const char err_22[] PROGMEM = "VTP";
const char err_23[] PROGMEM = "KNCK";
const char err_30[] PROGMEM = "AUTOA";
const char err_31[] PROGMEM = "AUTOB";
const char err_36[] PROGMEM = "TRAC";
const char err_41[] PROGMEM = "PO2H";
const char err_43[] PROGMEM = "FUELS";
const char err_45[] PROGMEM = "FUEL";
const char* const SensorVars[] PROGMEM = {
sensor_0, sensor_1, sensor_2, sensor_3, sensor_4,
sensor_5, sensor_6, sensor_7, sensor_8, sensor_9,
sensor_10, sensor_11, sensor_12, sensor_13, sensor_14,
sensor_15, sensor_16, sensor_17, sensor_18, sensor_19,
sensor_20, sensor_21, sensor_22, sensor_23, sensor_24,
sensor_25, sensor_26, sensor_27, sensor_28, sensor_29,
sensor_30, sensor_31, sensor_32, sensor_33, sensor_34,
sensor_35, sensor_36, sensor_37, sensor_38, sensor_39,
sensor_40, sensor_41, sensor_42, sensor_43, sensor_44,
sensor_45, sensor_46, sensor_47, sensor_48, sensor_49,
sensor_50, sensor_51, sensor_52, sensor_53, sensor_54,
sensor_55, sensor_56, sensor_57, sensor_58, sensor_59,
sensor_60, sensor_61, sensor_62, sensor_63, sensor_64,
sensor_65, sensor_66, sensor_67, sensor_68, sensor_69,
sensor_70, sensor_71, sensor_72, sensor_73, sensor_74,
sensor_75, sensor_76, sensor_77, sensor_78, sensor_79
};
const char* const StringInfos[] PROGMEM = {
inf_0, inf_1, inf_2, inf_3, inf_4,
inf_5, inf_6, inf_7, inf_8, inf_9,
inf_10, inf_11, inf_12, inf_13, inf_14,
inf_15, inf_16, inf_17, inf_18, inf_19,
inf_20, inf_21, inf_22, inf_23, inf_24,
inf_25, inf_26, inf_27, inf_28, inf_29,
inf_30, inf_31, inf_32, inf_33, inf_34,
inf_35, inf_36, inf_37, inf_38, inf_39,
inf_40, inf_41, inf_42, inf_43, inf_44,
inf_45, inf_46
};
const char* const ErrorsVars[] PROGMEM = {
err_0, err_1, err_2, err_3, err_4,
err_5, err_6, err_7, err_8, err_9,
err_10, err_12, err_13, err_14,
err_15, err_16, err_17, err_19,
err_20, err_21, err_22, err_23,
err_30, err_31,
err_36, err_41, err_43, err_45
};
int CurrentBufferIndex = 0; //which index we are now doing into the Buffer (0-10 or 0-20)
//################################################################################################
//################################################################################################
//################################################################################################
void ResetBufferIndex() {
CurrentBufferIndex = 0;
for (int i=0; i < 20; i++) StringBuffer[i] = ' ';
}
void Add_String(String ThisStr) {
for (int i=0; i < ThisStr.length(); i++) {
char c = ThisStr.charAt(i);
AddThisChar(c);
}
/*for (int i=0; i < 20; i++) {
char c = ThisStr.charAt(i);
if ((int) c >= 20) AddThisChar(c);
if ((int) c < 20) i += 20;
}*/
//int Size = ThisStr.length() + 1;
//int Size = strlen(ThisStr);
//if (Size > 20) Size = 20;
//for (int i=0; i<Size; i++) AddThisChar(ThisStr.charAt(i));
}
void Add_Sensor_Desc() {
if (ThisScreenIndex == 1) GetTempCelcius();
if (ThisScreenIndex == 2) GetTempCelcius();
if (ThisScreenIndex == 3) GetInfosString(2);
if (ThisScreenIndex == 6) GetInfosString(3);
if (ThisScreenIndex == 7) GetInfosString(4);
if (ThisScreenIndex == 11) GetKMH();
}
void GetTempCelcius() {
AddThisChar((char)0xDF);
if (UseCelcius == 1) AddThisChar('C');
if (UseCelcius == 0) AddThisChar('F');
}
void GetKMH() {
if (UseKMH == 1) GetInfosString(0);
if (UseKMH == 0) GetInfosString(1);
}
void GetSensorString(int Addr) {
GetStringsChar((unsigned int) pgm_read_word(&SensorVars[Addr]));
}
void GetInfosString(int Addr) {
GetStringsChar((unsigned int) pgm_read_word(&StringInfos[Addr]));
}
void GetActivatedString(bool Activated) {
if (!Activated) GetInfosString(18);
if (Activated) GetInfosString(19);
}
void GetErrorString(int Addr) {
Add_String(String(Addr) + "-");
if (Addr == 11 | Addr == 18) Addr = 0;
if (Addr > 23 & Addr < 30) Addr = 0;
if (Addr > 31 & Addr < 36) Addr = 0;
if (Addr > 36 & Addr < 41) Addr = 0;
if (Addr == 42 | Addr == 44 | Addr > 45) Addr = 0;
int Remover = 0;
if (Addr > 11) Remover = 1;
if (Addr > 18) Remover = 2;
if (Addr > 29) Remover = 8;
if (Addr > 35) Remover = 12;
if (Addr > 40) Remover = 16;
if (Addr > 42) Remover = 17;
if (Addr > 44) Remover = 18;
if (Addr > 11) Addr -= Remover;
GetStringsChar((unsigned int) pgm_read_word(&ErrorsVars[Addr]));
}
void GetStringsChar(unsigned int flash_address) {
for (int i=0; i < 20; i++) {
char c = (char) pgm_read_byte(flash_address++);
if ((int) c >= 20) AddThisChar(c);
if ((int) c < 20) i += 20;
}
}
void AddThisChar(char This) {
if (CurrentBufferIndex < 20) {
StringBuffer[CurrentBufferIndex] = This;
CurrentBufferIndex++;
}
}
//used to remake double into 1 decimal
void RemoveLastChar() {
if (CurrentBufferIndex > 0) CurrentBufferIndex--;
StringBuffer[CurrentBufferIndex] = ' ';
}
void PrintText(int Lenght, int PosX, int PosY) {
for (int i=0; i < Lenght; i++) {
lcd.setCursor(PosX + i, PosY);
lcd.print(StringBuffer[i]);
}
}
void PrintTextAnimated(int Lenght, int PosX, int PosY) {
for (int i=0; i < Lenght; i++) {
lcd.setCursor(PosX + i, PosY);
lcd.print(StringBuffer[i]);
delay(20);
}
}
void PrintTextLenght(int PosX, int PosY) {
for (int i=0; i < CurrentBufferIndex; i++) {
lcd.setCursor(PosX + i, PosY);
lcd.print(StringBuffer[i]);
}
}
void PrintTextLenghtEmpty(int PosX, int PosY) {
for (int i=0; i < CurrentBufferIndex; i++) {
lcd.setCursor(PosX + i, PosY);
lcd.print(" ");
}
}
void PrintTextFrom(int Lenght, int From, int PosX, int PosY) {
for (int i=0; i < Lenght; i++) {
lcd.setCursor(PosX + i, PosY);
lcd.print(StringBuffer[i + From]);
}
}
int GetBufferLenght() {
return CurrentBufferIndex;
}
void DisplayMil(int Displayed) {
int PosX = 0;
int PosY = 2;
if (Displayed == 1 | Displayed == 3) PosX = 10;
if (Displayed >= 2) PosY = 3;
PrintText(10, PosX, PosY);
}

View File

@ -0,0 +1,168 @@
void DisplaySettingPage() {
//Settings Menu
ResetBufferIndex();
PrintText(2, 0, 0);
PrintText(2, 0, 1);
PrintText(3, 17, 0);
PrintText(3, 17, 1);
GetInfosString(24);
writeBigString(2, 0);
//###########################
ResetBufferIndex();
GetInfosString(5);
if (ScreenCurrentMenu < 8) Add_String("1");
else Add_String("5");
PrintText(9, 1, 2);
ResetBufferIndex();
GetInfosString(5);
if (ScreenCurrentMenu < 8) Add_String("2");
else Add_String("6");
PrintText(9, 11, 2);
ResetBufferIndex();
GetInfosString(5);
if (ScreenCurrentMenu < 8) Add_String("3");
else Add_String("7");
PrintText(9, 1, 3);
ResetBufferIndex();
GetInfosString(5);
if (ScreenCurrentMenu < 8) Add_String("4");
else Add_String("8");
PrintText(9, 11, 3);
//###########################
//reset empty indicator
ResetBufferIndex();
if (ScreenCurrentMenu != 4 && ScreenCurrentMenu != 8) PrintText(1, 0, 2);
if (ScreenCurrentMenu != 5 && ScreenCurrentMenu != 9) PrintText(1, 10, 2);
if (ScreenCurrentMenu != 6 && ScreenCurrentMenu != 10) PrintText(1, 0, 3);
if (ScreenCurrentMenu != 7 && ScreenCurrentMenu != 11) PrintText(1, 10, 3);
//Set Indicator
StringBuffer[0] = '>';
if (ScreenCurrentMenu == 4 || ScreenCurrentMenu == 8) PrintText(1, 0, 2);
if (ScreenCurrentMenu == 5 || ScreenCurrentMenu == 9) PrintText(1, 10, 2);
if (ScreenCurrentMenu == 6 || ScreenCurrentMenu == 10) PrintText(1, 0, 3);
if (ScreenCurrentMenu == 7 || ScreenCurrentMenu == 11) PrintText(1, 10, 3);
}
void DisplaySettingPageOption() {
//AddThisChar(' ');
//Settings Menu
ResetBufferIndex();
PrintText(2, 0, 0);
PrintText(2, 0, 1);
PrintText(3, 17, 0);
PrintText(3, 17, 1);
GetInfosString(24);
writeBigString(2, 0);
//###########################
if (ScreenCurrentMenu >= 13 && ScreenCurrentMenu < 17) {
//Timeout, backlight, Bar Type, Bar Side
ResetBufferIndex();
GetOptionString(13);
PrintText(9, 1, 2);
ResetBufferIndex();
GetOptionString(14);
PrintText(9, 11, 2);
ResetBufferIndex();
GetOptionString(15);
PrintText(9, 1, 3);
ResetBufferIndex();
GetOptionString(16);
PrintText(9, 11, 3);
}
else if (ScreenCurrentMenu >= 17 && ScreenCurrentMenu < 21) {
//Inj_Size, O2_Input, Temp, Speed
ResetBufferIndex();
GetOptionString(17);
PrintText(9, 1, 2);
ResetBufferIndex();
GetOptionString(18);
PrintText(9, 11, 2);
ResetBufferIndex();
GetOptionString(19);
PrintText(9, 1, 3);
ResetBufferIndex();
GetOptionString(20);
PrintText(9, 11, 3);
}
else if (ScreenCurrentMenu >= 21 && ScreenCurrentMenu < 25) {
//O2 Type, Warning_Max_RPM, Warning_Max_ECT, Warning_Max_IAT
ResetBufferIndex();
GetOptionString(21);
PrintText(9, 1, 2);
ResetBufferIndex();
GetOptionString(22);
PrintText(9, 11, 2);
ResetBufferIndex();
GetOptionString(23);
PrintText(9, 1, 3);
ResetBufferIndex();
GetOptionString(24);
PrintText(9, 11, 3);
}
else if (ScreenCurrentMenu >= 25 && ScreenCurrentMenu < 29) {
//MAP_Min, MAP_Max, Temp_Min, Temp_Max
ResetBufferIndex();
GetOptionString(25);
PrintText(9, 1, 2);
ResetBufferIndex();
GetOptionString(26);
PrintText(9, 11, 2);
ResetBufferIndex();
GetOptionString(27);
PrintText(9, 1, 3);
ResetBufferIndex();
GetOptionString(28);
PrintText(9, 11, 3);
}
else if (ScreenCurrentMenu >= 29 && ScreenCurrentMenu < 33) {
//WBConversion, MapByte, Tranny, Back
ResetBufferIndex();
GetOptionString(29);
PrintText(9, 1, 2);
ResetBufferIndex();
GetOptionString(30);
PrintText(9, 11, 2);
ResetBufferIndex();
GetOptionString(31);
PrintText(9, 1, 3);
//Back
ResetBufferIndex();
GetInfosString(34);
PrintText(9, 11, 3);
}
//reset empty indicator
ResetBufferIndex();
if (ScreenCurrentMenu != 13 && ScreenCurrentMenu != 17 && ScreenCurrentMenu != 21 && ScreenCurrentMenu != 25 && ScreenCurrentMenu != 29) PrintText(1, 0, 2);
if (ScreenCurrentMenu != 14 && ScreenCurrentMenu != 18 && ScreenCurrentMenu != 22 && ScreenCurrentMenu != 26 && ScreenCurrentMenu != 30) PrintText(1, 10, 2);
if (ScreenCurrentMenu != 15 && ScreenCurrentMenu != 19 && ScreenCurrentMenu != 23 && ScreenCurrentMenu != 27 && ScreenCurrentMenu != 31) PrintText(1, 0, 3);
if (ScreenCurrentMenu != 16 && ScreenCurrentMenu != 20 && ScreenCurrentMenu != 24 && ScreenCurrentMenu != 28 && ScreenCurrentMenu != 32) PrintText(1, 10, 3);
//Set Indicator
StringBuffer[0] = '>';
if (ScreenCurrentMenu == 13 || ScreenCurrentMenu == 17 || ScreenCurrentMenu == 21 || ScreenCurrentMenu == 25 || ScreenCurrentMenu == 29) PrintText(1, 0, 2);
if (ScreenCurrentMenu == 14 || ScreenCurrentMenu == 18 || ScreenCurrentMenu == 22 || ScreenCurrentMenu == 26 || ScreenCurrentMenu == 30) PrintText(1, 10, 2);
if (ScreenCurrentMenu == 15 || ScreenCurrentMenu == 19 || ScreenCurrentMenu == 23 || ScreenCurrentMenu == 27 || ScreenCurrentMenu == 31) PrintText(1, 0, 3);
if (ScreenCurrentMenu == 16 || ScreenCurrentMenu == 20 || ScreenCurrentMenu == 24 || ScreenCurrentMenu == 28 || ScreenCurrentMenu == 32) PrintText(1, 10, 3);
}

View File

@ -0,0 +1,287 @@
//int Showing = 0;
unsigned long last_shown_time=0;
const int SpawnTimeout = 600;
void SetCursor() {
//Showing++;
//if (Showing > 40) Showing = 0;
//if (Showing <= 15) {
if (millis() - last_shown_time > SpawnTimeout) {
StringBuffer[0] = '>';
if (ScreenSettingSelected == 0) {
PrintText(1, 0, 0);
StringBuffer[0] = '<';
PrintText(1, 9, 0);
}
if (ScreenSettingSelected == 1) {
PrintText(1, 10, 0);
StringBuffer[0] = '<';
PrintText(1, 19, 0);
}
if (ScreenSettingSelected == 2) {
PrintText(1, 0, 0);
StringBuffer[0] = '<';
PrintText(1, 19, 0);
}
//########################################
if (ScreenSettingSelected == 3) {
PrintText(1, 0, 1);
StringBuffer[0] = '<';
PrintText(1, 9, 1);
}
if (ScreenSettingSelected == 4) {
PrintText(1, 10, 1);
StringBuffer[0] = '<';
PrintText(1, 19, 1);
}
if (ScreenSettingSelected == 5) {
PrintText(1, 0, 1);
StringBuffer[0] = '<';
PrintText(1, 19, 1);
}
if (ScreenSettingSelected == 6) {
PrintText(1, 0, 0);
StringBuffer[0] = '<';
PrintText(1, 19, 1);
}
//########################################
if (ScreenSettingSelected == 7) {
PrintText(1, 0, 2);
StringBuffer[0] = '<';
PrintText(1, 9, 2);
}
if (ScreenSettingSelected == 8) {
PrintText(1, 10, 2);
StringBuffer[0] = '<';
PrintText(1, 19, 2);
}
if (ScreenSettingSelected == 9) {
PrintText(1, 0, 2);
StringBuffer[0] = '<';
PrintText(1, 19, 2);
}
if (ScreenSettingSelected == 10) {
PrintText(1, 0, 1);
StringBuffer[0] = '<';
PrintText(1, 19, 2);
}
//########################################
if (ScreenSettingSelected == 11) {
PrintText(1, 0, 3);
StringBuffer[0] = '<';
PrintText(1, 9, 3);
}
if (ScreenSettingSelected == 12) {
PrintText(1, 10, 3);
StringBuffer[0] = '<';
PrintText(1, 19, 3);
}
if (ScreenSettingSelected == 13) {
PrintText(1, 0, 3);
StringBuffer[0] = '<';
PrintText(1, 19, 3);
}
if (ScreenSettingSelected == 14) {
PrintText(1, 0, 2);
StringBuffer[0] = '<';
PrintText(1, 19, 3);
}
if (ScreenSettingSelected == 15) {
PrintText(1, 0, 0);
StringBuffer[0] = '<';
PrintText(1, 19, 3);
}
if (millis() - last_shown_time > (SpawnTimeout * 2)) last_shown_time = millis();
}
}
void IncreaseScreenIndex() {
//ScreenSettingSelected
//ScreenCurrentPage
int ThisPageeeIndex = 0;
if (ScreenSettingSelected == 1) ThisPageeeIndex = 1;
if (ScreenSettingSelected == 2) ThisPageeeIndex = 0;
if (ScreenSettingSelected == 3) ThisPageeeIndex = 2;
if (ScreenSettingSelected == 4) ThisPageeeIndex = 3;
if (ScreenSettingSelected == 5) ThisPageeeIndex = 2;
if (ScreenSettingSelected == 6) ThisPageeeIndex = 0;
if (ScreenSettingSelected == 7) ThisPageeeIndex = 4;
if (ScreenSettingSelected == 8) ThisPageeeIndex = 5;
if (ScreenSettingSelected == 9) ThisPageeeIndex = 4;
if (ScreenSettingSelected == 10) ThisPageeeIndex = 2;
if (ScreenSettingSelected == 11) ThisPageeeIndex = 6;
if (ScreenSettingSelected == 12) ThisPageeeIndex = 7;
if (ScreenSettingSelected == 13) ThisPageeeIndex = 6;
if (ScreenSettingSelected == 14) ThisPageeeIndex = 4;
if (ScreenSettingSelected == 15) ThisPageeeIndex = 0;
int ThisScreenIndex = GetScreenIndex(ThisPageeeIndex);
int ThisScreenMode = 0; //normal
if (ThisScreenIndex >= 100) ThisScreenMode = 1; //progressbar
if (ThisScreenIndex >= 200) ThisScreenMode = 2; //big
if (ThisScreenIndex >= 300) ThisScreenMode = 3; //big2
int ThisScreenModeSuposed = 0;
if (ScreenSettingSelected == 2 || ScreenSettingSelected == 5 || ScreenSettingSelected == 9 || ScreenSettingSelected == 13) ThisScreenModeSuposed = 1;
if (ScreenSettingSelected == 6 || ScreenSettingSelected == 10 || ScreenSettingSelected == 14) ThisScreenModeSuposed = 2;
if (ScreenSettingSelected == 15) ThisScreenModeSuposed = 3;
//put to index to '0-MaxSensors' Range
ThisScreenIndex = ReRangeIndex(ThisScreenIndex);
//increase by 1
if (ThisScreenMode == ThisScreenModeSuposed) {
ThisScreenIndex++;
if (ThisScreenIndex >= MaxDataValue) ThisScreenIndex = 0;
}
//set proper index
if (ThisScreenModeSuposed == 1) ThisScreenIndex = ThisScreenIndex + 100;
if (ThisScreenModeSuposed == 2) ThisScreenIndex = ThisScreenIndex + 200;
if (ThisScreenModeSuposed == 3) ThisScreenIndex = ThisScreenIndex + 300;
//set index
SetScreenIndex(ThisPageeeIndex, ThisScreenIndex);
if (ThisScreenModeSuposed == 1) ReRangeScreenIndexMode(ThisPageeeIndex + 1); //SetScreenIndex(ThisPageeeIndex + 1, 0);
if (ThisScreenModeSuposed == 2) {
for (int i = 0; i < 3; i++) {
ReRangeScreenIndexMode(ThisPageeeIndex + 1 + i); //SetScreenIndex(ThisPageeeIndex + 1, 0);
}
}
if (ThisScreenModeSuposed == 3) {
for (int i = 0; i < 7; i++) {
ReRangeScreenIndexMode(ThisPageeeIndex + 1 + i); //SetScreenIndex(ThisPageeeIndex + 1, 0);
}
}
//super big font remover
if (ThisScreenModeSuposed != 3 && HasSuperBigFont()) ReRangeScreenIndexMode(0);
//progbar remover
if (ThisPageeeIndex == 1 || ThisPageeeIndex == 3 || ThisPageeeIndex == 5 || ThisPageeeIndex == 7) {
if (ThisScreenModeSuposed != 1 && HasProgBarAt(ThisPageeeIndex - 1)) {
ReRangeScreenIndexMode(ThisPageeeIndex - 1);
}
}
if (ThisScreenModeSuposed == 2 && HasProgBar()) {
for (int i = 0; i < 8; i++) {
if (HasProgBarAt(i)) {
ReRangeScreenIndexMode(i);
}
}
}
//big font remover
if (ThisScreenModeSuposed != 2) {
if (((ThisPageeeIndex == 1 || ThisPageeeIndex == 2 || ThisPageeeIndex == 3) && HasBigFontAt(0))
|| ((ThisPageeeIndex == 3 || ThisPageeeIndex == 4 || ThisPageeeIndex == 5) && HasBigFontAt(2))
|| ((ThisPageeeIndex == 5 || ThisPageeeIndex == 6 || ThisPageeeIndex == 7) && HasBigFontAt(4))) {
if (ThisPageeeIndex == 1 || ThisPageeeIndex == 2 || ThisPageeeIndex == 3) ReRangeScreenIndexMode(0);
if (ThisPageeeIndex == 3 || ThisPageeeIndex == 4 || ThisPageeeIndex == 5) ReRangeScreenIndexMode(2);
if (ThisPageeeIndex == 5 || ThisPageeeIndex == 6 || ThisPageeeIndex == 7) ReRangeScreenIndexMode(4);
}
}
if (ThisScreenModeSuposed == 1 && HasBigFont()) {
for (int i = 0; i < 8; i++) {
if (HasBigFontAt(i)) {
ReRangeScreenIndexMode(i);
}
}
}
}
bool HasProgBar() {
bool HasProgBarPage = false;
for (int i = 0; i < 8; i++) {
if (HasProgBarAt(i)) {
HasProgBarPage = true;
i = 8;
}
}
return HasProgBarPage;
}
bool HasProgBarAt(int ThisPageeeIndex) {
bool HasProgBarPage = false;
int TestIndex = GetScreenIndex(ThisPageeeIndex);
if (TestIndex >= 100 && TestIndex < 200) HasProgBarPage = true;
return HasProgBarPage;
}
bool HasBigFont() {
bool HasBigFontPage = false;
for (int i = 0; i < 8; i++) {
if (HasBigFontAt(i)) {
HasBigFontPage = true;
i = 8;
}
}
return HasBigFontPage;
}
bool HasBigFontAt(int ThisPageeeIndex) {
bool HasBigFontPage = false;
int TestIndex = GetScreenIndex(ThisPageeeIndex);
if (TestIndex >= 200 && TestIndex < 300) HasBigFontPage = true;
return HasBigFontPage;
}
bool HasSuperBigFont() {
bool HasBigFontPage = false;
int TestIndex = GetScreenIndex(0);
if (TestIndex >= 300 && TestIndex < 400) {
HasBigFontPage = true;
}
return HasBigFontPage;
}
void SetScreenIndex(int ThisPageeeIndex, int ThisScreenIndex) {
if (ScreenCurrentPage == 0) ScreenCurrentPage = 1;
if (ScreenCurrentPage == 1) ScreenPage1[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 2) ScreenPage2[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 3) ScreenPage3[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 4) ScreenPage4[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 5) ScreenPage5[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 6) ScreenPage6[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 7) ScreenPage7[ThisPageeeIndex] = ThisScreenIndex;
if (ScreenCurrentPage == 8) ScreenPage8[ThisPageeeIndex] = ThisScreenIndex;
}
int GetScreenIndex(int ThisPageeeIndex) {
int ThisScreenIndex = 0;
if (ScreenCurrentPage == 0) ScreenCurrentPage = 1;
if (ScreenCurrentPage == 1) ThisScreenIndex = ScreenPage1[ThisPageeeIndex];
if (ScreenCurrentPage == 2) ThisScreenIndex = ScreenPage2[ThisPageeeIndex];
if (ScreenCurrentPage == 3) ThisScreenIndex = ScreenPage3[ThisPageeeIndex];
if (ScreenCurrentPage == 4) ThisScreenIndex = ScreenPage4[ThisPageeeIndex];
if (ScreenCurrentPage == 5) ThisScreenIndex = ScreenPage5[ThisPageeeIndex];
if (ScreenCurrentPage == 6) ThisScreenIndex = ScreenPage6[ThisPageeeIndex];
if (ScreenCurrentPage == 7) ThisScreenIndex = ScreenPage7[ThisPageeeIndex];
if (ScreenCurrentPage == 8) ThisScreenIndex = ScreenPage8[ThisPageeeIndex];
return ThisScreenIndex;
}
int ReRangeIndex(int ThisScreenIndex) {
//put to index to '0-MaxSensors' Range
while (ThisScreenIndex >= 100) {
ThisScreenIndex -= 100;
}
return ThisScreenIndex;
}
void ReRangeScreenIndexMode(int ThisPageeeIndex) {
int ThisScreenIndex = GetScreenIndex(ThisPageeeIndex);
ThisScreenIndex = ReRangeIndex(ThisScreenIndex);
SetScreenIndex(ThisPageeeIndex, ThisScreenIndex);
}

View File

@ -0,0 +1,35 @@
double TimeVal = 99.99;
double BestTimeVal = 99.99;
unsigned long last_zero_time=0;
bool CheckDone = false;
void SetSpeedTime() {
unsigned int Speed = GetVssKMH();
if (Speed < 3) {
TimeVal = 99.99;
last_zero_time = millis();
CheckDone = false;
}
if (!CheckDone) {
if (Speed >= 3 && Speed < 100) {
TimeVal = ((double)(((long) millis() - (long) last_zero_time)) / 1000) + 0.1;
if (TimeVal > 20) {
TimeVal = 99.99;
CheckDone = true;
}
}
if (Speed >= 100) {
if (TimeVal < BestTimeVal) BestTimeVal = TimeVal;
CheckDone = true;
}
}
}
double GetSpeedTime() {
return TimeVal;
}
double GetBestSpeedTime() {
return BestTimeVal;
}

View File

@ -1 +1 @@
V2.0.0
V2.0.0

31
BMDatalogger/Warnings.ino Normal file
View File

@ -0,0 +1,31 @@
bool IsWarning = false;
void GetWarnings() {
bool Warning = false;
if (EngineRunning) {
if (GetRpm() > Warning_RPM) Warning = true;
if (GetIat() > Warning_IAT) Warning = true;
if (GetEct() > Warning_ECT) Warning = true;
//Disable (not warning)
if (!Warning && IsWarning) {
//lcd.backlight();
backlight();
IsWarning = false;
}
//Warning (Trigger Flash)
if (Warning) {
if (!IsWarning) {
//lcd.noBacklight();
noBacklight();
IsWarning = true;
}
else {
//lcd.backlight();
backlight();
IsWarning = false;
}
}
}
}