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