volatile float time = 0; volatile float time_last = 0; void setup() { Serial.begin (19200); attachInterrupt(0, rpm_interrupt, RISING); //Pin 2 Set As An Interrupt ( if signal increase) } // Loop To Calculate RPM and Update the serial monitor Display void loop() { int rpm = 0; while(1){ delay(500); //Slow Down Display Updates ( half second) Serial.println (" "); Serial.println (" "); Serial.print ("rpm: "); Serial.println (rpm); if(time > 0) { rpm = 60*(1000000/(time)); } } } //Capture The OPB704 Beam =>Interrupt void rpm_interrupt() { time = (micros() - time_last); time_last = micros(); }