Your counts are so high because you continue to add to the counts whilst the sensor value remains high.
Try something like this (untested)
long measurementStartTime = 0;
int beats = 0;
byte sensorPin = A0;
boolean counted = false;
if ((millis() - measurementStartTime > 10000) && (beats > 0)) //time is up
Serial.print("Beats read in 6 seconds : ");
measurementStartTime = millis();
beats = 0;
currentSensorValue = analogRead(sensorPin);
if (currentSensorValue > 156 && counted == false)
counted = true;
else if (currentSensorValue < 146)
counted = false;
NOTE - the tests deliberately do not use the same value to allow some tolerance as the signal changes from high to low and vice versa but may need adjusting.