Thermometer indicating temperature and humidity by LED blink pattern

Dependencies:   BLE_API mbed nRF51822

Committer:
HiroyukiIzumi
Date:
Fri Jun 17 01:55:11 2016 +0000
Revision:
0:8d05f1ced202
Thermometer indicating temperature and humidity by LED blink pattern

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HiroyukiIzumi 0:8d05f1ced202 1 /* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved.
HiroyukiIzumi 0:8d05f1ced202 2 *
HiroyukiIzumi 0:8d05f1ced202 3 * The information contained herein is property of Nordic Semiconductor ASA.
HiroyukiIzumi 0:8d05f1ced202 4 * Terms and conditions of usage are described in detail in NORDIC
HiroyukiIzumi 0:8d05f1ced202 5 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
HiroyukiIzumi 0:8d05f1ced202 6 *
HiroyukiIzumi 0:8d05f1ced202 7 * Licensees are granted free, non-transferable use of the information. NO
HiroyukiIzumi 0:8d05f1ced202 8 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
HiroyukiIzumi 0:8d05f1ced202 9 * the file.
HiroyukiIzumi 0:8d05f1ced202 10 *df
HiroyukiIzumi 0:8d05f1ced202 11 */
HiroyukiIzumi 0:8d05f1ced202 12
HiroyukiIzumi 0:8d05f1ced202 13 #include <stdbool.h>
HiroyukiIzumi 0:8d05f1ced202 14 #include <stdint.h>
HiroyukiIzumi 0:8d05f1ced202 15
HiroyukiIzumi 0:8d05f1ced202 16 #include <mbed.h>
HiroyukiIzumi 0:8d05f1ced202 17 #include "uvis25.h"
HiroyukiIzumi 0:8d05f1ced202 18
HiroyukiIzumi 0:8d05f1ced202 19 I2C i2c_uvi(p22, p20); //SDA, SCL
HiroyukiIzumi 0:8d05f1ced202 20
HiroyukiIzumi 0:8d05f1ced202 21 static const char uvis25_expected_who_am_i = 0xCAU; //!< Expected value to get from WHO_AM_I register.
HiroyukiIzumi 0:8d05f1ced202 22
HiroyukiIzumi 0:8d05f1ced202 23 bool uvis25_init(void)
HiroyukiIzumi 0:8d05f1ced202 24 {
HiroyukiIzumi 0:8d05f1ced202 25 bool transfer_succeeded = true;
HiroyukiIzumi 0:8d05f1ced202 26
HiroyukiIzumi 0:8d05f1ced202 27 i2c_uvi.frequency(400000);
HiroyukiIzumi 0:8d05f1ced202 28 uvis25_register_write(0x20 , 0x01);
HiroyukiIzumi 0:8d05f1ced202 29
HiroyukiIzumi 0:8d05f1ced202 30 // Read and verify product ID
HiroyukiIzumi 0:8d05f1ced202 31 transfer_succeeded &= uvis25_verify_product_id();
HiroyukiIzumi 0:8d05f1ced202 32
HiroyukiIzumi 0:8d05f1ced202 33 return transfer_succeeded;
HiroyukiIzumi 0:8d05f1ced202 34 }
HiroyukiIzumi 0:8d05f1ced202 35
HiroyukiIzumi 0:8d05f1ced202 36 bool uvis25_verify_product_id(void)
HiroyukiIzumi 0:8d05f1ced202 37 {
HiroyukiIzumi 0:8d05f1ced202 38 char who_am_i[1];
HiroyukiIzumi 0:8d05f1ced202 39 uvis25_register_read(UVIS25_ADDRESS_WHO_AM_I, &who_am_i[0], 1);
HiroyukiIzumi 0:8d05f1ced202 40 if (who_am_i[0] != uvis25_expected_who_am_i) return false;
HiroyukiIzumi 0:8d05f1ced202 41 else return true;
HiroyukiIzumi 0:8d05f1ced202 42 }
HiroyukiIzumi 0:8d05f1ced202 43
HiroyukiIzumi 0:8d05f1ced202 44 void uvis25_register_write(uint8_t register_address, uint8_t value)
HiroyukiIzumi 0:8d05f1ced202 45 {
HiroyukiIzumi 0:8d05f1ced202 46 char w2_data[2];
HiroyukiIzumi 0:8d05f1ced202 47
HiroyukiIzumi 0:8d05f1ced202 48 w2_data[0] = register_address;
HiroyukiIzumi 0:8d05f1ced202 49 w2_data[1] = value;
HiroyukiIzumi 0:8d05f1ced202 50 i2c_uvi.write(UVIS25_WriteADDE, w2_data, 2);
HiroyukiIzumi 0:8d05f1ced202 51
HiroyukiIzumi 0:8d05f1ced202 52 }
HiroyukiIzumi 0:8d05f1ced202 53
HiroyukiIzumi 0:8d05f1ced202 54 void uvis25_register_read(char register_address, char *destination, uint8_t number_of_bytes)
HiroyukiIzumi 0:8d05f1ced202 55 {
HiroyukiIzumi 0:8d05f1ced202 56 i2c_uvi.write(UVIS25_WriteADDE, &register_address, 1, 1);
HiroyukiIzumi 0:8d05f1ced202 57 i2c_uvi.read(UVIS25_WriteADDE, destination, number_of_bytes);
HiroyukiIzumi 0:8d05f1ced202 58 }
HiroyukiIzumi 0:8d05f1ced202 59
HiroyukiIzumi 0:8d05f1ced202 60
HiroyukiIzumi 0:8d05f1ced202 61 uint8_t UVIS25_ReadUVI(void)
HiroyukiIzumi 0:8d05f1ced202 62 {
HiroyukiIzumi 0:8d05f1ced202 63 char UVI_reading;
HiroyukiIzumi 0:8d05f1ced202 64 uvis25_register_read(0x28, &UVI_reading, 1);
HiroyukiIzumi 0:8d05f1ced202 65 return (uint8_t) UVI_reading;
HiroyukiIzumi 0:8d05f1ced202 66 }