Proximity / Ambient Light Sensor LED Demo
Dependencies: MAX44000 nexpaq_mdk
Fork of ALS_Prox_Demo by
ALS Prox Demo
MAX32625NEXPAQ development module
This project is a demonstration application for the MAX32625NEXPAQ development module. You will need the nexpaq application and a compatible phone to run this demo, along with the MAX44000PMB1# peripheral module. This project demonstrates polling the proximity sensor to use it like a button and also polling the ambient light sensor and sending the information back to the application running on the phone, and the phone controlling the threshold for the proximity sensor and controlling the on board RGB LED to create different colors.
Go to the nexpaq developers hub for details on how to load the code for the tile into the application.
Resources
- nexpaq App Tile Files: als_prox_demo.zip
- MAX44000PMB1# product page: www.maximintegrated.com/max44000pmb1
- nexpaq website: nexpaq.com
- nexpaq App download: nexpaq.com/app
- nexpaq Developer hub: developers.nexpaq.com/max-development
main.cpp@13:f93636433fa3, 2017-02-04 (annotated)
- Committer:
- switches
- Date:
- Sat Feb 04 03:31:29 2017 +0000
- Revision:
- 13:f93636433fa3
- Parent:
- 10:a81682ee3e73
Replaced development library with official mbed libarary
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nexpaq | 0:b86eda0e990d | 1 | #include "mbed.h" |
nexpaq | 0:b86eda0e990d | 2 | #include "nexpaq_mdk.h" |
nexpaq | 5:7d8e69b1d3b6 | 3 | #include "MAX44000.h" |
nexpaq | 0:b86eda0e990d | 4 | |
nexpaq | 5:7d8e69b1d3b6 | 5 | MAX44000 max44000(P1_6, P1_7); |
nexpaq | 8:123fe6112b7a | 6 | PwmOut ledR(P2_4); |
nexpaq | 8:123fe6112b7a | 7 | PwmOut ledG(P2_5); |
nexpaq | 8:123fe6112b7a | 8 | PwmOut ledB(P2_6); |
nexpaq | 0:b86eda0e990d | 9 | DigitalIn button(P0_1, PullUp); |
nexpaq | 0:b86eda0e990d | 10 | |
nexpaq | 0:b86eda0e990d | 11 | /***** Definitions *****/ |
nexpaq | 6:eb5c0139e5db | 12 | #define FUNCTION_TABLE_NUM 2 |
nexpaq | 6:eb5c0139e5db | 13 | #define UUID_NUM 16 // UUID number is 16, don't change it |
nexpaq | 4:494741f7f5b2 | 14 | #define LOOP_DELAY 100 |
nexpaq | 10:a81682ee3e73 | 15 | #define PROX_THRESHOLD 10 |
nexpaq | 6:eb5c0139e5db | 16 | #define ALS_INTERVAL 10 // about once per second |
nexpaq | 0:b86eda0e990d | 17 | |
nexpaq | 0:b86eda0e990d | 18 | /***** Globals *****/ |
nexpaq | 0:b86eda0e990d | 19 | void my_function_CMD_2700(unsigned char *pData, unsigned char len); |
nexpaq | 6:eb5c0139e5db | 20 | void my_function_CMD_2702(unsigned char *pData, unsigned char len); |
nexpaq | 0:b86eda0e990d | 21 | const MDK_REGISTER_CMD my_cmd_func_table[FUNCTION_TABLE_NUM] = { |
nexpaq | 6:eb5c0139e5db | 22 | {0x2700, my_function_CMD_2700}, // Command -> function |
nexpaq | 6:eb5c0139e5db | 23 | {0x2702, my_function_CMD_2702}, // Command -> function |
nexpaq | 0:b86eda0e990d | 24 | }; |
nexpaq | 0:b86eda0e990d | 25 | |
nexpaq | 6:eb5c0139e5db | 26 | int alsCnt = 0; |
nexpaq | 6:eb5c0139e5db | 27 | int prxThrsh = PROX_THRESHOLD ; |
nexpaq | 5:7d8e69b1d3b6 | 28 | int lastPrx = 0; |
nexpaq | 5:7d8e69b1d3b6 | 29 | unsigned char prxPress = 0x02; |
gsteiert | 3:9d15891f9352 | 30 | int lastBtn = 1; |
nexpaq | 0:b86eda0e990d | 31 | unsigned char btnPress = 0x01; |
nexpaq | 0:b86eda0e990d | 32 | |
nexpaq | 0:b86eda0e990d | 33 | /***** Functions *****/ |
nexpaq | 6:eb5c0139e5db | 34 | void my_function_CMD_2700(unsigned char *pData, unsigned char len) |
nexpaq | 6:eb5c0139e5db | 35 | { |
nexpaq | 6:eb5c0139e5db | 36 | unsigned char response = 0x00; |
nexpaq | 8:123fe6112b7a | 37 | ledR = 1.0f - (pData[0] / 255.0f); |
nexpaq | 8:123fe6112b7a | 38 | ledG = 1.0f - (pData[1] / 255.0f); |
nexpaq | 8:123fe6112b7a | 39 | ledB = 1.0f - (pData[2] / 255.0f); |
nexpaq | 6:eb5c0139e5db | 40 | np_api_upload(0x2701, &response, 1); |
nexpaq | 6:eb5c0139e5db | 41 | } |
nexpaq | 6:eb5c0139e5db | 42 | |
nexpaq | 6:eb5c0139e5db | 43 | void my_function_CMD_2702(unsigned char *pData, unsigned char len) |
nexpaq | 6:eb5c0139e5db | 44 | { |
nexpaq | 6:eb5c0139e5db | 45 | unsigned char response = 0x00; |
nexpaq | 6:eb5c0139e5db | 46 | prxThrsh = pData[0] ; |
nexpaq | 6:eb5c0139e5db | 47 | np_api_upload(0x2703, &response, 1); |
nexpaq | 6:eb5c0139e5db | 48 | } |
nexpaq | 6:eb5c0139e5db | 49 | |
nexpaq | 6:eb5c0139e5db | 50 | void sendALS() |
nexpaq | 6:eb5c0139e5db | 51 | { |
nexpaq | 6:eb5c0139e5db | 52 | unsigned char pData[3]; |
nexpaq | 9:b7cf4b7fd770 | 53 | max44000.writeReg(MAX44000::REG_MAIN_CONFIG, 0x20); |
nexpaq | 6:eb5c0139e5db | 54 | pData[0] = 10; |
nexpaq | 6:eb5c0139e5db | 55 | pData[1] = max44000.readReg(MAX44000::REG_ALS_DATA_HIGH); |
nexpaq | 6:eb5c0139e5db | 56 | pData[2] = max44000.readReg(MAX44000::REG_ALS_DATA_LOW); |
nexpaq | 6:eb5c0139e5db | 57 | np_api_upload(0x2800, pData, 3); |
nexpaq | 9:b7cf4b7fd770 | 58 | max44000.writeReg(MAX44000::REG_MAIN_CONFIG, 0x30); |
nexpaq | 0:b86eda0e990d | 59 | } |
nexpaq | 0:b86eda0e990d | 60 | |
nexpaq | 0:b86eda0e990d | 61 | /******************************************************************************/ |
nexpaq | 6:eb5c0139e5db | 62 | void app_setup() |
nexpaq | 6:eb5c0139e5db | 63 | { |
nexpaq | 6:eb5c0139e5db | 64 | // np_api_set_app_version(0, 0, 3); |
nexpaq | 6:eb5c0139e5db | 65 | if ( np_api_register((MDK_REGISTER_CMD*)my_cmd_func_table, FUNCTION_TABLE_NUM) == MDK_REGISTER_FAILD ) { |
nexpaq | 6:eb5c0139e5db | 66 | // Register failed handle code |
nexpaq | 6:eb5c0139e5db | 67 | } |
nexpaq | 10:a81682ee3e73 | 68 | max44000.init(MAX44000::MODE_ALS_PROX, MAX44000::ALSTIM_64X, MAX44000::ALSPGA_1X, MAX44000::DRV_10); |
nexpaq | 8:123fe6112b7a | 69 | ledR = 1.0f; |
nexpaq | 8:123fe6112b7a | 70 | ledG = 1.0f; |
nexpaq | 8:123fe6112b7a | 71 | ledB = 1.0f; |
nexpaq | 0:b86eda0e990d | 72 | } |
nexpaq | 0:b86eda0e990d | 73 | |
nexpaq | 6:eb5c0139e5db | 74 | void app_loop() |
nexpaq | 6:eb5c0139e5db | 75 | { |
nexpaq | 5:7d8e69b1d3b6 | 76 | int proxData = max44000.readReg(MAX44000::REG_PRX_DATA); |
nexpaq | 6:eb5c0139e5db | 77 | if (proxData > prxThrsh) { |
nexpaq | 9:b7cf4b7fd770 | 78 | if (!lastPrx) { |
nexpaq | 5:7d8e69b1d3b6 | 79 | np_api_upload(0x2800, &prxPress, 1); |
nexpaq | 5:7d8e69b1d3b6 | 80 | } |
nexpaq | 5:7d8e69b1d3b6 | 81 | lastPrx = 1; |
nexpaq | 5:7d8e69b1d3b6 | 82 | } else { |
nexpaq | 9:b7cf4b7fd770 | 83 | lastPrx = 0; |
nexpaq | 5:7d8e69b1d3b6 | 84 | } |
nexpaq | 5:7d8e69b1d3b6 | 85 | |
nexpaq | 9:b7cf4b7fd770 | 86 | if (!button && lastBtn) { |
gsteiert | 3:9d15891f9352 | 87 | np_api_upload(0x2800, &btnPress, 1); |
nexpaq | 9:b7cf4b7fd770 | 88 | } |
nexpaq | 9:b7cf4b7fd770 | 89 | lastBtn = button; |
nexpaq | 6:eb5c0139e5db | 90 | |
nexpaq | 6:eb5c0139e5db | 91 | alsCnt += 1; |
nexpaq | 6:eb5c0139e5db | 92 | if (alsCnt > ALS_INTERVAL) { |
nexpaq | 6:eb5c0139e5db | 93 | sendALS(); |
nexpaq | 6:eb5c0139e5db | 94 | alsCnt = 0; |
nexpaq | 6:eb5c0139e5db | 95 | } |
nexpaq | 0:b86eda0e990d | 96 | } |
nexpaq | 0:b86eda0e990d | 97 | |
nexpaq | 6:eb5c0139e5db | 98 | int main(void) |
nexpaq | 6:eb5c0139e5db | 99 | { |
nexpaq | 6:eb5c0139e5db | 100 | np_api_init(); |
nexpaq | 6:eb5c0139e5db | 101 | app_setup(); |
nexpaq | 6:eb5c0139e5db | 102 | np_api_start(); |
nexpaq | 6:eb5c0139e5db | 103 | while(1) { |
nexpaq | 6:eb5c0139e5db | 104 | app_loop(); |
nexpaq | 6:eb5c0139e5db | 105 | np_api_bsl_chk(); |
nexpaq | 6:eb5c0139e5db | 106 | Thread::wait(LOOP_DELAY); |
nexpaq | 6:eb5c0139e5db | 107 | } |
nexpaq | 6:eb5c0139e5db | 108 | return 0; |
nexpaq | 0:b86eda0e990d | 109 | } |