the serial code looks right to me, so I suspect the interrupt isnt working for some reason;
It might be due to which board you are using, not all of them have the same interrupts on the same pins.
what I would do is to add;
void rpm_fun()
{
// toggle the board LED on pin 13
digitalWrite(13, !digitalRead(13));
half_revolutions++;
//Each rotation, this interrupt function is run twice
}
This should flash the LED in time with interrupts received, and then you'll know the code is being executed. If it is, then i'm stuck...
MB