forked from RIOT-OS/RIOT
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
148 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,15 @@ | ||
# About | ||
|
||
This is a manual test application for the CCS811 driver. It shows how the | ||
sensor can be used for periodic polling as well as with interrupts. | ||
|
||
# Usage | ||
|
||
The test application demonstrates the use of the CCS811. It uses the default | ||
configuration parameters, that is, the measurement mode | ||
```CCS811_MODE_1S``` with one measurement per second. | ||
|
||
The application can use both approaches to wait for new data: | ||
|
||
1. using the data-ready interrupt (```CCS811_INT_DATA_READY```): | ||
``` | ||
#define USE_CSS811_DATA_READY_INT (1) | ||
``` | ||
The test application demonstrates the use of the CCS811 using | ||
|
||
2. using the data-ready status function (```ccs811_data_ready```) | ||
``` | ||
#define USE_CSS811_DATA_READY_INT (0) | ||
``` | ||
- data-ready status function ```ccs811_data_ready``` to wait for new data and | ||
- default configuration parameters, that is, the measurement mode | ||
```CCS811_MODE_1S``` with one measurement per second. | ||
|
||
If data-ready interrupts are used, the default configuration parameter for the | ||
interrupt pin can be overriden by ```CCS811_PARAM_INT_PIN``` before | ||
```ccs811_params.h``` is included. | ||
``` | ||
#define CCS811_PARAM_INT_PIN (GPIO_PIN(0, 12)) | ||
``` | ||
Please refer ```$(RIOTBASE)/tests/driver_ccs811_full``` to learn how | ||
to use the CCS811 with interrupts. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
include ../Makefile.tests_common | ||
|
||
USEMODULE += ccs811_full | ||
|
||
include $(RIOTBASE)/Makefile.include |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# About | ||
|
||
This is a manual test application for the CCS811 driver. It shows how the | ||
sensor can be used for periodic polling as well as with interrupts. | ||
|
||
# Usage | ||
|
||
The test application demonstrates the use of the CCS811 and pseudomodule | ||
```ccs811_full``` using | ||
|
||
- data-ready interrupt ```CCS811_INT_DATA_READY``` and | ||
- default configuration parameters, that is, the measurement mode | ||
```CCS811_MODE_1S``` with one measurement per second. | ||
|
||
The default configuration parameter for the interrupt pin has to be | ||
overridden according to the hardware configuration by defining | ||
```CCS811_PARAM_INT_PIN``` before ```ccs811_params.h``` is included, e.g., | ||
``` | ||
#define CCS811_PARAM_INT_PIN (GPIO_PIN(0, 7)) | ||
``` | ||
or via the CFLAGS variable in the make command. | ||
``` | ||
CFLAGS="-DCCS811_PARAM_INT_PIN=\(GPIO_PIN\(0,7\)\)" make -C tests/driver_ccs811 BOARD=... | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* Copyright (C) 2018 Gunar Schorcht | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
|
||
/** | ||
* @ingroup tests | ||
* @brief Test application for the AMS CCS811 device driver | ||
* @author Gunar Schorcht <gunar@schorcht.net> | ||
* @file | ||
* | ||
* The test application demonstrates the use of the CCS811 and pseudomodule | ||
* ```ccs811_full``` using | ||
* | ||
* - data-ready interrupt ```CCS811_INT_DATA_READY``` and | ||
* - default configuration parameters, that is, the measurement mode | ||
* ```CCS811_MODE_1S``` with one measurement per second. | ||
* | ||
* The default configuration parameter for the interrupt pin has to be | ||
* overridden according to the hardware configuration by defining | ||
* ```CCS811_PARAM_INT_PIN``` before ```ccs811_params.h``` is included, e.g., | ||
* ``` | ||
* #define CCS811_PARAM_INT_PIN (GPIO_PIN(0, 7)) | ||
* ``` | ||
* or via the CFLAGS variable in the make command. | ||
* ``` | ||
* CFLAGS="-DCCS811_PARAM_INT_PIN=\(GPIO_PIN\(0,7\)\)" make -C tests/driver_ccs811 BOARD=... | ||
* ``` | ||
*/ | ||
|
||
#include <stdio.h> | ||
#include <string.h> | ||
|
||
#include "thread.h" | ||
#include "xtimer.h" | ||
|
||
#include "ccs811.h" | ||
#include "ccs811_params.h" | ||
|
||
kernel_pid_t p_main; | ||
|
||
static void ccs811_isr (void *arg) | ||
{ | ||
/* send a message to trigger main thread to handle the interrupt */ | ||
msg_t msg; | ||
msg_send(&msg, p_main); | ||
} | ||
|
||
int main(void) | ||
{ | ||
ccs811_t sensor; | ||
|
||
puts("CCS811 test application\n"); | ||
|
||
printf("+------------Initializing------------+\n"); | ||
|
||
/* initialize the sensor with default configuration parameters */ | ||
if (ccs811_init (&sensor, &ccs811_params[0]) != CCS811_OK) { | ||
puts("Initialization failed\n"); | ||
return 1; | ||
} | ||
|
||
/* initialize the interrupt pin */ | ||
gpio_init_int (ccs811_params[0].int_pin, GPIO_IN, GPIO_FALLING, | ||
ccs811_isr, 0); | ||
|
||
/* activate data ready interrupt */ | ||
if (ccs811_set_int_mode (&sensor, CCS811_INT_DATA_READY) != CCS811_OK) { | ||
puts("Activating interrupt failed\n"); | ||
return 1; | ||
} | ||
|
||
/* save the pid of main thread */ | ||
p_main = sched_active_pid; | ||
|
||
printf("\n+--------Starting Measurements--------+\n"); | ||
|
||
while (1) { | ||
|
||
uint16_t tvoc; | ||
uint16_t eco2; | ||
|
||
/* wait for data ready interrupt */ | ||
msg_t msg; | ||
msg_receive(&msg); | ||
|
||
/* read the data */ | ||
if (ccs811_read_iaq(&sensor, &tvoc, &eco2, 0, 0) != CCS811_OK) { | ||
/* print values */ | ||
printf("TVOC [ppb]: %d\neCO2 [ppm]: %d\n", tvoc, eco2); | ||
puts("+-------------------------------------+"); | ||
} | ||
else { | ||
printf("Could not read data from sensor\n"); | ||
} | ||
} | ||
|
||
return 0; | ||
} |