1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/tests/drivers/ccs811_full/main.c

103 lines
2.7 KiB
C

/*
* 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/drivers/ccs811_full BOARD=...
* ```
*/
#include <stdio.h>
#include <string.h>
#include "thread.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;
}