Cycling Power Meter help needed

Hi , everyone! I am currently making a cycling power meter that measures the force applied at the cleat of the cycling shoe and the RPM is calculated using a hall sensor. This is my first ever arduino project and Ive ran into some difficulties with the code. I have code that calculates the cadence by counting the amount of time it takes to make five revolutions, before displaying the power. However the method I am using means the cadence will never be zero. I know Ive made my code so that it wont display anything unless w>0 however I need that to be. This is because I have to do a detach interrupt while the data is being displayed so that things wont go crazy during operation. If that loop was continuously going the attach interrupt would never be activated. Thats why in the code the display doesnt go unless w>0. Hope that makes sense.
However this means if you stop peddling the power meter will always show that last cadence reading. I am struggling to find a way to change this because of my poor C++ knowledge and if someone could help me that would be great!

Notes
Power = Torque * angular velocity

Force is found using a flexiforce sensor.
Angular velocity found using a hall effect sensor.

Any question please dont hesitate to ask!

[volatile int revolutions;
float w;
unsigned long timeold;
float force;
int in=A0; //flexiforce sensor
float power;

void setup()
{
Serial.begin(9600);
pinMode(in,INPUT); //flexiforce sensor is an input
attachInterrupt(0, rpm_counter, RISING); //system should never miss a revolution using this function
revolutions = 0;
w = 0;
timeold = 0;
}
void loop()

{
if(w != 0) { //if w>0 display values
detachInterrupt(0); //we dont want any interrupts here
force = analogRead(in)0.2; //random calibraton (ignore)
power = force
w;

Serial.print((int)force);
Serial.print("|"); //split so is compatible with MIT app inventor and SD data logger
Serial.print(w);
Serial.print("|");
Serial.println(power);
delay(1000);
w=0;
attachInterrupt(0, rpm_counter, RISING); //re-attach interupt
}

if (revolutions >= 5) { //after five revolutions
w = revolutions*((2*3.141)*1000)/((millis() - timeold)); //calculates angular velcoity

timeold = millis(); //ready for next calculation

revolutions = 0; //set revolutions back to 0.

}
}
void rpm_counter()
{
revolutions = revolutions+1; //adds one revolution when hall sensor is activated

}]

Maybe this will work better:

volatile byte revolutions;
unsigned long timeold;
const byte inPin = A0;          //flexiforce sensor


void setup()
{
  Serial.begin(9600);
  // pinMode(inPin, INPUT);         // NOT NEEDED FOR ANALOG INPUTS
  attachInterrupt(0, rpm_counter, RISING);     // system should never miss a revolution using this function
  revolutions = 0;
  timeold = millis();
}


void loop()
{
  if (revolutions >= 5) 
  {              //after five revolutions
    float w = revolutions * ((2 * 3.141) * 1000) / ((millis() - timeold)); //calculates angular velcoity


    // Prepare for next calculation
    revolutions = 0;
    timeold = millis();


    float force = analogRead(inPin) * 0.2;         //random calibraton (ignore)
    float power = force * w;


    Serial.print((int)force);
    Serial.print("|");                    //split so is compatible with MIT app inventor and SD data logger
    Serial.print(w);
    Serial.print("|");
    Serial.println(power);
  }
}


void rpm_counter()
{
  revolutions++;       //adds one revolution when hall sensor is activated
}

Your program's structure could be both better and simpler. No need to keep attaching / detaching the interrupt. This is similar to above but protects non-atomic accesses to the volatile variable.

volatile int revolutions;
float w;
unsigned long timeold;
float force;
int in = A0;          //flexiforce sensor
float power;

void setup()
{
  Serial.begin(9600);
  pinMode(in, INPUT);                     //flexiforce sensor is an input
  revolutions = 0;
  w = 0;
  timeold = millis();                          // Starting time won't be 0, use actual value
  attachInterrupt(0, rpm_counter, RISING);     // Attach interrupt AFTER initializing the variables
}
void loop() {
  uint16_t localRevolutions = 0;
  uint32_t timeStamp;

  timeStamp = millis();
  noInterrupts();
  if (revolutions >= 5) {
    localRevolutions = revolutions;
    revolutions = 0;
  }
  interrupts();
  if (localRevolutions>0) {
    // Read 'force' here
    // Compute 'w' here using 'localRevolutions' and (timeStamp - timeold)
    // Compute power from 'force' and 'w'
    // Print results
    timeold = timeStamp;  // Set to compute next time interval    
  }
}
void rpm_counter()
{
  revolutions = revolutions++;       // Use 'C' language increment notation
}

EDIT:
Moved reading millis() for timeStamp out of noInterrupts zone.