How to: Light to Frequency Converter - TSL235R?

Okay,

I made a new version of the code to read the TSL235R:

/* Example: TSL235R
  
   Sensor:
   http://www.sparkfun.com/datasheets/Sensors/Imaging/TSL235R-LF.pdf
   Measurement area: 0.92mm2
   
   Wiring:
   TSL235R    Arduino pins
   GND        GND
   Vcc        +5V
   Out        Digital pin 2
   Wire a 0.1uF capacitator between Vcc and GND close to the sensor
   Wire a led between pin 13 and GND
*/

// Pin definitions
# define TSL235R 2                   // Pin to TSL235R output
# define LEDpin 13                   // Led to show when the sensors is measuring

// Constants
int period = 2000;                   // measurement period, in miliseconds
int ScalingFactor = 1;               // Scaling factor of this sensor
float area = 0.0092;                 // Sensing area of TSL25R device, in cm2

// Variables
unsigned long counter = 0;           // Counter of measurements
volatile unsigned long pulses = 0;   // Counter pf pulses in each measurement period
unsigned long frequency;             // Store the frequency calculated
float irradiance;                    // Store the irradiance calculated
unsigned long startTime;             // Stablish the time when measurement starts
unsigned long currentTime;           // Used to measure the time during measurement
 

void setup(){
  Serial.begin(9600);    // Starts the serial port
  pinMode(TSL235R, INPUT);                    // Declare the pin such as an input of data
  pinMode(LEDpin, OUTPUT);
  Serial.println("Testing a TSL235R sensor:");  // Splash screen
  Serial.println("-------------------------");
  Serial.println(" v0.2      20100720");  
  Serial.println();
}

void loop(){
  digitalWrite(LEDpin, HIGH);
  counter++;
  Serial.print(counter);
  Serial.print("   ");
  startTime = millis();
  currentTime= millis();
  while (currentTime - startTime <= period){
    attachInterrupt(0, count_pulses, RISING);
    //detachInterrupt(0);                          // Stop to sensing pulses from TSL235R sensor
  }
  digitalWrite(LEDpin, LOW);
  Serial.print("pulses: ");
  Serial.print(pulses);
  Serial.print(";  ");
  Serial.print("frequency: ");
  Serial.print(getfrequency(), DEC);
  Serial.print("  Hz;  ");
  Serial.print("irradiance: ");
  Serial.print(getirradiance(), DEC);
  Serial.println("  uW/cm2");
  pulses = 0;                                   // Reset the pulses counter for the next measurement
  delay(5000);                                  // Wait 5 seconds until next measurement
}

void count_pulses()
{
 pulses++;
 currentTime=millis();
}
 

unsigned long getfrequency(){
 frequency = pulses/(period/1000);
 return(frequency);
}

long getirradiance() {
  irradiance = frequency / area;                // Calculate Irradiance (uW/cm2)
  return (irradiance);
}

it is 4210 bytes.

and here is and example of the results:

Testing a TSL235R sensor:

v0.2 20100720

1 pulses: 4800; frequency: 2423 Hz; irradiance: 263369 uW/cm2
2 pulses: 16850; frequency: 8448 Hz; irradiance: 918260 uW/cm2
3 pulses: 16698; frequency: 8373 Hz; irradiance: 910108 uW/cm2
4 pulses: 16709; frequency: 8378 Hz; irradiance: 910652 uW/cm2
5 pulses: 16807; frequency: 8427 Hz; irradiance: 915978 uW/cm2
6 pulses: 17101; frequency: 8574 Hz; irradiance: 931956 uW/cm2
7 pulses: 16581; frequency: 8314 Hz; irradiance: 903695 uW/cm2
8 pulses: 16592; frequency: 8319 Hz; irradiance: 904239 uW/cm2
9 pulses: 16530; frequency: 8285 Hz; irradiance: 900543 uW/cm2
10 pulses: 15568; frequency: 7807 Hz; irradiance: 848586 uW/cm2
11 pulses: 16450; frequency: 8248 Hz; irradiance: 896521 uW/cm2
12 pulses: 25021; frequency: 12535 Hz; irradiance: 1362500 uW/cm2
13 pulses: 1145288; frequency: 572674 Hz; irradiance: 62247172 uW/cm2
14 pulses: 24702; frequency: 12378 Hz; irradiance: 1345434 uW/cm2
15 pulses: 229165; frequency: 114604 Hz; irradiance: 12456956 uW/cm2
16 pulses: 855675; frequency: 427856 Hz; irradiance: 46506084 uW/cm2
17 pulses: 1901801; frequency: 950916 Hz; irradiance: 103360432 uW/cm2
18 pulses: 11109; frequency: 5571 Hz; irradiance: 605543 uW/cm2
19 pulses: 12433; frequency: 6233 Hz; irradiance: 677500 uW/cm2

it seems to run (although i still didn´t check with TSL230R). However, there is one problem. When the light is intense (i tested taking so near a red led), the lecture take infinite time.... it does not stop to measure until to move a little bit the led far from the sensor... any idea? it is a problem of the code i assume.... but i don´t know where.

Your ideas are welcome. Thanks!