Button logic

a problem i see with this method is that I think all timing including millis and delay dont work properly when interrupts are disabled.

True.

Instead of enabling and disabling interrupts the way that you are, what you need to do is record when you last collected data each time you collect data. Then, on each pass through loop(), you see if is time to collect data again. If it is, then you disable interrupts, copy and reset the count, copy and reset the last time, and re-enable interrupts. Total lost rpm interrupts will be the time needed to copy an int (or long), set an int (or long), and copy a long, and set a long by calling millis().

Then, use the copies and the time that the copies were made to determine the time during which counting occurred, and then use count and counting time to determine rpm.