Demonstration program for the VEML6040 and VEML6075 optical sensors

Dependencies:   VEML60xx mbed

Committer:
loopsva
Date:
Fri Apr 22 01:14:40 2016 +0000
Revision:
0:66a40a792cc9
Child:
1:cb3f098cfa62
Demonstration program for the VEML60xx optical sensors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:66a40a792cc9 1 #include "mbed.h"
loopsva 0:66a40a792cc9 2 #include "veml60xx.h" //Vishay VEML6075 UVA & UVB sensor
loopsva 0:66a40a792cc9 3
loopsva 0:66a40a792cc9 4 Serial pc(USBTX, USBRX);
loopsva 0:66a40a792cc9 5
loopsva 0:66a40a792cc9 6 #define SDA0 D14 //PTE25
loopsva 0:66a40a792cc9 7 #define SCL0 D15 //PTE24
loopsva 0:66a40a792cc9 8
loopsva 0:66a40a792cc9 9 veml60xx uv(SDA0, SCL0, 400000); //UV sensor
loopsva 0:66a40a792cc9 10 veml60xx::veml60xx_struct uvSTR = {}; //data structure for VEML60xx
loopsva 0:66a40a792cc9 11
loopsva 0:66a40a792cc9 12 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 13 // Print build date / time Note: display is UTC, not local time
loopsva 0:66a40a792cc9 14
loopsva 0:66a40a792cc9 15 void printBuildDate() {
loopsva 0:66a40a792cc9 16 pc.printf("FRDM-K64F + VEML6040 and VEML6075 ");
loopsva 0:66a40a792cc9 17 pc.printf(" -> build: " __DATE__ " " __TIME__ "(UTC) K Braun\n");
loopsva 0:66a40a792cc9 18 }
loopsva 0:66a40a792cc9 19
loopsva 0:66a40a792cc9 20 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 21 // initial splash display
loopsva 0:66a40a792cc9 22
loopsva 0:66a40a792cc9 23 void initSplash() {
loopsva 0:66a40a792cc9 24 pc.printf("\r\n\r\n");
loopsva 0:66a40a792cc9 25 pc.printf("--------------------------------------------------------------------------------\r\n");
loopsva 0:66a40a792cc9 26 printBuildDate();
loopsva 0:66a40a792cc9 27 }
loopsva 0:66a40a792cc9 28
loopsva 0:66a40a792cc9 29 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 30 // Show VEML60xx contents
loopsva 0:66a40a792cc9 31
loopsva 0:66a40a792cc9 32 void dispVeml60xx() {
loopsva 0:66a40a792cc9 33 uint16_t rdata = uv.getConfig(uvSTR);
loopsva 0:66a40a792cc9 34 if((rdata & VEML60xx_CONF_BITS_AF) == VEML60xx_CONF_BITS_AF) {
loopsva 0:66a40a792cc9 35 rdata = uv.startAccess(uvSTR);
loopsva 0:66a40a792cc9 36 if(rdata == 0) {
loopsva 0:66a40a792cc9 37 int rcnt = 0;
loopsva 0:66a40a792cc9 38 while(1) {
loopsva 0:66a40a792cc9 39 rdata = uv.getConfig(uvSTR);
loopsva 0:66a40a792cc9 40 if(!((rdata & VEML60xx_CONF_BITS_TRIG) == VEML60xx_CONF_BITS_TRIG)) break;
loopsva 0:66a40a792cc9 41 wait_ms(1);
loopsva 0:66a40a792cc9 42 rcnt++;
loopsva 0:66a40a792cc9 43 if(rcnt > 2000) break;
loopsva 0:66a40a792cc9 44 }
loopsva 0:66a40a792cc9 45 pc.printf("VEML60xx count: %d\r\n", rcnt);
loopsva 0:66a40a792cc9 46 if(rcnt > 2000) return;
loopsva 0:66a40a792cc9 47 } else {
loopsva 0:66a40a792cc9 48 pc.printf("unexpected VEML60xx error : %d\r\n", rdata);
loopsva 0:66a40a792cc9 49 return;
loopsva 0:66a40a792cc9 50 }
loopsva 0:66a40a792cc9 51 }
loopsva 0:66a40a792cc9 52
loopsva 0:66a40a792cc9 53 if(uvSTR.is6075) {
loopsva 0:66a40a792cc9 54 //uv.getRawData(uvSTR);
loopsva 0:66a40a792cc9 55 //uv.convertRawData(uvSTR);
loopsva 0:66a40a792cc9 56 bool chgd = uv.autoAdjustLux(uvSTR);
loopsva 0:66a40a792cc9 57 pc.printf("VEML6075 contents: \r\n");
loopsva 0:66a40a792cc9 58 pc.printf("- id: %04xh\r\n", uvSTR.id);
loopsva 0:66a40a792cc9 59 pc.printf("- conf: %04xh\r\n\r\n", uvSTR.conf_reg);
loopsva 0:66a40a792cc9 60 if(chgd) {
loopsva 0:66a40a792cc9 61 pc.printf("Adjusting Lux level, try again...\r\n");
loopsva 0:66a40a792cc9 62 return;
loopsva 0:66a40a792cc9 63 }
loopsva 0:66a40a792cc9 64 uv.convertRawData(uvSTR);
loopsva 0:66a40a792cc9 65 pc.printf("- uva_d: %04xh\r\n", uvSTR.uva_d);
loopsva 0:66a40a792cc9 66 pc.printf("- dummy_d: %04xh\r\n", uvSTR.dummy_d);
loopsva 0:66a40a792cc9 67 pc.printf("- uvb_d: %04xh\r\n", uvSTR.uvb_d);
loopsva 0:66a40a792cc9 68 pc.printf("- uv_c1: %04xh\r\n", uvSTR.uv_c1);
loopsva 0:66a40a792cc9 69 pc.printf("- uv_c2: %04xh\r\n", uvSTR.uv_c2);
loopsva 0:66a40a792cc9 70 pc.printf("- uva_comp: %.2f\r\n", uvSTR.uva_comp);
loopsva 0:66a40a792cc9 71 pc.printf("- uvb_comp: %.2f\r\n", uvSTR.uvb_comp);
loopsva 0:66a40a792cc9 72 pc.printf("- uv_index: %.2f\r\n", uvSTR.uv_index);
loopsva 0:66a40a792cc9 73 } else
loopsva 0:66a40a792cc9 74 if(uvSTR.is6040) {
loopsva 0:66a40a792cc9 75 //uv.getRawData(uvSTR);
loopsva 0:66a40a792cc9 76 bool chgd = uv.autoAdjustLux(uvSTR);
loopsva 0:66a40a792cc9 77 pc.printf("VEML6040 contents: \r\n");
loopsva 0:66a40a792cc9 78 pc.printf("- id: %04xh\r\n", uvSTR.id);
loopsva 0:66a40a792cc9 79 pc.printf("- conf: %04xh\r\n", uvSTR.conf_reg);
loopsva 0:66a40a792cc9 80 pc.printf("- lux_step: %.6f\r\n\r\n", uvSTR.lux_step);
loopsva 0:66a40a792cc9 81 if(chgd) {
loopsva 0:66a40a792cc9 82 pc.printf("Adjusting Lux level, try again...\r\n");
loopsva 0:66a40a792cc9 83 return;
loopsva 0:66a40a792cc9 84 }
loopsva 0:66a40a792cc9 85 pc.printf("- r_d: %04xh %5dd %9.3f Lux\r\n", uvSTR.r_d, uvSTR.r_d, (double)uvSTR.r_d * uvSTR.lux_step);
loopsva 0:66a40a792cc9 86 pc.printf("- g_d: %04xh %5dd %9.3f Lux\r\n", uvSTR.g_d, uvSTR.g_d, (double)uvSTR.g_d * uvSTR.lux_step);
loopsva 0:66a40a792cc9 87 pc.printf("- b_d: %04xh %5dd %9.3f Lux\r\n", uvSTR.b_d, uvSTR.b_d, (double)uvSTR.b_d * uvSTR.lux_step);
loopsva 0:66a40a792cc9 88 pc.printf("- w_d: %04xh %5dd %9.3f Lux\r\n", uvSTR.w_d, uvSTR.w_d, (double)uvSTR.w_d * uvSTR.lux_step);
loopsva 0:66a40a792cc9 89 if((uvSTR.r_d == 65535) || (uvSTR.g_d == 65535) || (uvSTR.b_d == 65535) || (uvSTR.w_d == 65535)) pc.printf("*** overflow!!!\r\n");
loopsva 0:66a40a792cc9 90 } else {
loopsva 0:66a40a792cc9 91 pc.printf("No VEML60xx device detected...\r\n");
loopsva 0:66a40a792cc9 92 }
loopsva 0:66a40a792cc9 93 }
loopsva 0:66a40a792cc9 94
loopsva 0:66a40a792cc9 95 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 96 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 97
loopsva 0:66a40a792cc9 98 int main() {
loopsva 0:66a40a792cc9 99 pc.baud(230400);
loopsva 0:66a40a792cc9 100 initSplash();
loopsva 0:66a40a792cc9 101
loopsva 0:66a40a792cc9 102 //set up the light sensor - UV or RGBW
loopsva 0:66a40a792cc9 103 pc.printf("Initializing the VEML60xx Opto Sensor...\r\n");
loopsva 0:66a40a792cc9 104 uv.setConfig(uvSTR, VEML60xx_CONF_BITS_IT_400m320m);
loopsva 0:66a40a792cc9 105 //uv.setConfig(uvSTR, VEML60xx_CONF_BITS_IT_400m320m | VEML60xx_CONF_BITS_AF);
loopsva 0:66a40a792cc9 106 //uv.setConfig(uvSTR, VEML60xx_CONF_BITS_IT_400m320m | VEML6075_CONF_BITS_HD | VEML60xx_CONF_BITS_AF);
loopsva 0:66a40a792cc9 107 pc.printf("- VEML60xx device ID: 0x%04x CONF: 0x%04x\r\n", uv.getID(uvSTR), uvSTR.conf_reg);
loopsva 0:66a40a792cc9 108
loopsva 0:66a40a792cc9 109 while(1) {
loopsva 0:66a40a792cc9 110 wait(2.0);
loopsva 0:66a40a792cc9 111 dispVeml60xx();
loopsva 0:66a40a792cc9 112 }
loopsva 0:66a40a792cc9 113 }