const uint16_t ignition_rpm[] = { 1000, 1500, 1650, 2000, 2500, 3000, 3500, 4000 };
const uint8_t ignition_angle[] = { 15, 18, 20, 25, 30, 35, 40, 42 };
uint8_t get_advance_deg(uint32_t rpm) {
if (rpm <= ignition_rpm[0]) return ignition_angle[0];
if (rpm >= ignition_rpm[MAP_LEN - 1]) return ignition_angle[MAP_LEN - 1];
for (int i = 0; i < MAP_LEN - 1; i++) {
if (rpm >= ignition_rpm[i] && rpm < ignition_rpm[i + 1]) {
float fraction = (rpm - ignition_rpm[i]) / float(ignition_rpm[i + 1] - ignition_rpm[i]);
return ignition_angle[i] + fraction * (ignition_angle[i + 1] - ignition_angle[i]);
}
}
return 20;
}
Źródło: