ISL29125 Ambient Light Sensor demo (KL25Z)

Dependencies:   ISL29125 mbed

Files at this revision

API Documentation at this revision

Comitter:
frankvnk
Date:
Wed May 28 18:25:49 2014 +0000
Child:
1:098ae9ac1461
Commit message:
Initial release

Changed in this revision

ISL29125.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ISL29125.lib	Wed May 28 18:25:49 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/frankvnk/code/ISL29125/#59ae5a71c902
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed May 28 18:25:49 2014 +0000
@@ -0,0 +1,110 @@
+#include "mbed.h"
+#include "ISL29125.h"
+
+DigitalOut myled(LED_GREEN);
+bool Overflow = 0;
+uint16_t GRBdata[3];
+bool data_present;
+
+Timeout flipper;
+Ticker als;
+
+void RGBsensor_irq(void)
+{
+    Overflow = 1;
+}
+
+// Different constructor calls
+ISL29125 RGBsensor(PTE0, PTE1, PTD7, &RGBsensor_irq);       // ISR mode
+//ISL29125 RGBsensor(PTE0, PTE1, PTD7);                       // Sync mode
+//ISL29125 RGBsensor(PTE0, PTE1);                             // Free running mode
+
+void flip()
+{
+    RGBsensor.Run();    // Only works in Sync mode, Delayed conversion start.
+}
+
+void ALSread()
+{
+    data_present = RGBsensor.Read(ISL29125_RGB, GRBdata);
+    if(data_present) printf("RGB : %04X-%04X-%04X\r\n", GRBdata[1], GRBdata[0], GRBdata[2]);
+    if(Overflow)
+    {
+        printf("\r\nIRQ : %d\r\n",Overflow);
+        myled = !myled;
+        Overflow = 0;
+    }
+}
+
+Serial pc(USBTX, USBRX);
+
+int main()
+{
+    myled = 1;
+    
+    // Read ID register
+    printf("Read ID register\r\nWhoAmI : %02X\r\n", RGBsensor.WhoAmI());
+
+    // Change threshold registers
+    RGBsensor.Threshold(ISL29125_LTH_W, 0x0100);
+    printf("Change threshold registers\r\n%04X\r\n", RGBsensor.Threshold(ISL29125_LTH_R));
+    RGBsensor.Threshold(ISL29125_HTH_W, 0x2345);
+    printf("%04X\r\n", RGBsensor.Threshold(ISL29125_HTH_R));
+
+    // Get operating mode
+    printf("Get operating mode\r\nRGB mode : %02X\r\n", RGBsensor.RGBmode());
+
+    // Change sensing range
+    printf("Change sensing range\r\n%d %02X\r\n", RGBsensor.Range(ISL29125_375LX), RGBsensor.Range());
+    printf("%d %02X\r\n", RGBsensor.Range(ISL29125_10KLX), RGBsensor.Range());
+    printf("%d %02X\r\n", RGBsensor.Range(0x02), RGBsensor.Range());                 //try invalid value
+
+    // Change ADC resolution
+    printf("Change ADC resolution\r\n%d %02X\r\n", RGBsensor.Resolution(ISL29125_12BIT), RGBsensor.Resolution());
+    printf("%d %02X\r\n", RGBsensor.Resolution(ISL29125_16BIT), RGBsensor.Resolution());
+    printf("%d %02X\r\n", RGBsensor.Resolution(0x02), RGBsensor.Resolution());            //try invalid value
+
+    // Change persistence control
+    printf("Change persistence control\r\n%d %02X\r\n", RGBsensor.Persist(ISL29125_PERS4), RGBsensor.Persist());
+    printf("%d %02X\r\n", RGBsensor.Persist(ISL29125_PERS1), RGBsensor.Persist());
+
+    // Change IRQ on conversion done
+    printf("IRQ at end of RGB conversion: %d\r\n", RGBsensor.IRQonCnvDone());
+    RGBsensor.IRQonCnvDone(true);
+    printf("Change IRQ at end of RGB conversion: ON\r\n%d\r\n", RGBsensor.IRQonCnvDone());
+    RGBsensor.IRQonCnvDone(false);
+    printf("Change IRQ at end of RGB conversion: OFF\r\n%d\r\n", RGBsensor.IRQonCnvDone());
+
+    // Change Interrupt threshold assignemnt
+    printf("Change Interrupt threshold assignemnt\r\n");
+    printf("G   %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_G), RGBsensor.IRQonColor());
+    printf("R   %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_R), RGBsensor.IRQonColor());
+    printf("B   %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_B), RGBsensor.IRQonColor());
+    printf("0FF %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_OFF), RGBsensor.IRQonColor());
+    printf("INV %d %02X\r\n", RGBsensor.IRQonColor(0x10), RGBsensor.IRQonColor());            //try invalid value
+
+    // Change IR compensation
+    printf("Change IR compensation\r\n");
+    printf("  0 %d %d\r\n", RGBsensor.IRcomp(0), RGBsensor.IRcomp());
+    printf(" 30 %d %d\r\n", RGBsensor.IRcomp(30), RGBsensor.IRcomp());
+    printf(" 64 %d %d\r\n", RGBsensor.IRcomp(64), RGBsensor.IRcomp());                    //try invalid value
+    printf("191 %d %d\r\n", RGBsensor.IRcomp(191), RGBsensor.IRcomp());
+    printf("192 %d %d\r\n", RGBsensor.IRcomp(192), RGBsensor.IRcomp());                   //try invalid value
+
+    RGBsensor.IRQonColor(ISL29125_G); // Enable Green threshold mode
+    als.attach(&ALSread, 0.2);  // Use this when IRQ on threshold is enabled 
+    flipper.attach(&flip, 5.0); // Only used with Sync mode test - Start conversion after 5 seconds.
+    while(1)
+    {
+        // In IRQ mode, Read ISL29125 RGB values is automatically called every 200ms using a Ticker.
+        // Reading the the RGB values too fast resluts in a i2c fail when an interrupt occurs.
+        // Still investigating why this happens.
+        // As a result, only enable the line below when no IRQ mode is used and als.attach / RGBsensor.IRQonColor are not enabled.
+        // ALSread();
+    }
+}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed May 28 18:25:49 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877
\ No newline at end of file