#include #include //#include "eetest.h" #include #include /*********************************************************************/ /*** VARIABLES SECTION *********************************************/ /*********************************************************************/ typedef struct { int MenuNumber; char MenuName[16]; int numMenuChildren; char mnuQuestion[16]; }mnuItem; mnuItem menuMainList[4]; mnuItem mnuSetRun[7]; mnuItem mnuSetCal[6]; mnuItem mnuDiag[4]; /*********************************************************************/ /*** LCD VARIABLES SECTION ***************************************/ /*********************************************************************/ LiquidCrystal lcd(8, 9,10, 11,12,13); //LiquidCrystal(rs, enable, d4, d5, d6, d7) byte BAR0[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111,}; byte BAR1[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111,}; byte BAR2[8] = { B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111,}; byte BAR3[8] = { B00000, B00000, B00000, B00000, B11111, B11111, B11111, B11111,}; byte BAR4[8] = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111,}; byte BAR5[8] = { B00000, B00000, B11111, B11111, B11111, B11111, B11111, B11111,}; byte BAR6[8] = { B00000, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; byte BAR7[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; /*********************************************************************/ /*** OTHER VARIABLES DECLARATIONS ********************************/ /*********************************************************************/ const int mnuUp = 4; //Also used for Left scroll const int mnuDown = 5; // Also used for Right scroll const int mnuOk = 6; const int MNU = 3; const int ClutchPedal = 7; const int GShiftLED = 14 ; //Analog pin 0 // int ButtonsPressed=0; // Monitors which button was pressed. float CoilPulseCount = 0; int currentGearPos = 1; float CurRev =0; boolean RevCountingStarted = false; int AllButtonStat=0; int MNUbuttonState = 0; /*********************************************************************/ /*** USER CHANGEABLE VARIABLES DECLARATIONS *********************/ /*********************************************************************/ float CylinderCount = 4; float SampleRate = 62.500; int GShiftOnTrig = 50; int GShiftOffBuff = 100; int ConversionFactor = 0; volatile int Gear_L_trig = 2000; volatile int Gear_1_trig = 2000; volatile int Gear_2_trig = 2000; volatile int Gear_3_trig = 2000; volatile int Gear_4_trig = 2000; volatile int Gear_5_trig = 2000; volatile int mnuUpStat = 0; volatile int mnuDwnStat= 0; volatile int mnuOkStat = 0; volatile int ClutchPedalStat = 0; volatile int currentMenuId=10; volatile boolean menusIsLoaded=false; //********************************************************************/ //****** FUNCTION DECLARATIONS ***/ //********************************************************************/ volatile int res; volatile int res2; volatile boolean Isloaded; volatile int retVal; /*********************************************************************/ /*** MENU VARIABLES DECLARATIONS *********************/ /*********************************************************************/ volatile int bx; volatile int MenuRes; /*********************************************************************/ /*** MAIN CODE PAGE ******************************/ /*********************************************************************/ void setup(){ //Serial Setup Serial.begin(115200); Isloaded=false; //attachInterrupt(0,CountSparkPulses,HIGH); // attachInterrupt(1,clutchTriger,HIGH); // LCD Setup lcd.createChar(0, BAR0); lcd.createChar(1, BAR1); lcd.createChar(2, BAR2); lcd.createChar(3, BAR3); lcd.createChar(4, BAR4); lcd.createChar(5, BAR5); lcd.createChar(6, BAR6); lcd.createChar(7, BAR7); lcd.begin(16, 2); // I/O Pin Setup pinMode(mnuUp,INPUT); pinMode(mnuDown,INPUT); pinMode(mnuOk,INPUT); pinMode(MNU,INPUT); pinMode(ClutchPedal,INPUT); pinMode(GShiftLED,OUTPUT); //Variable init CoilPulseCount = 0; RevCountingStarted = false; //SaveAllValuesToEEprom(); } void loop(){ //DumpAllEmpromToSerial(); if (Isloaded==false){ Serial << "Started LoadMenu" << endl; lcd.clear(); lcd.setCursor(0,0); lcd.print("Loading MNU4"); delay(1000); retVal = loadMenus(); Serial << "Ended LoadMenu" << endl; delay(1000); if (retVal==0) { Serial << "Set Isloaded to true" << endl ; Isloaded=true; }else{ Isloaded=false; } } else { Serial << "Done" << endl; GShiftOnTest(); lcd.clear(); lcd.setCursor(0,0); //lcd.print("Loading done.."); } } int GShiftOnTest(){ for (int c=0;c<4;c++){ digitalWrite(GShiftLED,HIGH); delay(500); digitalWrite(GShiftLED,LOW); delay(500); } return 0 ; } int LoadUpDate(int curMnu){ char cur[2]; char L2line[16]; itoa( curMnu, cur, 10 ); memset(L2line,'\x00',sizeof(L2line)); memcpy( L2line, cur, 2 ); lcd.clear(); lcd.setCursor(0,0); lcd.print("Loading MNU:"); lcd.setCursor(14,0); lcd.print(L2line); delay(250); Serial << "Cur: " << curMnu << endl; return 0; } int loadMenus(){ boolean IsLoaded=false; if (IsLoaded){ Serial << "MenuLoad begin: " << "true" << endl; } else{ Serial << "MenuLoad begin: " << "false" << endl; } /* typedef struct mnuItem{ int MenuNumber; String MenuName; int numMenuChildren; }; mnuItem menuMainList[4]; mnuItem mnuSetRun[7]; mnuItem mnuDiag[5]; mnuItem mnuSetCal[6]; */ //Load MainChoice 1 /* 10 Main Menu 11 Setup Run 12 Setup Calibraion 13 Diagnostic 14 Back */ //res = LoadUpDate(10); /* typedef struct mnuItem{ int MenuNumber; String MenuName; int numMenuChildren; }; mnuItem menuMainList[4]; mnuItem mnuSetRun[7]; mnuItem mnuDiag[5]; mnuItem mnuSetCal[6]; */ //Load MainChoice 1 /* 10 Main Menu 11 Setup Run 12 Setup Calibraion 13 Diagnostic 14 Back */ res = LoadUpDate(10); menuMainList[0].MenuNumber = 10; //**************** memcpy(menuMainList[0].MenuName ,(char*)"10 Main Menu ",16); menuMainList[0].numMenuChildren = 4; memcpy(menuMainList[0].mnuQuestion,(char*) "RS MNU UP DWN OK",16); res = LoadUpDate(11); menuMainList[1].MenuNumber = 11; memcpy(menuMainList[1].MenuName ,(char*) "11 Setup Run ",16); menuMainList[1].numMenuChildren = 7; memcpy(menuMainList[1].mnuQuestion ,(char*)"OK To Select..",16); res = LoadUpDate(12); menuMainList[2].MenuNumber = 12; memcpy(menuMainList[2].MenuName ,(char*) "12 Setup Cal",16); menuMainList[2].numMenuChildren = 6; memcpy(menuMainList[2].mnuQuestion ,(char*)"OK To Select..",16); res = LoadUpDate(13); menuMainList[3].MenuNumber = 13; memcpy(menuMainList[3].MenuName ,(char*) "13 Diagnostic",16); menuMainList[3].numMenuChildren = 4; memcpy(menuMainList[3].mnuQuestion,(char*)"OK To Select..",16); res = LoadUpDate(14); menuMainList[4].MenuNumber = 14; memcpy(menuMainList[4].MenuName ,(char*) "14 BACK",16); menuMainList[4].numMenuChildren = 0; memcpy(menuMainList[4].mnuQuestion,(char*)"OK to Go Back.",16); //Load SetupRun 2 /* 20 SetupRun 21 Setup Gear L 22 Setup Gear 1 23 Setup Gear 2 24 Setup Gear 3 25 Setup Gear 4 26 Back */ res = LoadUpDate(20); mnuSetRun[0].MenuNumber = 20; memcpy(mnuSetRun[0].MenuName ,(char*)"20 Setup Run ",16); mnuSetRun[0].numMenuChildren = 7; memcpy(mnuSetRun[0].mnuQuestion,(char*)"Press UP or DWN ",16); res = LoadUpDate(21); mnuSetRun[1].MenuNumber = 21; memcpy(mnuSetRun[1].MenuName ,(char*)"21 Set Launch rv",16); mnuSetRun[1].numMenuChildren = 0; memcpy(mnuSetRun[1].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(22); mnuSetRun[2].MenuNumber = 22; memcpy(mnuSetRun[2].MenuName ,(char*)"22 Set 1'st chge",16); mnuSetRun[2].numMenuChildren = 0; memcpy(mnuSetRun[2].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(23); mnuSetRun[3].MenuNumber = 23; memcpy(mnuSetRun[3].MenuName ,(char*)"23 Set 2'nd chge",16); mnuSetRun[3].numMenuChildren = 0; memcpy(mnuSetRun[3].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(24); mnuSetRun[4].MenuNumber = 24; memcpy(mnuSetRun[4].MenuName ,(char*)"24 Set 3'rd chge",16); mnuSetRun[4].numMenuChildren = 0; memcpy(mnuSetRun[4].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(25); mnuSetRun[5].MenuNumber = 25; //**************** memcpy(mnuSetRun[5].MenuName ,(char*)"25 Set 4'th chge",16); mnuSetRun[5].numMenuChildren = 0; memcpy(mnuSetRun[5].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(26); mnuSetRun[6].MenuNumber = 26; memcpy(mnuSetRun[6].MenuName ,(char*)"26 Set 5'th chge",16); mnuSetRun[6].numMenuChildren = 0; memcpy(mnuSetRun[6].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(27); mnuSetRun[7].MenuNumber = 27; memcpy(mnuSetRun[7].MenuName ,(char*)"27 BACK ",16); mnuSetRun[7].numMenuChildren = 0; memcpy(mnuSetRun[7].mnuQuestion,(char*)"OK to Go Back...",16); //Load SetupCalibration 3 /* **************** 30 Set Calibrate 31 Set Conv Fact 32 Set On Trigg 33 Set off Buff 33 No#Cylinders 34 SampleRate 35 Back */ res = LoadUpDate(30); mnuSetCal[0].MenuNumber = 30; //1234567890123456// //****************// memcpy(mnuSetCal[0].MenuName,(char*)"30 Set Calibrate",16); mnuSetCal[0].numMenuChildren = 6; memcpy(mnuSetCal[0].mnuQuestion,(char*)"Press UP or DWN ",16); res = LoadUpDate(31); mnuSetCal[1].MenuNumber = 31; memcpy( mnuSetCal[1].MenuName,(char*)"31 Set Conv Fact",16); mnuSetCal[1].numMenuChildren = 0; memcpy(mnuSetCal[1].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(32); mnuSetCal[2].MenuNumber = 32; memcpy(mnuSetCal[2].MenuName,(char*)"32 Set On Trigg",16); mnuSetCal[2].numMenuChildren = 0; memcpy(mnuSetCal[2].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(33); mnuSetCal[3].MenuNumber = 33; memcpy(mnuSetCal[3].MenuName,(char*)"33 Set off Buff ",16); mnuSetCal[3].numMenuChildren = 0; memcpy(mnuSetCal[3].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(34); mnuSetCal[4].MenuNumber = 34; memcpy(mnuSetCal[4].MenuName,(char*)"34 #of Cylinders",16); mnuSetCal[4].numMenuChildren = 0; memcpy(mnuSetCal[4].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(35); mnuSetCal[5].MenuNumber = 35; memcpy(mnuSetCal[5].MenuName,(char*)"35 SampleRate ms",16); mnuSetCal[5].numMenuChildren = 0; memcpy(mnuSetCal[5].mnuQuestion,(char*)"OK to Change Val",16); res = LoadUpDate(36); mnuSetCal[6].MenuNumber = 35; //**************** memcpy(mnuSetCal[6].MenuName,(char*)"36 BACK ",16); mnuSetCal[6].numMenuChildren = 0; memcpy(mnuSetCal[6].mnuQuestion,(char*)"OK to Go Back...",16); //Load Diagnostic /* **************** 40 Diagnostics 41 ShowSensor 42 ShowEprom 43 DumpEprom *** 44 ShowButtom *** not used 45 Back */ res = LoadUpDate(40); mnuDiag[0].MenuNumber = 40; //**************** memcpy(mnuDiag[0].MenuName,(char*)"40 Diagnostics",16); mnuDiag[0].numMenuChildren = 4; memcpy(mnuDiag[0].mnuQuestion,(char*)"Press UP/DWN",16); res = LoadUpDate(41); mnuDiag[1].MenuNumber = 41; memcpy(mnuDiag[1].MenuName,(char*)"41 ShowSensor ",16); mnuDiag[1].numMenuChildren = 0; memcpy(mnuDiag[1].mnuQuestion,(char*)"OK To Select... ",16); res = LoadUpDate(42); mnuDiag[2].MenuNumber = 42; memcpy(mnuDiag[2].MenuName,(char*)"42 ShowEprom ",16); mnuDiag[2].numMenuChildren = 0; memcpy(mnuDiag[2].mnuQuestion,(char*)"OK To Select... ",16); res = LoadUpDate(43); mnuDiag[3].MenuNumber = 43; memcpy(mnuDiag[3].MenuName,(char*)"43 DumpEprom ",16); mnuDiag[3].numMenuChildren = 0; memcpy(mnuDiag[3].mnuQuestion,(char*)"OK To Select... ",16); res = LoadUpDate(44); mnuDiag[4].MenuNumber = 44; memcpy(mnuDiag[4].MenuName,(char*)"44 BACK ",16); mnuDiag[4].numMenuChildren = 0; memcpy(mnuDiag[4].mnuQuestion,(char*)"OK to Go Back",16); IsLoaded=true; //Serial << "MenuLoad Done: " << menusIsLoaded << endl; if (IsLoaded){ Serial << "MenuLoad IsLoaded done: " << "true" << endl; return 0; } else{ Serial << "MenuLoad IsLoaded Done: " << "false" << endl; return 1; } }