Demonstration program for the VEML6040 and VEML6075 optical sensors

Dependencies:   VEML60xx mbed

Committer:
loopsva
Date:
Tue Apr 26 18:20:00 2016 +0000
Revision:
2:9726fbb6f331
Parent:
1:cb3f098cfa62
Child:
4:28b380ba35e4
minor bug fix in main()

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 1:cb3f098cfa62 9 veml60xx veml(SDA0, SCL0, 400000); //UV sensor
loopsva 1:cb3f098cfa62 10 veml60xx::veml60xx_struct vemlSTR = {}; //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 1:cb3f098cfa62 32 int cnt = 0;
loopsva 1:cb3f098cfa62 33
loopsva 0:66a40a792cc9 34 void dispVeml60xx() {
loopsva 1:cb3f098cfa62 35 uint16_t rdata = veml.getConfig(vemlSTR);
loopsva 0:66a40a792cc9 36 if((rdata & VEML60xx_CONF_BITS_AF) == VEML60xx_CONF_BITS_AF) {
loopsva 1:cb3f098cfa62 37 rdata = veml.startAccess(vemlSTR);
loopsva 0:66a40a792cc9 38 if(rdata == 0) {
loopsva 0:66a40a792cc9 39 int rcnt = 0;
loopsva 0:66a40a792cc9 40 while(1) {
loopsva 1:cb3f098cfa62 41 rdata = veml.getConfig(vemlSTR);
loopsva 0:66a40a792cc9 42 if(!((rdata & VEML60xx_CONF_BITS_TRIG) == VEML60xx_CONF_BITS_TRIG)) break;
loopsva 1:cb3f098cfa62 43 #ifdef RTOS_H
loopsva 1:cb3f098cfa62 44 Thread::wait(1);
loopsva 1:cb3f098cfa62 45 #else
loopsva 0:66a40a792cc9 46 wait_ms(1);
loopsva 1:cb3f098cfa62 47 #endif
loopsva 0:66a40a792cc9 48 rcnt++;
loopsva 0:66a40a792cc9 49 if(rcnt > 2000) break;
loopsva 0:66a40a792cc9 50 }
loopsva 0:66a40a792cc9 51 pc.printf("VEML60xx count: %d\r\n", rcnt);
loopsva 0:66a40a792cc9 52 if(rcnt > 2000) return;
loopsva 0:66a40a792cc9 53 } else {
loopsva 0:66a40a792cc9 54 pc.printf("unexpected VEML60xx error : %d\r\n", rdata);
loopsva 0:66a40a792cc9 55 return;
loopsva 0:66a40a792cc9 56 }
loopsva 0:66a40a792cc9 57 }
loopsva 1:cb3f098cfa62 58
loopsva 1:cb3f098cfa62 59 cnt++;
loopsva 1:cb3f098cfa62 60 //NOTE: 6040 is auto adjust, 6075 is manual with "opto 0" to "opto 4" cli command. 4 = highest resolution
loopsva 1:cb3f098cfa62 61 if(vemlSTR.is6075) {
loopsva 1:cb3f098cfa62 62 veml.getRawData(vemlSTR);
loopsva 1:cb3f098cfa62 63 bool chgd = false;
loopsva 1:cb3f098cfa62 64 //bool chgd = veml.autoAdjustLux(vemlSTR);
loopsva 1:cb3f098cfa62 65 pc.printf("\r\nVEML6075 contents, count: %6d\r\n", cnt);
loopsva 1:cb3f098cfa62 66 pc.printf("- id: %04xh\r\n", vemlSTR.id);
loopsva 1:cb3f098cfa62 67 pc.printf("- conf: %04xh\r\n", vemlSTR.conf_reg);
loopsva 1:cb3f098cfa62 68 pc.printf("- uva_step: %.6f\r\n", vemlSTR.uva_step);
loopsva 1:cb3f098cfa62 69 pc.printf("- uvb_step: %.6f\r\n\r\n", vemlSTR.uvb_step);
loopsva 0:66a40a792cc9 70 if(chgd) {
loopsva 0:66a40a792cc9 71 pc.printf("Adjusting Lux level, try again...\r\n");
loopsva 0:66a40a792cc9 72 return;
loopsva 0:66a40a792cc9 73 }
loopsva 1:cb3f098cfa62 74 veml.convertRawData(vemlSTR);
loopsva 1:cb3f098cfa62 75 pc.printf("- uva_d: %04xh\r\n", vemlSTR.uva_d);
loopsva 1:cb3f098cfa62 76 pc.printf("- uvb_d: %04xh\r\n", vemlSTR.uvb_d);
loopsva 1:cb3f098cfa62 77 pc.printf("- dummy_d: %04xh\r\n", vemlSTR.dummy_d);
loopsva 1:cb3f098cfa62 78 pc.printf("- uv_c1: %04xh\r\n", vemlSTR.uv_c1);
loopsva 1:cb3f098cfa62 79 pc.printf("- uv_c2: %04xh\r\n", vemlSTR.uv_c2);
loopsva 1:cb3f098cfa62 80 pc.printf("- uva_comp: %.2f\r\n", vemlSTR.uva_comp);
loopsva 1:cb3f098cfa62 81 pc.printf("- uvb_comp: %.2f\r\n", vemlSTR.uvb_comp);
loopsva 1:cb3f098cfa62 82 pc.printf("- uv_index: %.2f\r\n", vemlSTR.uv_index);
loopsva 1:cb3f098cfa62 83 if((vemlSTR.uva_d == 65535) || (vemlSTR.uvb_d == 65535)) pc.printf("*** UV overflow!!!\r\n");
loopsva 0:66a40a792cc9 84 } else
loopsva 1:cb3f098cfa62 85 if(vemlSTR.is6040) {
loopsva 1:cb3f098cfa62 86 //veml.getRawData(vemlSTR);
loopsva 1:cb3f098cfa62 87 bool chgd = veml.autoAdjustLux(vemlSTR);
loopsva 1:cb3f098cfa62 88 pc.printf("\r\nVEML6040 contents, count: %6d\r\n", cnt);
loopsva 1:cb3f098cfa62 89 pc.printf("- id: %04xh\r\n", vemlSTR.id);
loopsva 1:cb3f098cfa62 90 pc.printf("- conf: %04xh\r\n", vemlSTR.conf_reg);
loopsva 1:cb3f098cfa62 91 pc.printf("- lux_step: %.6f\r\n\r\n", vemlSTR.lux_step);
loopsva 0:66a40a792cc9 92 if(chgd) {
loopsva 0:66a40a792cc9 93 pc.printf("Adjusting Lux level, try again...\r\n");
loopsva 0:66a40a792cc9 94 return;
loopsva 0:66a40a792cc9 95 }
loopsva 1:cb3f098cfa62 96 veml.convertRawData(vemlSTR);
loopsva 1:cb3f098cfa62 97 pc.printf("- r_d: %04xh %5dd %9.3f Lux\r\n", vemlSTR.r_d, vemlSTR.r_d, vemlSTR.r_lux);
loopsva 1:cb3f098cfa62 98 pc.printf("- g_d: %04xh %5dd %9.3f Lux\r\n", vemlSTR.g_d, vemlSTR.g_d, vemlSTR.g_lux);
loopsva 1:cb3f098cfa62 99 pc.printf("- b_d: %04xh %5dd %9.3f Lux\r\n", vemlSTR.b_d, vemlSTR.b_d, vemlSTR.b_lux);
loopsva 1:cb3f098cfa62 100 pc.printf("- w_d: %04xh %5dd %9.3f Lux\r\n", vemlSTR.w_d, vemlSTR.w_d, vemlSTR.w_lux);
loopsva 1:cb3f098cfa62 101 if((vemlSTR.r_d == 65535) || (vemlSTR.g_d == 65535) || (vemlSTR.b_d == 65535) || (vemlSTR.w_d == 65535)) pc.printf("*** RGBW overflow!!!\r\n");
loopsva 0:66a40a792cc9 102 } else {
loopsva 0:66a40a792cc9 103 pc.printf("No VEML60xx device detected...\r\n");
loopsva 0:66a40a792cc9 104 }
loopsva 0:66a40a792cc9 105 }
loopsva 0:66a40a792cc9 106
loopsva 1:cb3f098cfa62 107
loopsva 1:cb3f098cfa62 108
loopsva 0:66a40a792cc9 109 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 110 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:66a40a792cc9 111
loopsva 0:66a40a792cc9 112 int main() {
loopsva 0:66a40a792cc9 113 pc.baud(230400);
loopsva 0:66a40a792cc9 114 initSplash();
loopsva 0:66a40a792cc9 115
loopsva 0:66a40a792cc9 116 //set up the light sensor - UV or RGBW
loopsva 0:66a40a792cc9 117 pc.printf("Initializing the VEML60xx Opto Sensor...\r\n");
loopsva 1:cb3f098cfa62 118 veml.setConfig(vemlSTR, VEML60xx_CONF_BITS_IT_400m320m);
loopsva 1:cb3f098cfa62 119 //veml.setConfig(vemlSTR, VEML60xx_CONF_BITS_IT_400m320m | VEML60xx_CONF_BITS_AF);
loopsva 1:cb3f098cfa62 120 //veml.setConfig(vemlSTR, VEML60xx_CONF_BITS_IT_400m320m | VEML6075_CONF_BITS_HD | VEML60xx_CONF_BITS_AF);
loopsva 1:cb3f098cfa62 121 veml.getID(vemlSTR);
loopsva 1:cb3f098cfa62 122 if(vemlSTR.is6040) pc.printf("- VEML6040 device ID: 0x%04x CONF: 0x%04x\r\n", vemlSTR.id, vemlSTR.conf_reg);
loopsva 1:cb3f098cfa62 123 if(vemlSTR.is6075) pc.printf("- VEML6075 device ID: 0x%04x CONF: 0x%04x\r\n", vemlSTR.id, vemlSTR.conf_reg);
loopsva 2:9726fbb6f331 124 if((!(vemlSTR.is6040)) && (!(vemlSTR.is6075))) pc.printf("- VEML60xx device ID: 0x%04x CONF: 0x%04x\r\n", vemlSTR.id, vemlSTR.conf_reg);
loopsva 0:66a40a792cc9 125
loopsva 0:66a40a792cc9 126 while(1) {
loopsva 0:66a40a792cc9 127 wait(2.0);
loopsva 0:66a40a792cc9 128 dispVeml60xx();
loopsva 0:66a40a792cc9 129 }
loopsva 0:66a40a792cc9 130 }