WIoT-Shield-SENSOR-TEMP

Files at this revision

API Documentation at this revision

Comitter:
stkim92
Date:
Wed Mar 27 07:02:59 2019 +0000
Parent:
4:5ea8c91f607f
Commit message:
WIZnet-IoTShield-SENSOR_TEMP v0.9

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 5ea8c91f607f -r 2cbdcdb06765 main.cpp
--- a/main.cpp	Wed Mar 27 06:50:17 2019 +0000
+++ b/main.cpp	Wed Mar 27 07:02:59 2019 +0000
@@ -31,10 +31,15 @@
 
 Serial pc(USBTX, USBRX);    // USB debug
 
-DigitalOut  LED(LEDPIN);
-AnalogIn    cdsVal(MBED_CONF_IOTSHIELD_SENSOR_CDS);
+AnalogIn   tempVal(MBED_CONF_IOTSHIELD_SENSOR_TEMP);
 
-float val = 0;          // CDS 측정 값 넣을 변수
+float val = 0;          // 온도 측정 값 넣을 변수
+float voltage = 0;    // 전압 계산 값 넣을 변수
+float celsius = 0;    // 섭씨 계산 값 넣을 변수
+float fahrenheit = 0; // 화씨 계산 값 넣을 변수
+
+float getTemperature_F(float _celsius);
+float getTemperature_C(float _voltage);
 
 void serialPcInit(void)
 {
@@ -55,20 +60,44 @@
     myprintf("WIZnet IoT Shield for Arm MBED");
     myprintf("LTE Cat.M1 Version");
     myprintf("=================================================");
-    myprintf(">> Sample Code: CDS Test)");
+    myprintf(">> Sample Code: TEMP Test)");
     myprintf("=================================================\r\n");
 
     while(1) {
-        val = cdsVal.read_u16()/100;
-        //myprintf("Sensor value : %.2f", val);
-        wait_ms(50);
+        // read the value from the sensor:
+        val = tempVal.read_u16()/100;
+        // 실제 전압 계산
+        // 0~5V의 값을 구하기 위해 아래와 같이 5를 곱하고 1024를 나눈다.
+        // (Analog값 * IC에 걸리는 전압 / Analog 10bit 분해능(1024))
+        // IC에 걸리는 전압은 측정기로 측정
 
-        if(val > 512) { // 조도 저항 값이 낮기 때문에 아날로그 값이 높음
-            LED = 0;
-        } else { // 손가락으로 가리면 조도 저항값이 높아지기 때문에 아날로그 값이 낮아진다
-            LED = 1;
-        }
+        voltage = val * 4.95 / 1024;
+        celsius = getTemperature_C(voltage);
+        fahrenheit = getTemperature_F(celsius);
+
+        wait_ms(1000);
+        myprintf("[ Temperature Data ]");
+        myprintf("Sensor value : %.2f", val);
+        myprintf("Volt : %.2f mV", voltage);
+
+        myprintf("Celsius temp : %.2f C", celsius);
+        myprintf("Fahrenheit temp : %.2f F", fahrenheit);
+        wait_ms(1000);
     }
 }
 
+float getTemperature_F(float _celsius)
+{
+    // 섭씨에서 화씨 환산 -> (화씨온도 = 섭씽온*9/5+32)
+    fahrenheit = celsius * 9.0 / 5.0 + 32.0;
+    return fahrenheit;
+}
 
+float getTemperature_C(float _voltage)
+{
+    // LM35는 섭씨 1도당 10mV의 전위차를 갖는다.
+    // 센서핀의 전압이 0.28V라면 280mV이므로 온도는 28도씨.
+    // 100을 곱해서 섭씨 온도로 나타냄
+    celsius = voltage * 100.0;
+    return celsius;
+}