You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

76 lines
1.9 KiB

/*
* Copyright (C) 2017 Inria
*
* 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 drivers_veml6070
* @{
*
* @file
* @brief Device driver implementation for the VEML6070 UV sensor.
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*
* @}
*/
#include <math.h>
#include "log.h"
#include "veml6070.h"
#include "veml6070_params.h"
#include "periph/i2c.h"
#include "xtimer.h"
#define ENABLE_DEBUG (0)
#include "debug.h"
#define VEML6070_ADDRH (0x39)
#define VEML6070_ADDRL (0x38)
/*---------------------------------------------------------------------------*
* VEML6070 Core API *
*---------------------------------------------------------------------------*/
int veml6070_init(veml6070_t *dev, const veml6070_params_t * params)
{
dev->params = *params;
/* Initialize I2C interface */
if (i2c_init_master(dev->params.i2c_dev, I2C_SPEED_NORMAL)) {
DEBUG("[Error] I2C device not enabled\n");
return -VEML6070_ERR_I2C;
}
/* Acquire exclusive access */
i2c_acquire(dev->params.i2c_dev);
i2c_write_byte(dev->params.i2c_dev, VEML6070_ADDRL,
(uint8_t)(dev->params.itime << 2) | 0x02);
/* Release I2C device */
i2c_release(dev->params.i2c_dev);
return VEML6070_OK;
}
uint16_t veml6070_read_uv(veml6070_t *dev)
{
/* Acquire exclusive access */
i2c_acquire(dev->params.i2c_dev);
uint8_t buffer[2];
i2c_read_byte(dev->params.i2c_dev, VEML6070_ADDRL, &buffer[0]);
i2c_read_byte(dev->params.i2c_dev, VEML6070_ADDRH, &buffer[1]);
uint16_t uv = (uint16_t)(buffer[1] << 8) | buffer[0];
/* Release I2C device */
i2c_release(dev->params.i2c_dev);
return uv;
}