Eric Jung
/
WIZnet-IoTShield-SENSOR_TEMP
Onboard temperature sensor sample for WIZnet IoT Shield
main.cpp@6:327fba9ec505, 2019-03-27 (annotated)
- Committer:
- hkjung
- Date:
- Wed Mar 27 13:30:36 2019 +0000
- Revision:
- 6:327fba9ec505
- Parent:
- 5:2cbdcdb06765
Modified some comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hkjung | 0:5cd6077e0a8e | 1 | /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED |
hkjung | 0:5cd6077e0a8e | 2 | * Copyright (c) 2019 WIZnet Co., Ltd. |
hkjung | 0:5cd6077e0a8e | 3 | * SPDX-License-Identifier: Apache-2.0 |
hkjung | 0:5cd6077e0a8e | 4 | */ |
stkim92 | 3:c9cd5d11484d | 5 | |
stkim92 | 3:c9cd5d11484d | 6 | /* |
stkim92 | 3:c9cd5d11484d | 7 | * Licensed under the Apache License, Version 2.0 (the "License"); |
stkim92 | 3:c9cd5d11484d | 8 | * you may not use this file except in compliance with the License. |
stkim92 | 3:c9cd5d11484d | 9 | * You may obtain a copy of the License at |
stkim92 | 3:c9cd5d11484d | 10 | * |
stkim92 | 3:c9cd5d11484d | 11 | * http://www.apache.org/licenses/LICENSE-2.0 |
stkim92 | 3:c9cd5d11484d | 12 | * |
stkim92 | 3:c9cd5d11484d | 13 | * Unless required by applicable law or agreed to in writing, software |
stkim92 | 3:c9cd5d11484d | 14 | * distributed under the License is distributed on an "AS IS" BASIS, |
stkim92 | 3:c9cd5d11484d | 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
stkim92 | 3:c9cd5d11484d | 16 | * |
stkim92 | 3:c9cd5d11484d | 17 | * See the License for the specific language governing permissions and |
stkim92 | 3:c9cd5d11484d | 18 | * limitations under the License. |
stkim92 | 3:c9cd5d11484d | 19 | * |
stkim92 | 3:c9cd5d11484d | 20 | */ |
hkjung | 0:5cd6077e0a8e | 21 | |
hkjung | 0:5cd6077e0a8e | 22 | #include <string> |
hkjung | 0:5cd6077e0a8e | 23 | #include "mbed.h" |
hkjung | 0:5cd6077e0a8e | 24 | |
hkjung | 0:5cd6077e0a8e | 25 | #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);} |
hkjung | 0:5cd6077e0a8e | 26 | |
hkjung | 0:5cd6077e0a8e | 27 | // Sensors |
hkjung | 0:5cd6077e0a8e | 28 | #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0 |
hkjung | 0:5cd6077e0a8e | 29 | #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1 |
stkim92 | 4:5ea8c91f607f | 30 | #define LEDPIN D13 |
hkjung | 0:5cd6077e0a8e | 31 | |
hkjung | 0:5cd6077e0a8e | 32 | Serial pc(USBTX, USBRX); // USB debug |
hkjung | 0:5cd6077e0a8e | 33 | |
stkim92 | 5:2cbdcdb06765 | 34 | AnalogIn tempVal(MBED_CONF_IOTSHIELD_SENSOR_TEMP); |
hkjung | 0:5cd6077e0a8e | 35 | |
stkim92 | 5:2cbdcdb06765 | 36 | float val = 0; // 온도 측정 값 넣을 변수 |
stkim92 | 5:2cbdcdb06765 | 37 | float voltage = 0; // 전압 계산 값 넣을 변수 |
stkim92 | 5:2cbdcdb06765 | 38 | float celsius = 0; // 섭씨 계산 값 넣을 변수 |
stkim92 | 5:2cbdcdb06765 | 39 | float fahrenheit = 0; // 화씨 계산 값 넣을 변수 |
stkim92 | 5:2cbdcdb06765 | 40 | |
stkim92 | 5:2cbdcdb06765 | 41 | float getTemperature_F(float _celsius); |
stkim92 | 5:2cbdcdb06765 | 42 | float getTemperature_C(float _voltage); |
stkim92 | 3:c9cd5d11484d | 43 | |
hkjung | 0:5cd6077e0a8e | 44 | void serialPcInit(void) |
hkjung | 0:5cd6077e0a8e | 45 | { |
hkjung | 0:5cd6077e0a8e | 46 | pc.baud(115200); |
hkjung | 0:5cd6077e0a8e | 47 | pc.format(8, Serial::None, 1); |
hkjung | 0:5cd6077e0a8e | 48 | } |
hkjung | 0:5cd6077e0a8e | 49 | |
hkjung | 1:0d7ba45f12b1 | 50 | // ---------------------------------------------------------------- |
hkjung | 1:0d7ba45f12b1 | 51 | // Main routine |
hkjung | 1:0d7ba45f12b1 | 52 | // ---------------------------------------------------------------- |
hkjung | 1:0d7ba45f12b1 | 53 | |
hkjung | 0:5cd6077e0a8e | 54 | int main() |
hkjung | 0:5cd6077e0a8e | 55 | { |
stkim92 | 3:c9cd5d11484d | 56 | serialPcInit(); |
stkim92 | 3:c9cd5d11484d | 57 | |
hkjung | 0:5cd6077e0a8e | 58 | myprintf("System Init Complete\r\n"); |
stkim92 | 3:c9cd5d11484d | 59 | |
hkjung | 0:5cd6077e0a8e | 60 | myprintf("WIZnet IoT Shield for Arm MBED"); |
hkjung | 0:5cd6077e0a8e | 61 | myprintf("LTE Cat.M1 Version"); |
hkjung | 0:5cd6077e0a8e | 62 | myprintf("================================================="); |
hkjung | 6:327fba9ec505 | 63 | myprintf(">> Sample Code: Temperature Sensor (LM35)"); |
hkjung | 0:5cd6077e0a8e | 64 | myprintf("=================================================\r\n"); |
stkim92 | 3:c9cd5d11484d | 65 | |
stkim92 | 3:c9cd5d11484d | 66 | while(1) { |
stkim92 | 5:2cbdcdb06765 | 67 | // read the value from the sensor: |
stkim92 | 5:2cbdcdb06765 | 68 | val = tempVal.read_u16()/100; |
stkim92 | 5:2cbdcdb06765 | 69 | // 실제 전압 계산 |
stkim92 | 5:2cbdcdb06765 | 70 | // 0~5V의 값을 구하기 위해 아래와 같이 5를 곱하고 1024를 나눈다. |
stkim92 | 5:2cbdcdb06765 | 71 | // (Analog값 * IC에 걸리는 전압 / Analog 10bit 분해능(1024)) |
stkim92 | 5:2cbdcdb06765 | 72 | // IC에 걸리는 전압은 측정기로 측정 |
stkim92 | 3:c9cd5d11484d | 73 | |
stkim92 | 5:2cbdcdb06765 | 74 | voltage = val * 4.95 / 1024; |
stkim92 | 5:2cbdcdb06765 | 75 | celsius = getTemperature_C(voltage); |
stkim92 | 5:2cbdcdb06765 | 76 | fahrenheit = getTemperature_F(celsius); |
stkim92 | 5:2cbdcdb06765 | 77 | |
stkim92 | 5:2cbdcdb06765 | 78 | wait_ms(1000); |
stkim92 | 5:2cbdcdb06765 | 79 | myprintf("[ Temperature Data ]"); |
stkim92 | 5:2cbdcdb06765 | 80 | myprintf("Sensor value : %.2f", val); |
stkim92 | 5:2cbdcdb06765 | 81 | myprintf("Volt : %.2f mV", voltage); |
stkim92 | 5:2cbdcdb06765 | 82 | |
stkim92 | 5:2cbdcdb06765 | 83 | myprintf("Celsius temp : %.2f C", celsius); |
stkim92 | 5:2cbdcdb06765 | 84 | myprintf("Fahrenheit temp : %.2f F", fahrenheit); |
stkim92 | 5:2cbdcdb06765 | 85 | wait_ms(1000); |
hkjung | 2:d7c5df056a3b | 86 | } |
hkjung | 0:5cd6077e0a8e | 87 | } |
hkjung | 0:5cd6077e0a8e | 88 | |
stkim92 | 5:2cbdcdb06765 | 89 | float getTemperature_F(float _celsius) |
stkim92 | 5:2cbdcdb06765 | 90 | { |
stkim92 | 5:2cbdcdb06765 | 91 | // 섭씨에서 화씨 환산 -> (화씨온도 = 섭씽온*9/5+32) |
stkim92 | 5:2cbdcdb06765 | 92 | fahrenheit = celsius * 9.0 / 5.0 + 32.0; |
stkim92 | 5:2cbdcdb06765 | 93 | return fahrenheit; |
stkim92 | 5:2cbdcdb06765 | 94 | } |
hkjung | 1:0d7ba45f12b1 | 95 | |
stkim92 | 5:2cbdcdb06765 | 96 | float getTemperature_C(float _voltage) |
stkim92 | 5:2cbdcdb06765 | 97 | { |
stkim92 | 5:2cbdcdb06765 | 98 | // LM35는 섭씨 1도당 10mV의 전위차를 갖는다. |
stkim92 | 5:2cbdcdb06765 | 99 | // 센서핀의 전압이 0.28V라면 280mV이므로 온도는 28도씨. |
stkim92 | 5:2cbdcdb06765 | 100 | // 100을 곱해서 섭씨 온도로 나타냄 |
stkim92 | 5:2cbdcdb06765 | 101 | celsius = voltage * 100.0; |
stkim92 | 5:2cbdcdb06765 | 102 | return celsius; |
stkim92 | 5:2cbdcdb06765 | 103 | } |