Frank Vannieuwkerke
/
ISL29125_demo
ISL29125 Ambient Light Sensor demo (KL25Z)
Diff: main.cpp
- Revision:
- 0:cabd10c37640
--- /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(); + } +} + + + + +