1 /*
2  * Copyright (c) 2022 - 2024, Nordic Semiconductor ASA
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice, this
11  *    list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its
18  *    contributors may be used to endorse or promote products derived from this
19  *    software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #include <nrfx_example.h>
35 #include <nrfx_temp.h>
36 
37 #define NRFX_LOG_MODULE                 EXAMPLE
38 #define NRFX_EXAMPLE_CONFIG_LOG_ENABLED 1
39 #define NRFX_EXAMPLE_CONFIG_LOG_LEVEL   3
40 #include <nrfx_log.h>
41 
42 /**
43  * @defgroup nrfx_temp_blocking_example Blocking TEMP example
44  * @{
45  * @ingroup nrfx_temp_examples
46  *
47  * @brief Example shows the functionality of nrfx_temp driver operating in the blocking mode.
48  *
49  * @details Application initializes nrfx_temp driver and starts operating in the blocking mode.
50  *          The temperature measurement and relevant message logging are performed, until a number
51  *          of measurements taken is equal to the value specified by the user.
52  */
53 
54 /** @brief Symbol specifying the number of temperature measurements to take. */
55 #define TEMP_ITERATIONS 5UL
56 
57 /**
58  * @brief Function for application main entry.
59  *
60  * @return Nothing.
61  */
main(void)62 int main(void)
63 {
64     nrfx_err_t status;
65     (void)status;
66 
67     uint32_t i = 0;
68 
69     NRFX_EXAMPLE_LOG_INIT();
70 
71     NRFX_LOG_INFO("Starting nrfx_temp blocking example.");
72     NRFX_EXAMPLE_LOG_PROCESS();
73 
74     nrfx_temp_config_t config = NRFX_TEMP_DEFAULT_CONFIG;
75     status = nrfx_temp_init(&config, NULL);
76     NRFX_ASSERT(status == NRFX_SUCCESS);
77 
78     while (1)
79     {
80         if (i < TEMP_ITERATIONS)
81         {
82             status = nrfx_temp_measure();
83             NRFX_ASSERT(status == NRFX_SUCCESS);
84 
85             int32_t temperature = nrfx_temp_result_get();
86             int32_t celsius_temperature = nrfx_temp_calculate(temperature);
87 
88             int32_t whole_celsius = celsius_temperature / 100;
89             uint8_t fraction_celsius = NRFX_ABS(celsius_temperature % 100);
90 
91             NRFX_LOG_INFO("Measured temperature: %d.%02u [C]", whole_celsius, fraction_celsius);
92 
93             i++;
94         }
95         else if (i == TEMP_ITERATIONS)
96         {
97             nrfx_temp_uninit();
98             i++;
99         }
100 
101         NRFX_EXAMPLE_LOG_PROCESS();
102     }
103 }
104 
105 /** @} */
106