Serial.print()

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