Rev 2438 Rev 2440
1 // I2C Light Sensor 1 // I2C Light Sensor
2   2  
3 #include <Wire.h> 3 #include <Wire.h>
4 #include <math.h> 4 #include <math.h>
5   5  
6 #define address 0x44 // A0 = L 6 #define address 0x44 // A0 = L
7 #define SENSE_VIS 0 7 #define SENSE_VIS 0
8 #define SENSE_IR 1 8 #define SENSE_IR 1
9   9  
10 #define LIGHT_AUTORANGE 0 10 #define LIGHT_AUTORANGE 0
11 #define LIGHT_RANGE1 1 11 #define LIGHT_RANGE1 1
12 #define LIGHT_RANGE2 2 12 #define LIGHT_RANGE2 2
13 #define LIGHT_RANGE3 3 13 #define LIGHT_RANGE3 3
14 #define LIGHT_RANGE4 4 14 #define LIGHT_RANGE4 4
15   15  
16   16  
17 void setup() 17 void setup()
18 { 18 {
19 Wire.begin(); // join i2c bus (address optional for master) 19 Wire.begin(); // join i2c bus (address optional for master)
20 // I2C pins PC4 - , PC5 - 20 // I2C pins PC4 - , PC5 -
21 // 21 //
22 pinMode(3, OUTPUT); // LED pro blikani, aby bylo videt, ze to neco dela 22 pinMode(3, OUTPUT); // LED pro blikani, aby bylo videt, ze to neco dela
23 Serial.begin(9600); // Zmerena intenzita osvetleni se bude vypisovat na seriovou linku 23 Serial.begin(9600); // Zmerena intenzita osvetleni se bude vypisovat na seriovou linku
-   24 Serial.println("LABduino luxmeter demo - (c) MLAB, kakl 2012");
24 } 25 }
25   26  
26 int data = 0; 27 int data = 0;
27 int light_sensor_setup; 28 int light_sensor_setup;
28   29  
29 void led_blink() 30 void led_blink()
30 { 31 {
31 digitalWrite(3, HIGH); // set the LED off 32 digitalWrite(3, HIGH); // set the LED off
32 delay(500); 33 delay(100);
33 digitalWrite(3, LOW); // set the LED on 34 digitalWrite(3, LOW); // set the LED on
34 delay(500); 35 delay(700);
35 } 36 }
36   37  
37   38  
38 int set_light_sensor(int mode) 39 int set_light_sensor(int mode)
39 { 40 {
40 int command; 41 int command;
41 42
42 switch (mode) 43 switch (mode)
43 { 44 {
44 case SENSE_VIS: 45 case SENSE_VIS:
45 { 46 {
46 command=0b11000001; // setup (eye light sensing; measurement range 2) 47 command=0b11000001; // setup (eye light sensing; measurement range 2)
47 break; 48 break;
48 } 49 }
49   50  
50 case SENSE_IR: 51 case SENSE_IR:
51 { 52 {
52 command=0b11100001; // setup (eye light sensing; measurement range 2 [4000 lx]) 53 command=0b11100001; // setup (eye light sensing; measurement range 2 [4000 lx])
53 break; 54 break;
54 } 55 }
55 56
56 default: 57 default:
57 return 3; 58 return 3;
58 } 59 }
59   60  
60 // Setup device 61 // Setup device
61 Wire.beginTransmission(address); 62 Wire.beginTransmission(address);
62 Wire.write(byte(0x00)); // sends address 63 Wire.write(byte(0x00)); // sends address
63 Wire.write(byte(command)); // setup (eye light sensing; one time measurement; measurement range 1) 64 Wire.write(byte(command)); // setup (eye light sensing; one time measurement; measurement range 1)
64 Wire.endTransmission(); // stop transmitting 65 Wire.endTransmission(); // stop transmitting
65 66
66 67
67 // Connect to device and set register address 68 // Connect to device and set register address
68 Wire.beginTransmission(address); 69 Wire.beginTransmission(address);
69 Wire.write(byte(0x00)); // sends address (command register) 70 Wire.write(byte(0x00)); // sends address (command register)
70 Wire.endTransmission(); // stop transmitting 71 Wire.endTransmission(); // stop transmitting
71 72
72 // verify written command byte 73 // verify written command byte
73 Wire.beginTransmission(address); 74 Wire.beginTransmission(address);
74 Wire.requestFrom(address, 1); 75 Wire.requestFrom(address, 1);
75 if (command != Wire.read()) 76 if (command != Wire.read())
76 { 77 {
77 return 4; 78 return 4;
78 Serial.print(data, BIN); 79 Serial.print(data, BIN);
79 } 80 }
80 Wire.endTransmission(); // stop transmitting 81 Wire.endTransmission(); // stop transmitting
81 light_sensor_setup=command; 82 light_sensor_setup=command;
82 } 83 }
83   84  
84 float get_light_measurement() 85 float get_light_measurement()
85 { 86 {
86 unsigned int ret=0; 87 unsigned int ret=0;
87   88  
88 // Connect to device and set register address 89 // Connect to device and set register address
89 Wire.beginTransmission(address); 90 Wire.beginTransmission(address);
90 Wire.write(byte(0x01)); // sends address of LSB reagister 91 Wire.write(byte(0x01)); // sends address of LSB reagister
91 Wire.endTransmission(); // stop transmitting 92 Wire.endTransmission(); // stop transmitting
92 93
93 // Connect to device and request one byte 94 // Connect to device and request one byte
94 Wire.beginTransmission(address); 95 Wire.beginTransmission(address);
95 Wire.requestFrom(address, 1); 96 Wire.requestFrom(address, 1);
96 ret = Wire.read(); 97 ret = Wire.read();
97 Wire.endTransmission(); // stop transmitting 98 Wire.endTransmission(); // stop transmitting
98 99
99 // Connect to device and set register address 100 // Connect to device and set register address
100 Wire.beginTransmission(address); 101 Wire.beginTransmission(address);
101 Wire.write(byte(0x02)); // sends address of MSB register 102 Wire.write(byte(0x02)); // sends address of MSB register
102 Wire.endTransmission(); // stop transmitting 103 Wire.endTransmission(); // stop transmitting
103 104
104 // Connect to device and request one byte 105 // Connect to device and request one byte
105 Wire.beginTransmission(address); 106 Wire.beginTransmission(address);
106 Wire.requestFrom(address, 1); 107 Wire.requestFrom(address, 1);
107 ret +=256 * Wire.read(); 108 ret +=256 * Wire.read();
108 Wire.endTransmission(); // stop transmitting 109 Wire.endTransmission(); // stop transmitting
109   110  
110 return (4000.0/pow(2.0,16)*ret); 111 return (4000.0/pow(2.0,16)*ret);
111 } 112 }
112   113  
113 void loop() 114 void loop()
114 { 115 {
115 int lux=0; 116 int lux=0;
116   117  
117 set_light_sensor(SENSE_VIS); //setup sensor for visible measuring 118 set_light_sensor(SENSE_VIS); //setup sensor for visible measuring
118 led_blink(); // Delay for measurement 119 led_blink(); // Delay for measurement
119 Serial.print("luxVIS\t"); 120 Serial.print("luxVIS\t");
120 Serial.print(get_light_measurement(),1); 121 Serial.print(get_light_measurement(),1);
121 Serial.print("\t"); 122 Serial.print("\t");
122   123  
123 set_light_sensor(SENSE_IR); // setup sensor for infrared measuring 124 set_light_sensor(SENSE_IR); // setup sensor for infrared measuring
124 led_blink(); // Delay for measurement 125 led_blink(); // Delay for measurement
125 Serial.print("luxIR\t"); 126 Serial.print("luxIR\t");
126 Serial.println(get_light_measurement(),1); // data print 127 Serial.println(get_light_measurement(),1); // data print
127 } 128 }
128   129