/* * 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 * @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 #include #include "thread.h" #include "xtimer.h" #include "ccs811.h" #include "ccs811_params.h" kernel_pid_t p_main; static void ccs811_isr (void *arg) { (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 = thread_getpid(); 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; }