Kevin Braun
/
vmel60xx_hello_world
Demonstration program for the VEML6040 and VEML6075 optical sensors
main.cpp@0:66a40a792cc9, 2016-04-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |