
if (start_counting) {
    current_pulses = 0;
    reset_current_ticks_or_memorize_current_value_as_offset;
} else {
    current_pulses++;
    current_ticks = read_ticks_somehow;
    if (current_pulses <= 10 && current_ticks > limits[current_pulses]
    ||  current_ticks >= 2500) {
        // Either have measured at least 0.5 seconds, or speed is slow. Emit now.
        measured_ticks = current_ticks;
        measured_pulses = current_pulses;
        have_speed_data_to_display = TRUE;
        current_pulses = 0;
        reset_current_ticks_or_memorize_current_value_as_offset;
    }
}
