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!