test code megasquirt and digole lcd
Dependencies: FatFileSystem mbed
main.cpp@0:7ea8f0d27a4f, 2015-11-27 (annotated)
- Committer:
- jpnovak
- Date:
- Fri Nov 27 16:32:41 2015 +0000
- Revision:
- 0:7ea8f0d27a4f
test code megasquirt digole;
Who changed what in which revision?
User | Revision | Line number | New 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 |