No magic required, but you are going to need to study, pull sensor info, Google lots. A friend has an old Rotax engine for Europa experimental airplane. The sensors were designed to work at 12V - 14V but not acceptable for Arduino (of course.) As friend did not have existing analog dials, the solution was simple: just +5 Volts. Sensors were not linear so a lookup table was used. Code snippet below:
#define WaterTemp_AnalogIn A0 // Coolant Temperature
#define OilTemp_AnalogIn A1 // Oil Temperature
#define OilPress_AnalogIn A2 // Oil Pressure
#define FrontCylTemp_AnalogIn A3 // Cylinder Head Front Temperature 1
#define RearCylTemp_AnalogIn A4 // Cylinder Head Rear Temperature 2
int CHTemp_1 = 0; // Cylinder Head Temperature 1
int CHTemp_2 = 0; // Cylinder Head Temperature 2
int EOTemp_1 = 0; // Engine Oil Temperature
int EOPres_1 = 0; // Engine Oil Pressure
int ECTemp_1 = 0; // Engine Coolant/Water Temperature
// CHT: Cylinder Head Temperature
//const int CHT[] PROGMEM = { 360, 360, 256, 329, 302, 284, 275, 266, 257, 248, 239, 235, 230, 225, 221, 212, 208, 203, 200, 197, 194, 191, 188, 185, 182, 180, 178, 176, 173, 171, 169, 167, 166, 164, 162, 160, 158, 156, 154, 152, 151, 150, 149, 147, 144, 143, 142, 141, 140, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 121, 120, 119, 118, 117, 116, 115, 114, 113, 113, 112, 111, 110, 109, 108, 107, 106, 106, 105, 105, 104, 104, 103, 102, 101, 100, 99, 98, 97, 97, 96, 96, 95, 95, 94, 93, 92, 91, 90, 89, 89, 88, 88, 87, 87, 86, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 74, 72, 70, 68, 66, 65, 64, 62, 61, 58, 56, 54, 52, 50, 48, 46, 44, 42, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 };
const int CHT[] PROGMEM = { 302, 302, 302, 302, 302, 286, 281, 269, 257, 249, 242, 234, 228, 221, 216, 213, 207, 202, 199, 194, 191, 189, 185, 182, 180, 178, 175, 173, 171, 168, 166, 164, 161, 159, 158, 157, 154, 152, 151, 148, 147, 146, 145, 144, 142, 140, 139, 137, 136, 135, 134, 133, 131, 130, 129, 128, 127, 126, 125, 124, 123, 121, 120, 119, 118, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
//const int CHT[] PROGMEM = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
// EOT: Engine Oil Temperature
//const int EOT[] PROGMEM = { 360, 360, 256, 329, 302, 284, 275, 266, 257, 248, 239, 235, 230, 225, 221, 212, 208, 203, 200, 197, 194, 191, 188, 185, 182, 180, 178, 176, 173, 171, 169, 167, 166, 164, 162, 160, 158, 156, 154, 152, 151, 150, 149, 147, 144, 143, 142, 141, 140, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 121, 120, 119, 118, 117, 116, 115, 114, 113, 113, 112, 111, 110, 109, 108, 107, 106, 106, 105, 105, 104, 104, 103, 102, 101, 100, 99, 98, 97, 97, 96, 96, 95, 95, 94, 93, 92, 91, 90, 89, 89, 88, 88, 87, 87, 86, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 74, 72, 70, 68, 66, 65, 64, 62, 61, 58, 56, 54, 52, 50, 48, 46, 44, 42, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 };
const int EOT[] PROGMEM = { 302, 302, 302, 302, 302, 286, 281, 269, 257, 249, 242, 234, 228, 221, 216, 213, 207, 202, 199, 194, 191, 189, 185, 182, 180, 178, 175, 173, 171, 168, 166, 164, 161, 159, 158, 157, 154, 152, 151, 148, 147, 146, 145, 144, 142, 140, 139, 137, 136, 135, 134, 133, 131, 130, 129, 128, 127, 126, 125, 124, 123, 121, 120, 119, 118, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
//const int EOT[] PROGMEM = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
// ECT: Engine Coolant Temperature
const int ECT[] PROGMEM = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
//const int ECT[] PROGMEM = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
// EOP: Engine Oil Pressure
//const int EOP[] PROGMEM = { 0, 0, 3, 6, 9, 12, 13, 15, 17, 20, 23, 25, 27, 29, 44, 48, 53, 58, 62, 73, 80, 87, 94, 102, 110, 116, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
const int EOP[] PROGMEM = { 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 11, 12, 13, 14, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 44, 45, 46, 47, 48, 49, 50, 54, 55, 56, 57, 58, 58, 59, 61, 63, 65, 67, 69, 70, 71, 73, 74, 75, 77, 78, 80, 82, 83, 85, 87, 90, 93, 96, 97, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 123, 125, 127, 131, 133, 135, 139, 143, 145, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
//const int EOP[] PROGMEM = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 };
// ________________________________________________________________________(read analog pin previously defined)
// Cylinder Head sensor #1
int CylHeadFront()
{
/* int therm = analogRead(FrontCylTemp_AnalogIn) / 4; // 10-bits with a VCC 5V+ reference */
// int therm = (analogRead(FrontCylTemp_AnalogIn) >> 2); // divide by 4 to remap 10-bit analog to 8-bit analog
int ROW = 3;
int therm = ( analogAverage ( ROW, FrontCylTemp_AnalogIn ) >> 2);
int CHTemp_1 = pgm_read_word(&CHT[therm]);
return (CHTemp_1) ;
}
// ________________________________________________________________________(read analog pin previously defined)
// Cylinder Head sensor #2
int CylHeadRear()
{
// CHT Rear: OLED positions 8, 9, 10 LINE2
/* int therm = analogRead(RearCylTemp_AnalogIn) / 4; // 10-bit == 0 - 1023 */
// int therm = (analogRead(RearCylTemp_AnalogIn) >> 2); // divide by 4 to remap 10-bit analog to 8-bit analog
int ROW = 4;
int therm = ( analogAverage ( ROW, RearCylTemp_AnalogIn ) >> 2);
int CHTemp_2 = pgm_read_word(&CHT[therm]);
return (CHTemp_2) ;
}
// ________________________________________________________________________(read analog pin previously defined)
// Water Temperature int ECTemp_1 = 0 // Engine Coolant (Water) Temperature
// OLED Display positions: 0, 1, 2 LINE2
int EngineCoolantTemp()
{
/* int therm = analogRead(WaterTemp_AnalogIn) / 4; //10-bit == 0-1023 */
// int therm = (analogRead(WaterTemp_AnalogIn) >> 2);
int ROW = 0;
int therm = ( analogAverage ( ROW, WaterTemp_AnalogIn ) >> 2);
// Water Coolant Temperature
int ECTemp_1 = pgm_read_word(&ECT[therm]);
return (ECTemp_1) ;
}
// ________________________________________________________________________(read analog pin previously defined)
// Oil Temperature int EOTemp_1 = 0; // Engine Oil Temperature
// OLED Display positions: 4, 5, 6 LINE1
int EngOilTemp()
{
/* int therm = analogRead(OilTemp_AnalogIn) / 4; // 10-bit, 0-1023 */
// int therm = (analogRead(OilTemp_AnalogIn) >> 2);
int ROW = 1;
int therm = ( analogAverage ( ROW, OilTemp_AnalogIn ) >> 2);
/* Engine Oil Temperature */
int EOTemp_1 = pgm_read_word(&EOT[therm]);
return (EOTemp_1) ;
}
// ________________________________________________________________________(read analog pin previously defined)
// Oil Pressure int EOPres_1 = 0; // Engine Oil Pressure
// OLED Display positions 4, 5, 6 LINE2
int EngineOilPres()
{
/* int therm = analogRead(OilPress_AnalogIn) / 4; // 10-bit == 0-1023 */
// int therm = (analogRead(OilPress_AnalogIn) >> 2);
int ROW = 2;
int therm = ( analogAverage ( ROW, OilPress_AnalogIn ) >> 2);
EOPres_1 = pgm_read_word(&EOP[therm]);
return (EOPres_1) ;
}
The average routine is basic:
#include <Streaming.h> // library can be found here: http://arduiniana.org/libraries/streaming/
#define DIAG false // or true
const int Average_Depth = 5 ; // can be changed at expense of loop{} total time
int AnalogAverageMatrix [9][Average_Depth]; // 9 is based on A0, A1, A2, A3, A4, A10, A12, A13, A15
int analogAverage ( int ROW, int ApinNo )
{
int ReadVal = 0;
// Rollup ... small matrix, just assign for testing, could be a for() if desired
// Oldest value is [0], newest value [4]
AnalogAverageMatrix [ROW][0] = AnalogAverageMatrix [ROW][1];
AnalogAverageMatrix [ROW][1] = AnalogAverageMatrix [ROW][2];
AnalogAverageMatrix [ROW][2] = AnalogAverageMatrix [ROW][3];
AnalogAverageMatrix [ROW][3] = AnalogAverageMatrix [ROW][4];
// do two reads ... as a test, but one should really be enough IMO
ReadVal = analogRead( ApinNo ); // delayMicroseconds( 10 );
AnalogAverageMatrix [ROW][4] = analogRead( ApinNo );
if ( DIAG) Serial << ROW << ": " << AnalogAverageMatrix [ROW][0] << ", " << AnalogAverageMatrix [ROW][1] << ", " << AnalogAverageMatrix [ROW][2] << ", " << AnalogAverageMatrix [ROW][3] << ", " << AnalogAverageMatrix [ROW][4] << endl ;
// now perform an average [0] -> [4]
/*ReadVal = 0;
for (int x = 0; x < 5; x++) {
ReadVal += AnalogAverageMatrix[ROW][x];
} */
// Yes, a bit more flexible solution would be to loop
ReadVal = AnalogAverageMatrix [ROW][0] +
AnalogAverageMatrix [ROW][1] +
AnalogAverageMatrix [ROW][2] +
AnalogAverageMatrix [ROW][3] +
AnalogAverageMatrix [ROW][4] ;
ReadVal = ReadVal / Average_Depth;
if (DIAG) Serial << "Average for " << ROW << ": " << "is " << ReadVal << endl;
return ReadVal; // The average is returned to calling function
}
/* These notes need to be moved to _Notes after debugging and testing
The test matrix is 45 integer values, arranged in 9 rows of 5 columns.
[ROW] represents the function + specific analog input pin #
Example:
A0 is allocated to water temperature. WaterTemp_AnalogIn is the pin-name variable representing A0
Functions simply "set" ROW variable, call the analogAverage function with the analog pin name.
ROW must be specified because the pins are not contiguous... A0, A1, A2, A3, A4, A10, A12, A13, A15 == 9 pins alias names == [0 - 8]
The averaging matrix is hard-coded at the moment (easily expanded) to maintain 4 old values and the current analog input.
The loop() cycle time is still under 1000mS, so the OLED displays should come to read average values in under 5 seconds.
Modified 20190712
Base code provided by Bill as edited (arrays) version of Europa9_Mega2560 ----> Europa10_Mega2560
Mofified all analogRead statements to average across Average_Depth as AReadAvg[Y][Average_Depth] where
Y == [0] = WaterTemp_AnalogIn X = [0], [1], [2], [3], [4]
[1] = OilTemp_AnalogIn X = [0], [1], [2], [3], [4]
[2] = OilPres_AnallgIn X = [0], [1], [2], [3], [4]
[3] = FrontCylTemp_AnalogIn X = [0], [1], [2], [3], [4]
[4] = RearCylTemp_AnalogIn X = [0], [1], [2], [3], [4]
[5] = Ampres_AnalogIn X = [0], [1], [2], [3], [4]
[6] = Voltage_AnalogIn X = [0], [1], [2], [3], [4]
[7] = FuelQty_AnalogIn X = [0], [1], [2], [3], [4]
[8] = FuelPres_AnalogIn X = [0], [1], [2], [3], [4]
*/