Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MAX30101 mbed vt100
Diff: main.cpp
- Revision:
- 3:f3d19ad49aee
- Parent:
- 1:fd8bee9b3647
--- a/main.cpp Mon Mar 27 07:34:32 2017 +0000
+++ b/main.cpp Mon May 01 00:58:26 2017 +0000
@@ -18,6 +18,30 @@
MAX30101 *max30101 = 0 ;
InterruptIn *int0 ;
+/* data read test following the pseudo code
+ * written in the datasheet
+ */
+void doPseudo(void)
+{
+ uint32_t data[3] ;
+ uint8_t fifo_wr_ptr, fifo_rd_ptr ;
+ int num_available_samples = 0 ;
+// int num_samples_to_read = 0 ;
+ int i ;
+
+ fifo_wr_ptr = max30101->getFIFO_WR_PTR() ;
+ fifo_rd_ptr = max30101->getFIFO_RD_PTR() ;
+ num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ;
+ printf("=== %d data ===\n", num_available_samples) ;
+ for (i = 0 ; i < num_available_samples ; i++ ) {
+ data[0] = max30101->readFIFO() ; /* LED1 */
+ data[1] = max30101->readFIFO() ; /* LED2 */
+ data[2] = max30101->readFIFO() ; /* LED3 */
+ printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n",
+ data[0], data[1], data[2]) ;
+ }
+}
+
void initSPO2(void)
{
uint8_t config_byte = 0 ;
@@ -97,6 +121,7 @@
}
if (flag & INT_ST_PPG_RGY) { /* New FIFO Data Ready */
printf("New FIFO Data Ready\n") ;
+ doPseudo() ;
}
if (flag & INT_ST_ALC_OVF) { /* Ambient Light Cancellaration Overflow */
printf("Ambient Light Cancellaration Overflow\n") ;
@@ -164,17 +189,17 @@
mode =
// (0x02 << 5) /* SMP_AVE = 2 -> avarage of 4 data */
(0x05 << 5) /* SMP_AVE = 5 -> avarage of 32 data */
-// | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */
- | (0x00 << 4) /* FIFO_ROLLOVER_EN = 0 */
+ | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */
+// | (0x00 << 4) /* FIFO_ROLLOVER_EN = 0 */
| (0x0C) /* FIFO ALMOST FULL at 12 (0x0C) */
;
max30101->setFIFO_CONFIG(mode) ;
max30101->setLED1_PA(0x80) ;
max30101->setLED2_PA(0x80) ;
-// max30101->setLED3_PA(0x80) ;
-// max30101->setPILOT_PA(0x80) ;
-#if 0
+ max30101->setLED3_PA(0x80) ;
+ max30101->setPILOT_PA(0x80) ;
+#if 1
slot_config =
(0x02 << 24) /* SLOT2 LED2(IR) */
| (0x01 << 16) /* SLOT1 LED1(RED) */
@@ -187,8 +212,6 @@
max30101->setPROX_INT_THR(mode) ;
// max30101->setIntEnable(0xF002) ;
-
-
}
void reportID(void)
@@ -199,31 +222,6 @@
printf("MAX30101 ID: 0x%02X, Rev: 0x%02X\n", id, rev) ;
}
-
-/* data read test following the pseudo code
- * written in the datasheet
- */
-void doPseudo(void)
-{
- uint32_t data[3] ;
- uint8_t fifo_wr_ptr, fifo_rd_ptr ;
- int num_available_samples = 0 ;
-// int num_samples_to_read = 0 ;
- int i ;
-
- fifo_wr_ptr = max30101->getFIFO_WR_PTR() ;
- fifo_rd_ptr = max30101->getFIFO_RD_PTR() ;
- num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ;
- printf("=== %d data ===\n", num_available_samples) ;
- for (i = 0 ; i < num_available_samples ; i++ ) {
- data[0] = max30101->readFIFO() ; /* LED1 */
- data[1] = max30101->readFIFO() ; /* LED2 */
- data[2] = max30101->readFIFO() ; /* LED3 */
- printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n",
- data[0], data[1], data[2]) ;
- }
-}
-
void doInt(void)
{
uint16_t flag ;
@@ -261,22 +259,22 @@
init() ;
- printf("%s : %s\n", BOARD_NAME, __DATE__) ;
+ printf("test MAX30101 for %s (%s)\n", BOARD_NAME, __DATE__) ;
reportID() ;
initSPO2() ;
int0->fall(&SPO2_isr) ;
max30101->setMODE_CONFIG(MODE_SPO2) ;
- max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY ) ;
+ max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY | INT_ST_PPG_RGY ) ;
int_config = max30101->getIntEnable() ;
printf("Int enable: 0x%04X\n", int_config) ;
- flag = max30101->getIntStatus() ;
+ printf("Temperature, Interrupt flags\n") ;
while(1) {
max30101->setTEMP_EN() ; /* trigger temperature read */
temp = max30101->getTEMP() ;
flag = max30101->getIntStatus() ;
- printf("Temp = %.2f interrupt flags = 0x%02X\n", temp, flag) ;
+ printf("%.2f, 0x%02X\n", temp, flag) ;
wait(1) ;
}
}