test code megasquirt and digole lcd

Dependencies:   FatFileSystem mbed

Committer:
jpnovak
Date:
Fri Nov 27 16:32:41 2015 +0000
Revision:
0:7ea8f0d27a4f
test code megasquirt digole;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jpnovak 0:7ea8f0d27a4f 1 //Code Designed to display run-time variables from a Megasquirt Fuel Injection controller.
jpnovak 0:7ea8f0d27a4f 2 //This is the base code to load variables and print to DigoleSerialDisp and write them to a file. File format is .FRD for import into EFI Analytics tuner Studio
jpnovak 0:7ea8f0d27a4f 3
jpnovak 0:7ea8f0d27a4f 4 #include "mbed.h"
jpnovak 0:7ea8f0d27a4f 5 //#include "TextDigoleSerialDisp.h"
jpnovak 0:7ea8f0d27a4f 6 #include "SDFileSystem.h"
jpnovak 0:7ea8f0d27a4f 7 #include "SerialBuffered.h"
jpnovak 0:7ea8f0d27a4f 8 //#include "LIS302.h"
jpnovak 0:7ea8f0d27a4f 9
jpnovak 0:7ea8f0d27a4f 10
jpnovak 0:7ea8f0d27a4f 11 //SD Card pin assignment
jpnovak 0:7ea8f0d27a4f 12 SDFileSystem sd(p11, p12, p13, p14, "sd");//DI, D0, SCK, CS
jpnovak 0:7ea8f0d27a4f 13
jpnovak 0:7ea8f0d27a4f 14 AnalogIn SDenable(p20);//define SD card switch
jpnovak 0:7ea8f0d27a4f 15 DigitalOut myled1(LED1);//define LED
jpnovak 0:7ea8f0d27a4f 16 Serial loggerSerial(USBTX, USBRX);
jpnovak 0:7ea8f0d27a4f 17 Timer t;
jpnovak 0:7ea8f0d27a4f 18
jpnovak 0:7ea8f0d27a4f 19 LocalFileSystem local("local");
jpnovak 0:7ea8f0d27a4f 20
jpnovak 0:7ea8f0d27a4f 21
jpnovak 0:7ea8f0d27a4f 22
jpnovak 0:7ea8f0d27a4f 23 //Serial usb(USBTX, USBRX); //define USB connection pins
jpnovak 0:7ea8f0d27a4f 24 SerialBuffered megasquirt(120, p28, p27); // that 128 is the size of the read buffer it will make for you
jpnovak 0:7ea8f0d27a4f 25
jpnovak 0:7ea8f0d27a4f 26 Serial DigoleSerialDisp(p9, p10);//UART DigoleSerialDisp(PinName TX, PinName RX);
jpnovak 0:7ea8f0d27a4f 27
jpnovak 0:7ea8f0d27a4f 28 DigitalOut usb_activity(LED1); //define USB activity
jpnovak 0:7ea8f0d27a4f 29 DigitalOut megasquirt_activity(LED2); //define Megasquirt activity
jpnovak 0:7ea8f0d27a4f 30 unsigned char tmp_data[16];
jpnovak 0:7ea8f0d27a4f 31 unsigned char buf[120];
jpnovak 0:7ea8f0d27a4f 32 int tmp;
jpnovak 0:7ea8f0d27a4f 33 float Time;
jpnovak 0:7ea8f0d27a4f 34 long float SecL; //get secoonds
jpnovak 0:7ea8f0d27a4f 35 long float PW;//get pulseWidth1
jpnovak 0:7ea8f0d27a4f 36 long float PW2; //get pulseWidth2
jpnovak 0:7ea8f0d27a4f 37 int RPM; //get Rpm
jpnovak 0:7ea8f0d27a4f 38 float DutyCycle; //Injector Duty Cycle
jpnovak 0:7ea8f0d27a4f 39 float DutyCycle2; //Injector Bank2 Duty Cycle
jpnovak 0:7ea8f0d27a4f 40 long float SparkAdv; //get advance
jpnovak 0:7ea8f0d27a4f 41 float squirt; //get squirt
jpnovak 0:7ea8f0d27a4f 42 float Engine; //get squirt
jpnovak 0:7ea8f0d27a4f 43 float afrtgt1; //get AFR target - Table 1
jpnovak 0:7ea8f0d27a4f 44 float afrtgt2; //get AFR target - Table 2
jpnovak 0:7ea8f0d27a4f 45 float wbo2_en1; //get WideBand Valid1
jpnovak 0:7ea8f0d27a4f 46 float wbo2_en2; //get WideBand Valid2
jpnovak 0:7ea8f0d27a4f 47 long float barometer; //get Barometer
jpnovak 0:7ea8f0d27a4f 48 long float MAP; //get manifold absolute pressure MAP
jpnovak 0:7ea8f0d27a4f 49 long float MAT; //get manifold absolute temperature (MAT)
jpnovak 0:7ea8f0d27a4f 50 long float CLT; //get coolant temperature (CLT)
jpnovak 0:7ea8f0d27a4f 51 long float TP; //get Throttle Position Sensor (TPS)
jpnovak 0:7ea8f0d27a4f 52 long float vBatt; //get BAttery Voltage
jpnovak 0:7ea8f0d27a4f 53 long float AFR; //get Realtime AFR for VE1
jpnovak 0:7ea8f0d27a4f 54 long float AFR2; //get Realtime AFR for VE2
jpnovak 0:7ea8f0d27a4f 55 long float knock; //get Knock Threshold Value
jpnovak 0:7ea8f0d27a4f 56 long float Gego; //get egoCorrrection1 amount %
jpnovak 0:7ea8f0d27a4f 57 long float Gego2; //get egoCorrrection2 amount %
jpnovak 0:7ea8f0d27a4f 58 long float Gair; //get air correction (G_air)
jpnovak 0:7ea8f0d27a4f 59 long float Gwarmup; //get Warmup Enrichment
jpnovak 0:7ea8f0d27a4f 60 long float TPSacc; //get accel enrichment (ms)
jpnovak 0:7ea8f0d27a4f 61 long float TPScut; //get TPS based fuel cut %
jpnovak 0:7ea8f0d27a4f 62 long float Gbaro; //get baroCorrection %
jpnovak 0:7ea8f0d27a4f 63 long float Gammae; //get gammaEnrich %
jpnovak 0:7ea8f0d27a4f 64 long float veCurr1; //get Current VE value Table 1
jpnovak 0:7ea8f0d27a4f 65 long float veCurr2; //get Current VE value Table 2
jpnovak 0:7ea8f0d27a4f 66 long float IAC; //get IAC Step %
jpnovak 0:7ea8f0d27a4f 67 long float ColdAdv; //get Cold Ignition Advance
jpnovak 0:7ea8f0d27a4f 68 long float tpsDOT; //get Rate of Change TPS
jpnovak 0:7ea8f0d27a4f 69 long float mapDOT; //get Rate of Change MAP
jpnovak 0:7ea8f0d27a4f 70 long float Dwell; //get Ignition Dwell
jpnovak 0:7ea8f0d27a4f 71 long float maf; //get MAF - Mass Air Flow
jpnovak 0:7ea8f0d27a4f 72 long float fuelload; //get MAP/TPS Blend %
jpnovak 0:7ea8f0d27a4f 73 long float Ethanol; //get fuel load percent alchohol
jpnovak 0:7ea8f0d27a4f 74 char portstatus; //get Spare Port Status
jpnovak 0:7ea8f0d27a4f 75 char knockRetard; //get Knock timing retard (deg)
jpnovak 0:7ea8f0d27a4f 76 long float EAEFuelCorr; //get EAE Fuel correction
jpnovak 0:7ea8f0d27a4f 77 long float egoV; //get egoV
jpnovak 0:7ea8f0d27a4f 78 long float egoV2; //get egoV2
jpnovak 0:7ea8f0d27a4f 79 char status1; //get Status1
jpnovak 0:7ea8f0d27a4f 80 char status2; //get Status2
jpnovak 0:7ea8f0d27a4f 81 char status3; //get Status3
jpnovak 0:7ea8f0d27a4f 82 char status4; //get Status4
jpnovak 0:7ea8f0d27a4f 83 long float looptime; //get looptime
jpnovak 0:7ea8f0d27a4f 84 char status5; //get Status5
jpnovak 0:7ea8f0d27a4f 85 long float tpsADC; //get tpsADC
jpnovak 0:7ea8f0d27a4f 86 long float fuelload2; //get fuelload2
jpnovak 0:7ea8f0d27a4f 87 long float ignload; //get ignload
jpnovak 0:7ea8f0d27a4f 88 long float ignload2; //get ignload2
jpnovak 0:7ea8f0d27a4f 89 char syncstatus; //get Sync-Status (0 - sync-error, 1 - syncstatus)
jpnovak 0:7ea8f0d27a4f 90 float deltaT; //get deltaT
jpnovak 0:7ea8f0d27a4f 91 long float wallfuel; //get wallfuel
jpnovak 0:7ea8f0d27a4f 92
jpnovak 0:7ea8f0d27a4f 93 int runtime;
jpnovak 0:7ea8f0d27a4f 94
jpnovak 0:7ea8f0d27a4f 95
jpnovak 0:7ea8f0d27a4f 96 unsigned char data_out;
jpnovak 0:7ea8f0d27a4f 97 int n;
jpnovak 0:7ea8f0d27a4f 98 int row;
jpnovak 0:7ea8f0d27a4f 99 int column;
jpnovak 0:7ea8f0d27a4f 100 int i;
jpnovak 0:7ea8f0d27a4f 101 char MSII_288Header[] = {0x46,0x52,0x44,0x00,0x00,0x00,0x00,0x01,0x4b,0x61,0xf1,0x63,0x4d,0x53,0x49,0x49,0x20,0x52,0x65,0x76,0x20,0x32,0x2e,0x38,0x38,0x30,0x30,0x30,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x00,0x70};//file header
jpnovak 0:7ea8f0d27a4f 102 char MSIIExtraHeader[] = {0x46,0x52,0x44,0x00,0x00,0x00,0x00,0x01,0x4b,0x6a,0xf3,0xa8,0x4d,0x53,0x32,0x45,0x78,0x74,0x72,0x61,0x20,0x52,0x65,0x6c,0x20,0x32,0x2e,0x31,0x2e,0x31,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x00,0x91};
jpnovak 0:7ea8f0d27a4f 103 char parse_header[] = {0x01,0x00};//data header
jpnovak 0:7ea8f0d27a4f 104
jpnovak 0:7ea8f0d27a4f 105
jpnovak 0:7ea8f0d27a4f 106 /*DigoleSerialDisp 2x20 parallel code pin assignment*/
jpnovak 0:7ea8f0d27a4f 107 //TextDigoleSerialDisp DigoleSerialDisp(p21, p22, p23, p24, p25, p26, p30, 20, 2); // (rs, rw, e, d0, d1, d2, d3, n_column, n_rows)
jpnovak 0:7ea8f0d27a4f 108 //define file write
jpnovak 0:7ea8f0d27a4f 109 //AnalogIn file_writeenable(p20);//define SD card switch
jpnovak 0:7ea8f0d27a4f 110
jpnovak 0:7ea8f0d27a4f 111
jpnovak 0:7ea8f0d27a4f 112 //enter main loop
jpnovak 0:7ea8f0d27a4f 113 int main() {
jpnovak 0:7ea8f0d27a4f 114
jpnovak 0:7ea8f0d27a4f 115
jpnovak 0:7ea8f0d27a4f 116 DigoleSerialDisp.baud(9600);//set Digole Serial Baud Rate
jpnovak 0:7ea8f0d27a4f 117 // unsigned char tmp;
jpnovak 0:7ea8f0d27a4f 118 // unsigned char data_in;
jpnovak 0:7ea8f0d27a4f 119
jpnovak 0:7ea8f0d27a4f 120 /////Startup Screen////////////
jpnovak 0:7ea8f0d27a4f 121 DigoleSerialDisp.printf("CL\r");//clear screen
jpnovak 0:7ea8f0d27a4f 122 //DigoleSerialDisp.init_Display();
jpnovak 0:7ea8f0d27a4f 123 //DigitalOut myled(LED1);
jpnovak 0:7ea8f0d27a4f 124 DigoleSerialDisp.printf(" DashView V2.1 ");
jpnovak 0:7ea8f0d27a4f 125 wait(3);
jpnovak 0:7ea8f0d27a4f 126 DigoleSerialDisp.printf("CL\r");//clear screen
jpnovak 0:7ea8f0d27a4f 127 DigoleSerialDisp.printf("SD3\r\n");//set rotation 0=0deg,1=90deg,2=180deg,3=270deg
jpnovak 0:7ea8f0d27a4f 128 DigoleSerialDisp.printf("TRT");//offset Line 1 in housing
jpnovak 0:7ea8f0d27a4f 129 DigoleSerialDisp.printf("SF3\rTT Have a great drive\r\n");
jpnovak 0:7ea8f0d27a4f 130 DigoleSerialDisp.printf("TRT");//next line
jpnovak 0:7ea8f0d27a4f 131
jpnovak 0:7ea8f0d27a4f 132 ////////////End Startup Screen//////////
jpnovak 0:7ea8f0d27a4f 133 megasquirt.baud(115200); //define MEgasquirt serial speed
jpnovak 0:7ea8f0d27a4f 134 loggerSerial.baud(115200); //define USB connection speed
jpnovak 0:7ea8f0d27a4f 135 /*
jpnovak 0:7ea8f0d27a4f 136 //file header setup
jpnovak 0:7ea8f0d27a4f 137 FILE *fp = fopen("/sd/datalog.csv", "a");
jpnovak 0:7ea8f0d27a4f 138 //print header for MS.csv file
jpnovak 0:7ea8f0d27a4f 139 fprintf(fp, "MSII Rev 2.88000, \nTime,SecL,RPM,MAP,TP,vBatt,AFR,MAT,CLT,Engine,Gego,Gair,Gwarm,Gbaro,Gammae,TPSacc,PW,DutyCycle,PW2,DutyCycle2,SparkAdv,ColdAdv,Dwell,tpsDOT,mapDOT,IAC,deltaT,Ethanol%,\n");
jpnovak 0:7ea8f0d27a4f 140
jpnovak 0:7ea8f0d27a4f 141 fclose(fp);
jpnovak 0:7ea8f0d27a4f 142 */
jpnovak 0:7ea8f0d27a4f 143 t.start();
jpnovak 0:7ea8f0d27a4f 144
jpnovak 0:7ea8f0d27a4f 145 while (1) {
jpnovak 0:7ea8f0d27a4f 146
jpnovak 0:7ea8f0d27a4f 147 // char c = loggerSerial.getc();
jpnovak 0:7ea8f0d27a4f 148 //temporary call function using keyboard - in future will trigger automatically.
jpnovak 0:7ea8f0d27a4f 149 // if ((c == 'a'))
jpnovak 0:7ea8f0d27a4f 150 // {
jpnovak 0:7ea8f0d27a4f 151 //DigoleSerialDisp.printf(" "); //print space for data output format
jpnovak 0:7ea8f0d27a4f 152 //poll serial device for data stream (a,0,6) to (request, return, confirm)
jpnovak 0:7ea8f0d27a4f 153 megasquirt.putc(97);//send 97 for run parameters, 83 for board revision, 81 code for revision number
jpnovak 0:7ea8f0d27a4f 154 wait(0.005);
jpnovak 0:7ea8f0d27a4f 155 megasquirt.putc(0);
jpnovak 0:7ea8f0d27a4f 156 wait(0.005);
jpnovak 0:7ea8f0d27a4f 157 megasquirt.putc(6);
jpnovak 0:7ea8f0d27a4f 158 int actuallyRead = megasquirt.readBytes( buf, 112); // where 112 is the number of bytes you are expecting
jpnovak 0:7ea8f0d27a4f 159
jpnovak 0:7ea8f0d27a4f 160
jpnovak 0:7ea8f0d27a4f 161 //decodeMS();
jpnovak 0:7ea8f0d27a4f 162
jpnovak 0:7ea8f0d27a4f 163 Time = t.read();
jpnovak 0:7ea8f0d27a4f 164
jpnovak 0:7ea8f0d27a4f 165 //void decodeMS() {
jpnovak 0:7ea8f0d27a4f 166
jpnovak 0:7ea8f0d27a4f 167 //get seconds
jpnovak 0:7ea8f0d27a4f 168 tmp = buf[0];
jpnovak 0:7ea8f0d27a4f 169 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 170 SecL = tmp | buf[1];
jpnovak 0:7ea8f0d27a4f 171 //MSseconds = MSseconds/256;
jpnovak 0:7ea8f0d27a4f 172 //get pulseWidth1
jpnovak 0:7ea8f0d27a4f 173 tmp = buf[2];
jpnovak 0:7ea8f0d27a4f 174 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 175 tmp = tmp | buf[3];
jpnovak 0:7ea8f0d27a4f 176 PW = tmp*0.000666;
jpnovak 0:7ea8f0d27a4f 177
jpnovak 0:7ea8f0d27a4f 178
jpnovak 0:7ea8f0d27a4f 179 //get pulseWidth2
jpnovak 0:7ea8f0d27a4f 180 tmp = buf[4];
jpnovak 0:7ea8f0d27a4f 181 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 182 tmp = tmp | buf[5];
jpnovak 0:7ea8f0d27a4f 183 PW2 = tmp*0.000666;
jpnovak 0:7ea8f0d27a4f 184 //get Rpm
jpnovak 0:7ea8f0d27a4f 185 tmp = buf[6];
jpnovak 0:7ea8f0d27a4f 186 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 187 RPM = tmp | buf[7];
jpnovak 0:7ea8f0d27a4f 188
jpnovak 0:7ea8f0d27a4f 189 //Calculate DutyCycle
jpnovak 0:7ea8f0d27a4f 190 DutyCycle = (PW * (RPM / 60)) / 10;
jpnovak 0:7ea8f0d27a4f 191
jpnovak 0:7ea8f0d27a4f 192 //Calculate DutyCycle2
jpnovak 0:7ea8f0d27a4f 193 DutyCycle2 = (PW2 * (RPM / 60)) / 10;
jpnovak 0:7ea8f0d27a4f 194
jpnovak 0:7ea8f0d27a4f 195
jpnovak 0:7ea8f0d27a4f 196 //get advance
jpnovak 0:7ea8f0d27a4f 197 tmp = buf[8];
jpnovak 0:7ea8f0d27a4f 198 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 199 tmp = tmp | buf[9];
jpnovak 0:7ea8f0d27a4f 200 SparkAdv = tmp/10;
jpnovak 0:7ea8f0d27a4f 201 //get squirt
jpnovak 0:7ea8f0d27a4f 202 squirt = buf[10];
jpnovak 0:7ea8f0d27a4f 203 //get engine
jpnovak 0:7ea8f0d27a4f 204 Engine = buf[11];
jpnovak 0:7ea8f0d27a4f 205 //get AFR target - Table 1
jpnovak 0:7ea8f0d27a4f 206 afrtgt1 = buf[12]*10;
jpnovak 0:7ea8f0d27a4f 207
jpnovak 0:7ea8f0d27a4f 208 //get AFR target - Table 2
jpnovak 0:7ea8f0d27a4f 209 afrtgt2 = buf[13]*10;
jpnovak 0:7ea8f0d27a4f 210 //get WideBand Valid1
jpnovak 0:7ea8f0d27a4f 211 wbo2_en1 = buf[14];
jpnovak 0:7ea8f0d27a4f 212 //get WideBand Valid2
jpnovak 0:7ea8f0d27a4f 213 wbo2_en2 = buf[15];
jpnovak 0:7ea8f0d27a4f 214 //get Barometer
jpnovak 0:7ea8f0d27a4f 215 tmp = buf[16];
jpnovak 0:7ea8f0d27a4f 216 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 217 tmp = tmp | buf[17];
jpnovak 0:7ea8f0d27a4f 218 barometer = tmp/10;
jpnovak 0:7ea8f0d27a4f 219
jpnovak 0:7ea8f0d27a4f 220 //get manifold absolute pressure MAP
jpnovak 0:7ea8f0d27a4f 221 tmp = buf[18];
jpnovak 0:7ea8f0d27a4f 222 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 223 MAP = tmp | buf[19];
jpnovak 0:7ea8f0d27a4f 224 MAP = MAP/10;
jpnovak 0:7ea8f0d27a4f 225 //get manifold absolute temperature (MAT)
jpnovak 0:7ea8f0d27a4f 226 tmp = buf[20];
jpnovak 0:7ea8f0d27a4f 227 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 228 MAT = tmp | buf[21];
jpnovak 0:7ea8f0d27a4f 229 MAT = MAT/10; ///for Farenheit
jpnovak 0:7ea8f0d27a4f 230 MAT = 0.555*(MAT - 32); //for Celcius
jpnovak 0:7ea8f0d27a4f 231 //get coolant temperature (CLT)
jpnovak 0:7ea8f0d27a4f 232 tmp = buf[22];
jpnovak 0:7ea8f0d27a4f 233 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 234 CLT = tmp | buf[23];
jpnovak 0:7ea8f0d27a4f 235 CLT = CLT/10;
jpnovak 0:7ea8f0d27a4f 236 CLT = 0.555*(CLT - 32); //for Celcius
jpnovak 0:7ea8f0d27a4f 237 //get Throttle Position Sensor (TPS)
jpnovak 0:7ea8f0d27a4f 238 tmp = buf[24];
jpnovak 0:7ea8f0d27a4f 239 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 240 TP = tmp | buf[25];
jpnovak 0:7ea8f0d27a4f 241 TP = TP / 10;
jpnovak 0:7ea8f0d27a4f 242 //get BAttery Voltage
jpnovak 0:7ea8f0d27a4f 243 tmp = buf[26];
jpnovak 0:7ea8f0d27a4f 244 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 245 vBatt = tmp | buf[27];
jpnovak 0:7ea8f0d27a4f 246 vBatt = vBatt /10,
jpnovak 0:7ea8f0d27a4f 247 //get Realtime AFR for VE1
jpnovak 0:7ea8f0d27a4f 248 tmp = buf[28];
jpnovak 0:7ea8f0d27a4f 249 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 250 AFR = tmp | buf[29];
jpnovak 0:7ea8f0d27a4f 251 AFR = AFR /10;
jpnovak 0:7ea8f0d27a4f 252 //get Realtime AFR for VE2
jpnovak 0:7ea8f0d27a4f 253 tmp = buf[30];
jpnovak 0:7ea8f0d27a4f 254 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 255 AFR2 = tmp | buf[31];
jpnovak 0:7ea8f0d27a4f 256 AFR2 = AFR2 / 10;
jpnovak 0:7ea8f0d27a4f 257
jpnovak 0:7ea8f0d27a4f 258
jpnovak 0:7ea8f0d27a4f 259 //get Knock Threshold Value
jpnovak 0:7ea8f0d27a4f 260 tmp = buf[32];
jpnovak 0:7ea8f0d27a4f 261 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 262 knock = tmp | buf[33];
jpnovak 0:7ea8f0d27a4f 263 knock = knock /10;
jpnovak 0:7ea8f0d27a4f 264 //get egoCorrrection1 amount %
jpnovak 0:7ea8f0d27a4f 265 tmp = buf[34];
jpnovak 0:7ea8f0d27a4f 266 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 267 Gego = tmp | buf[35];
jpnovak 0:7ea8f0d27a4f 268 //get egoCorrrection2 amount %
jpnovak 0:7ea8f0d27a4f 269 tmp = buf[36];
jpnovak 0:7ea8f0d27a4f 270 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 271 Gego2 = tmp | buf[37];
jpnovak 0:7ea8f0d27a4f 272 //get air correction (G_air)
jpnovak 0:7ea8f0d27a4f 273 tmp = buf[38];
jpnovak 0:7ea8f0d27a4f 274 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 275 Gair = tmp | buf[39];
jpnovak 0:7ea8f0d27a4f 276 //get Warmup Enrichment
jpnovak 0:7ea8f0d27a4f 277 tmp = buf[40];
jpnovak 0:7ea8f0d27a4f 278 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 279 Gwarmup = tmp | buf[41];
jpnovak 0:7ea8f0d27a4f 280
jpnovak 0:7ea8f0d27a4f 281 //get accel enrichment (ms)
jpnovak 0:7ea8f0d27a4f 282 tmp = buf[42];
jpnovak 0:7ea8f0d27a4f 283 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 284 TPSacc = tmp | buf[43];
jpnovak 0:7ea8f0d27a4f 285 TPSacc = TPSacc/10;
jpnovak 0:7ea8f0d27a4f 286 //get TPS based fuel cut %
jpnovak 0:7ea8f0d27a4f 287 tmp = buf[44];
jpnovak 0:7ea8f0d27a4f 288 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 289 TPScut = tmp | buf[45];
jpnovak 0:7ea8f0d27a4f 290 //get baroCorrection %
jpnovak 0:7ea8f0d27a4f 291 tmp = buf[46];
jpnovak 0:7ea8f0d27a4f 292 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 293 Gbaro = tmp | buf[47];
jpnovak 0:7ea8f0d27a4f 294 //get gammaEnrich %
jpnovak 0:7ea8f0d27a4f 295 tmp = buf[48];
jpnovak 0:7ea8f0d27a4f 296 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 297 Gammae = tmp | buf[49];
jpnovak 0:7ea8f0d27a4f 298
jpnovak 0:7ea8f0d27a4f 299 //get Current VE value Table 1
jpnovak 0:7ea8f0d27a4f 300 tmp = buf[50];
jpnovak 0:7ea8f0d27a4f 301 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 302 veCurr1 = tmp | buf[51];
jpnovak 0:7ea8f0d27a4f 303 veCurr1 = veCurr1/10;
jpnovak 0:7ea8f0d27a4f 304 //get Current VE value Table 2
jpnovak 0:7ea8f0d27a4f 305 tmp = buf[52];
jpnovak 0:7ea8f0d27a4f 306 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 307 veCurr2 = tmp | buf[53];
jpnovak 0:7ea8f0d27a4f 308 veCurr2 = veCurr2/10;
jpnovak 0:7ea8f0d27a4f 309 //get IAC Step %
jpnovak 0:7ea8f0d27a4f 310 tmp = buf[54];
jpnovak 0:7ea8f0d27a4f 311 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 312 IAC = tmp | buf[55];
jpnovak 0:7ea8f0d27a4f 313 //get Cold Ignition Advance
jpnovak 0:7ea8f0d27a4f 314 tmp = buf[56];
jpnovak 0:7ea8f0d27a4f 315 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 316 ColdAdv = tmp | buf[57];
jpnovak 0:7ea8f0d27a4f 317 ColdAdv = ColdAdv/10;
jpnovak 0:7ea8f0d27a4f 318 //get Rate of Change TPS
jpnovak 0:7ea8f0d27a4f 319 tmp = buf[58];
jpnovak 0:7ea8f0d27a4f 320 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 321 tpsDOT = tmp | buf[59];
jpnovak 0:7ea8f0d27a4f 322 tpsDOT = tpsDOT/10;
jpnovak 0:7ea8f0d27a4f 323 //get Rate of Change MAP
jpnovak 0:7ea8f0d27a4f 324 tmp = buf[60];
jpnovak 0:7ea8f0d27a4f 325 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 326 mapDOT = tmp | buf[67];
jpnovak 0:7ea8f0d27a4f 327 //get Ignition Dwell
jpnovak 0:7ea8f0d27a4f 328 tmp = buf[62];
jpnovak 0:7ea8f0d27a4f 329 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 330 Dwell = tmp | buf[63];
jpnovak 0:7ea8f0d27a4f 331 Dwell = Dwell*0.6666;
jpnovak 0:7ea8f0d27a4f 332 //get MAF - Mass Air Flow
jpnovak 0:7ea8f0d27a4f 333 tmp = buf[64];
jpnovak 0:7ea8f0d27a4f 334 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 335 maf = tmp | buf[65];
jpnovak 0:7ea8f0d27a4f 336 //get MAP/TPS Blend %
jpnovak 0:7ea8f0d27a4f 337 tmp = buf[66];
jpnovak 0:7ea8f0d27a4f 338 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 339 fuelload = tmp | buf[67];
jpnovak 0:7ea8f0d27a4f 340 fuelload = fuelload/10;
jpnovak 0:7ea8f0d27a4f 341 //get fuel load percent alchohol
jpnovak 0:7ea8f0d27a4f 342 tmp = buf[68];
jpnovak 0:7ea8f0d27a4f 343 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 344 Ethanol = tmp | buf[69];
jpnovak 0:7ea8f0d27a4f 345
jpnovak 0:7ea8f0d27a4f 346 //get Spare Port Status
jpnovak 0:7ea8f0d27a4f 347 portstatus = buf[70];
jpnovak 0:7ea8f0d27a4f 348 //get Knock timing retard (deg)
jpnovak 0:7ea8f0d27a4f 349 knockRetard = buf[71];
jpnovak 0:7ea8f0d27a4f 350 knockRetard = knockRetard/10;
jpnovak 0:7ea8f0d27a4f 351 //get EAE Fuel correction
jpnovak 0:7ea8f0d27a4f 352 tmp = buf[72];
jpnovak 0:7ea8f0d27a4f 353 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 354 EAEFuelCorr = tmp | buf[73];
jpnovak 0:7ea8f0d27a4f 355
jpnovak 0:7ea8f0d27a4f 356 //get egoV
jpnovak 0:7ea8f0d27a4f 357 tmp = buf[74];
jpnovak 0:7ea8f0d27a4f 358 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 359 egoV = tmp | buf[75];
jpnovak 0:7ea8f0d27a4f 360 egoV = egoV/100;
jpnovak 0:7ea8f0d27a4f 361 //get egoV2
jpnovak 0:7ea8f0d27a4f 362 tmp = buf[76];
jpnovak 0:7ea8f0d27a4f 363 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 364 egoV2 = tmp | buf[77];
jpnovak 0:7ea8f0d27a4f 365 egoV2 = egoV2/100;
jpnovak 0:7ea8f0d27a4f 366 //get Status1
jpnovak 0:7ea8f0d27a4f 367 status1 = buf[78];
jpnovak 0:7ea8f0d27a4f 368 //get Status2
jpnovak 0:7ea8f0d27a4f 369 status2 = buf[79];
jpnovak 0:7ea8f0d27a4f 370 //get Status3
jpnovak 0:7ea8f0d27a4f 371 status3 = buf[80];
jpnovak 0:7ea8f0d27a4f 372 //get Status4
jpnovak 0:7ea8f0d27a4f 373 status4 = buf[81];
jpnovak 0:7ea8f0d27a4f 374 //get looptime
jpnovak 0:7ea8f0d27a4f 375 tmp = buf[82];
jpnovak 0:7ea8f0d27a4f 376 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 377 looptime = tmp | buf[83];
jpnovak 0:7ea8f0d27a4f 378 looptime = looptime*0.6667;
jpnovak 0:7ea8f0d27a4f 379 //get Status5
jpnovak 0:7ea8f0d27a4f 380 status5 = buf[84];
jpnovak 0:7ea8f0d27a4f 381 //get tpsADC
jpnovak 0:7ea8f0d27a4f 382 tmp = buf[85];
jpnovak 0:7ea8f0d27a4f 383 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 384 tpsADC = tmp | buf[86];
jpnovak 0:7ea8f0d27a4f 385 //get fuelload2
jpnovak 0:7ea8f0d27a4f 386 tmp = buf[87];
jpnovak 0:7ea8f0d27a4f 387 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 388 fuelload2 = tmp | buf[88];
jpnovak 0:7ea8f0d27a4f 389 //get ignload
jpnovak 0:7ea8f0d27a4f 390 tmp = buf[89];
jpnovak 0:7ea8f0d27a4f 391 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 392 ignload = tmp | buf[90];
jpnovak 0:7ea8f0d27a4f 393 ignload = ignload/100;
jpnovak 0:7ea8f0d27a4f 394 //get ignload2
jpnovak 0:7ea8f0d27a4f 395 tmp = buf[91];
jpnovak 0:7ea8f0d27a4f 396 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 397 ignload2 = tmp | buf[92];
jpnovak 0:7ea8f0d27a4f 398 ignload2 = ignload2/100;
jpnovak 0:7ea8f0d27a4f 399 //get Sync-Status (0 - sync-error, 1 - syncstatus)
jpnovak 0:7ea8f0d27a4f 400 syncstatus = buf[104];
jpnovak 0:7ea8f0d27a4f 401
jpnovak 0:7ea8f0d27a4f 402 //get deltaT
jpnovak 0:7ea8f0d27a4f 403 tmp = buf[106];
jpnovak 0:7ea8f0d27a4f 404 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 405 deltaT = tmp | buf[107];
jpnovak 0:7ea8f0d27a4f 406 //get wallfuel
jpnovak 0:7ea8f0d27a4f 407 tmp = buf[110];
jpnovak 0:7ea8f0d27a4f 408 tmp = tmp << 8;
jpnovak 0:7ea8f0d27a4f 409 wallfuel = tmp | buf[111];
jpnovak 0:7ea8f0d27a4f 410
jpnovak 0:7ea8f0d27a4f 411 ///Display Parameters to DigoleSerialDisp///////////
jpnovak 0:7ea8f0d27a4f 412 DigoleSerialDisp.printf("SF3\r\n");
jpnovak 0:7ea8f0d27a4f 413 DigoleSerialDisp.printf("SD3\r\n");//set rotation 0=0deg,1=90deg,2=180deg,3=270deg
jpnovak 0:7ea8f0d27a4f 414 DigoleSerialDisp.printf("TRT");//offset Line 1 in housing
jpnovak 0:7ea8f0d27a4f 415
jpnovak 0:7ea8f0d27a4f 416 //DigoleSerialDisp.locate(0,1);
jpnovak 0:7ea8f0d27a4f 417 DigoleSerialDisp.printf("TT Volt=%4.1f \r\nTRT TT AFR =%4.1f\r\n TRT TT MAT= %3.0f C\r\nTRT TT CLT= %3.0f C\r\nTRT",vBatt,AFR,MAT,CLT);
jpnovak 0:7ea8f0d27a4f 418 DigoleSerialDisp.printf("TRT");//next line
jpnovak 0:7ea8f0d27a4f 419
jpnovak 0:7ea8f0d27a4f 420 //DigoleSerialDisp.locate(0,0);
jpnovak 0:7ea8f0d27a4f 421 //DigoleSerialDisp.printf("TT AFR =%4.1f\r\n", AFR);
jpnovak 0:7ea8f0d27a4f 422 //DigoleSerialDisp.printf("TRT");//next line
jpnovak 0:7ea8f0d27a4f 423
jpnovak 0:7ea8f0d27a4f 424
jpnovak 0:7ea8f0d27a4f 425
jpnovak 0:7ea8f0d27a4f 426 //get manifold absolute temperature (MAT)
jpnovak 0:7ea8f0d27a4f 427 /*
jpnovak 0:7ea8f0d27a4f 428 //DigoleSerialDisp.locate(10,1);
jpnovak 0:7ea8f0d27a4f 429 DigoleSerialDisp.printf("TT MAT= %3.0f C\r\n", MAT);
jpnovak 0:7ea8f0d27a4f 430 DigoleSerialDisp.printf("TRT");//next line
jpnovak 0:7ea8f0d27a4f 431
jpnovak 0:7ea8f0d27a4f 432 //get Clt
jpnovak 0:7ea8f0d27a4f 433 // CLT = 0.5555*(CLT - 32); //for Celcius
jpnovak 0:7ea8f0d27a4f 434 //DigoleSerialDisp.locate(10,0);
jpnovak 0:7ea8f0d27a4f 435 DigoleSerialDisp.printf("TT CLT= %3.0f C\r\n", CLT);
jpnovak 0:7ea8f0d27a4f 436 DigoleSerialDisp.printf("TRT");//next line
jpnovak 0:7ea8f0d27a4f 437 */
jpnovak 0:7ea8f0d27a4f 438 DigoleSerialDisp.printf("CL\r");//clear screen
jpnovak 0:7ea8f0d27a4f 439
jpnovak 0:7ea8f0d27a4f 440 /*
jpnovak 0:7ea8f0d27a4f 441 ////////////////////////write to SD Card////////////////////////////////
jpnovak 0:7ea8f0d27a4f 442 if (SDenable > 0.5) //switch enable
jpnovak 0:7ea8f0d27a4f 443 {
jpnovak 0:7ea8f0d27a4f 444 myled1 = 1;
jpnovak 0:7ea8f0d27a4f 445 FILE *fp = fopen("/sd/datalog.csv", "a");
jpnovak 0:7ea8f0d27a4f 446 fprintf(fp, "%8.3f, %4f, %i, %4.1f, %3f, %4.1f, %4.1f, %5.1f, %5.1f, %f, %f, %f, %f, %f, %f, %f, %f, %4.1f, %f, %4.1f, %f, %f, %f, %f, %f, %f, %f, %i, \n", Time, SecL, RPM, MAP, TP, vBatt, AFR, MAT, CLT, Engine, Gego, Gair, Gwarmup, Gbaro, Gammae, TPSacc, PW, DutyCycle, PW2, DutyCycle2, SparkAdv, ColdAdv, Dwell, tpsDOT, mapDOT, IAC, deltaT, Ethanol);
jpnovak 0:7ea8f0d27a4f 447 fclose(fp);
jpnovak 0:7ea8f0d27a4f 448 } else {
jpnovak 0:7ea8f0d27a4f 449 myled1 = 0;
jpnovak 0:7ea8f0d27a4f 450 }
jpnovak 0:7ea8f0d27a4f 451 */
jpnovak 0:7ea8f0d27a4f 452 }
jpnovak 0:7ea8f0d27a4f 453 }
jpnovak 0:7ea8f0d27a4f 454
jpnovak 0:7ea8f0d27a4f 455 //exit main loop