Thermometer indicating temperature and humidity by LED blink pattern
Dependencies: BLE_API mbed nRF51822
uvis25.cpp@0:8d05f1ced202, 2016-06-17 (annotated)
- 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?
User | Revision | Line number | New 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, ®ister_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 | } |