ISL29125 Ambient Light Sensor demo (KL25Z)

Dependencies:   ISL29125 mbed

Committer:
frankvnk
Date:
Wed May 28 18:46:12 2014 +0000
Revision:
1:098ae9ac1461
Parent:
0:cabd10c37640
update doxygen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:cabd10c37640 1 #include "mbed.h"
frankvnk 0:cabd10c37640 2 #include "ISL29125.h"
frankvnk 0:cabd10c37640 3
frankvnk 0:cabd10c37640 4 DigitalOut myled(LED_GREEN);
frankvnk 0:cabd10c37640 5 bool Overflow = 0;
frankvnk 0:cabd10c37640 6 uint16_t GRBdata[3];
frankvnk 0:cabd10c37640 7 bool data_present;
frankvnk 0:cabd10c37640 8
frankvnk 0:cabd10c37640 9 Timeout flipper;
frankvnk 0:cabd10c37640 10 Ticker als;
frankvnk 0:cabd10c37640 11
frankvnk 0:cabd10c37640 12 void RGBsensor_irq(void)
frankvnk 0:cabd10c37640 13 {
frankvnk 0:cabd10c37640 14 Overflow = 1;
frankvnk 0:cabd10c37640 15 }
frankvnk 0:cabd10c37640 16
frankvnk 0:cabd10c37640 17 // Different constructor calls
frankvnk 0:cabd10c37640 18 ISL29125 RGBsensor(PTE0, PTE1, PTD7, &RGBsensor_irq); // ISR mode
frankvnk 0:cabd10c37640 19 //ISL29125 RGBsensor(PTE0, PTE1, PTD7); // Sync mode
frankvnk 0:cabd10c37640 20 //ISL29125 RGBsensor(PTE0, PTE1); // Free running mode
frankvnk 0:cabd10c37640 21
frankvnk 0:cabd10c37640 22 void flip()
frankvnk 0:cabd10c37640 23 {
frankvnk 0:cabd10c37640 24 RGBsensor.Run(); // Only works in Sync mode, Delayed conversion start.
frankvnk 0:cabd10c37640 25 }
frankvnk 0:cabd10c37640 26
frankvnk 0:cabd10c37640 27 void ALSread()
frankvnk 0:cabd10c37640 28 {
frankvnk 0:cabd10c37640 29 data_present = RGBsensor.Read(ISL29125_RGB, GRBdata);
frankvnk 0:cabd10c37640 30 if(data_present) printf("RGB : %04X-%04X-%04X\r\n", GRBdata[1], GRBdata[0], GRBdata[2]);
frankvnk 0:cabd10c37640 31 if(Overflow)
frankvnk 0:cabd10c37640 32 {
frankvnk 0:cabd10c37640 33 printf("\r\nIRQ : %d\r\n",Overflow);
frankvnk 0:cabd10c37640 34 myled = !myled;
frankvnk 0:cabd10c37640 35 Overflow = 0;
frankvnk 0:cabd10c37640 36 }
frankvnk 0:cabd10c37640 37 }
frankvnk 0:cabd10c37640 38
frankvnk 0:cabd10c37640 39 Serial pc(USBTX, USBRX);
frankvnk 0:cabd10c37640 40
frankvnk 0:cabd10c37640 41 int main()
frankvnk 0:cabd10c37640 42 {
frankvnk 0:cabd10c37640 43 myled = 1;
frankvnk 0:cabd10c37640 44
frankvnk 0:cabd10c37640 45 // Read ID register
frankvnk 0:cabd10c37640 46 printf("Read ID register\r\nWhoAmI : %02X\r\n", RGBsensor.WhoAmI());
frankvnk 0:cabd10c37640 47
frankvnk 0:cabd10c37640 48 // Change threshold registers
frankvnk 0:cabd10c37640 49 RGBsensor.Threshold(ISL29125_LTH_W, 0x0100);
frankvnk 0:cabd10c37640 50 printf("Change threshold registers\r\n%04X\r\n", RGBsensor.Threshold(ISL29125_LTH_R));
frankvnk 0:cabd10c37640 51 RGBsensor.Threshold(ISL29125_HTH_W, 0x2345);
frankvnk 0:cabd10c37640 52 printf("%04X\r\n", RGBsensor.Threshold(ISL29125_HTH_R));
frankvnk 0:cabd10c37640 53
frankvnk 0:cabd10c37640 54 // Get operating mode
frankvnk 0:cabd10c37640 55 printf("Get operating mode\r\nRGB mode : %02X\r\n", RGBsensor.RGBmode());
frankvnk 0:cabd10c37640 56
frankvnk 0:cabd10c37640 57 // Change sensing range
frankvnk 0:cabd10c37640 58 printf("Change sensing range\r\n%d %02X\r\n", RGBsensor.Range(ISL29125_375LX), RGBsensor.Range());
frankvnk 0:cabd10c37640 59 printf("%d %02X\r\n", RGBsensor.Range(ISL29125_10KLX), RGBsensor.Range());
frankvnk 0:cabd10c37640 60 printf("%d %02X\r\n", RGBsensor.Range(0x02), RGBsensor.Range()); //try invalid value
frankvnk 0:cabd10c37640 61
frankvnk 0:cabd10c37640 62 // Change ADC resolution
frankvnk 0:cabd10c37640 63 printf("Change ADC resolution\r\n%d %02X\r\n", RGBsensor.Resolution(ISL29125_12BIT), RGBsensor.Resolution());
frankvnk 0:cabd10c37640 64 printf("%d %02X\r\n", RGBsensor.Resolution(ISL29125_16BIT), RGBsensor.Resolution());
frankvnk 0:cabd10c37640 65 printf("%d %02X\r\n", RGBsensor.Resolution(0x02), RGBsensor.Resolution()); //try invalid value
frankvnk 0:cabd10c37640 66
frankvnk 0:cabd10c37640 67 // Change persistence control
frankvnk 0:cabd10c37640 68 printf("Change persistence control\r\n%d %02X\r\n", RGBsensor.Persist(ISL29125_PERS4), RGBsensor.Persist());
frankvnk 0:cabd10c37640 69 printf("%d %02X\r\n", RGBsensor.Persist(ISL29125_PERS1), RGBsensor.Persist());
frankvnk 0:cabd10c37640 70
frankvnk 0:cabd10c37640 71 // Change IRQ on conversion done
frankvnk 0:cabd10c37640 72 printf("IRQ at end of RGB conversion: %d\r\n", RGBsensor.IRQonCnvDone());
frankvnk 0:cabd10c37640 73 RGBsensor.IRQonCnvDone(true);
frankvnk 0:cabd10c37640 74 printf("Change IRQ at end of RGB conversion: ON\r\n%d\r\n", RGBsensor.IRQonCnvDone());
frankvnk 0:cabd10c37640 75 RGBsensor.IRQonCnvDone(false);
frankvnk 0:cabd10c37640 76 printf("Change IRQ at end of RGB conversion: OFF\r\n%d\r\n", RGBsensor.IRQonCnvDone());
frankvnk 0:cabd10c37640 77
frankvnk 0:cabd10c37640 78 // Change Interrupt threshold assignemnt
frankvnk 0:cabd10c37640 79 printf("Change Interrupt threshold assignemnt\r\n");
frankvnk 0:cabd10c37640 80 printf("G %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_G), RGBsensor.IRQonColor());
frankvnk 0:cabd10c37640 81 printf("R %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_R), RGBsensor.IRQonColor());
frankvnk 0:cabd10c37640 82 printf("B %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_B), RGBsensor.IRQonColor());
frankvnk 0:cabd10c37640 83 printf("0FF %d %02X\r\n", RGBsensor.IRQonColor(ISL29125_OFF), RGBsensor.IRQonColor());
frankvnk 0:cabd10c37640 84 printf("INV %d %02X\r\n", RGBsensor.IRQonColor(0x10), RGBsensor.IRQonColor()); //try invalid value
frankvnk 0:cabd10c37640 85
frankvnk 0:cabd10c37640 86 // Change IR compensation
frankvnk 0:cabd10c37640 87 printf("Change IR compensation\r\n");
frankvnk 0:cabd10c37640 88 printf(" 0 %d %d\r\n", RGBsensor.IRcomp(0), RGBsensor.IRcomp());
frankvnk 0:cabd10c37640 89 printf(" 30 %d %d\r\n", RGBsensor.IRcomp(30), RGBsensor.IRcomp());
frankvnk 0:cabd10c37640 90 printf(" 64 %d %d\r\n", RGBsensor.IRcomp(64), RGBsensor.IRcomp()); //try invalid value
frankvnk 0:cabd10c37640 91 printf("191 %d %d\r\n", RGBsensor.IRcomp(191), RGBsensor.IRcomp());
frankvnk 0:cabd10c37640 92 printf("192 %d %d\r\n", RGBsensor.IRcomp(192), RGBsensor.IRcomp()); //try invalid value
frankvnk 0:cabd10c37640 93
frankvnk 0:cabd10c37640 94 RGBsensor.IRQonColor(ISL29125_G); // Enable Green threshold mode
frankvnk 0:cabd10c37640 95 als.attach(&ALSread, 0.2); // Use this when IRQ on threshold is enabled
frankvnk 0:cabd10c37640 96 flipper.attach(&flip, 5.0); // Only used with Sync mode test - Start conversion after 5 seconds.
frankvnk 0:cabd10c37640 97 while(1)
frankvnk 0:cabd10c37640 98 {
frankvnk 0:cabd10c37640 99 // In IRQ mode, Read ISL29125 RGB values is automatically called every 200ms using a Ticker.
frankvnk 0:cabd10c37640 100 // Reading the the RGB values too fast resluts in a i2c fail when an interrupt occurs.
frankvnk 0:cabd10c37640 101 // Still investigating why this happens.
frankvnk 0:cabd10c37640 102 // As a result, only enable the line below when no IRQ mode is used and als.attach / RGBsensor.IRQonColor are not enabled.
frankvnk 0:cabd10c37640 103 // ALSread();
frankvnk 0:cabd10c37640 104 }
frankvnk 0:cabd10c37640 105 }
frankvnk 0:cabd10c37640 106
frankvnk 0:cabd10c37640 107
frankvnk 0:cabd10c37640 108
frankvnk 0:cabd10c37640 109
frankvnk 0:cabd10c37640 110