DS1820 support (forked repo)

Dependents:   HaTemp

Fork of DS1820 by HM Yoong

Files at this revision

API Documentation at this revision

Comitter:
jari
Date:
Thu Mar 17 12:22:16 2016 +0000
Parent:
0:245af9360f0d
Commit message:
only support celcius, and some renaming

Changed in this revision

DS1820.cpp Show annotated file Show diff for this revision Revisions of this file
DS1820.h Show annotated file Show diff for this revision Revisions of this file
diff -r 245af9360f0d -r 980691eb0534 DS1820.cpp
--- a/DS1820.cpp	Tue Feb 28 07:42:07 2012 +0000
+++ b/DS1820.cpp	Thu Mar 17 12:22:16 2016 +0000
@@ -1,5 +1,5 @@
+#include "mbed.h"
 #include "DS1820.h"
-#include "mbed.h"
 
 // Global variables shared between all DS1820 objects
 bool DS1820_done_flag;
@@ -196,54 +196,54 @@
 }
 
 bool DS1820::ROM_checksum_error() {
-    char CRC=0x00;
+    char crc=0x00;
     int i;
     for(i=0;i<7;i++) // Only going to shift the lower 7 bytes
-        CRC = CRC_byte(CRC, ROM[i]);
+        crc = CRC_byte(crc, ROM[i]);
     // After 7 bytes CRC should equal the 8th byte (ROM CRC)
-    return (CRC!=ROM[7]); // will return true if there is a CRC checksum error         
+    return (crc!=ROM[7]); // will return true if there is a CRC checksum error         
 }
 
 bool DS1820::RAM_checksum_error() {
-    char CRC=0x00;
+    char crc=0x00;
     int i;
     read_RAM();
     for(i=0;i<8;i++) // Only going to shift the lower 8 bytes
-        CRC = CRC_byte(CRC, RAM[i]);
+        crc = CRC_byte(crc, RAM[i]);
     // After 8 bytes CRC should equal the 9th byte (RAM CRC)
-    return (CRC!=RAM[8]); // will return true if there is a CRC checksum error         
+    return (crc!=RAM[8]); // will return true if there is a CRC checksum error         
 }
 
-char DS1820::CRC_byte (char CRC, char byte ) {
+char DS1820::CRC_byte(char aCRC, char byte ) {
     int j;
     for(j=0;j<8;j++) {
-        if ((byte & 0x01 ) ^ (CRC & 0x01)) {
+        if ((byte & 0x01 ) ^ (aCRC & 0x01)) {
             // DATA ^ LSB CRC = 1
-            CRC = CRC>>1;
+            aCRC = aCRC>>1;
             // Set the MSB to 1
-            CRC = CRC | 0x80;
+            aCRC = aCRC | 0x80;
             // Check bit 3
-            if (CRC & 0x04) {
-                CRC = CRC & 0xFB; // Bit 3 is set, so clear it
+            if (aCRC & 0x04) {
+                aCRC = aCRC & 0xFB; // Bit 3 is set, so clear it
             } else {
-                CRC = CRC | 0x04; // Bit 3 is clear, so set it
+                aCRC = aCRC | 0x04; // Bit 3 is clear, so set it
             }
             // Check bit 4
-            if (CRC & 0x08) {
-                CRC = CRC & 0xF7; // Bit 4 is set, so clear it
+            if (aCRC & 0x08) {
+                aCRC = aCRC & 0xF7; // Bit 4 is set, so clear it
             } else {
-                CRC = CRC | 0x08; // Bit 4 is clear, so set it
+                aCRC = aCRC | 0x08; // Bit 4 is clear, so set it
             }
         } else {
             // DATA ^ LSB CRC = 0
-            CRC = CRC>>1;
+            aCRC = aCRC>>1;
             // clear MSB
-            CRC = CRC & 0x7F;
+            aCRC = aCRC & 0x7F;
             // No need to check bits, with DATA ^ LSB CRC = 0, they will remain unchanged
         }
         byte = byte>>1;
     }
-return CRC;
+    return aCRC;
 }
 
 void DS1820::convert_temperature(devices device) {
@@ -320,7 +320,7 @@
     return answer;
 }    
 
-float DS1820::temperature(char scale) {
+float DS1820::temperature() {
 // The data specs state that count_per_degree should be 0x10 (16), I found my devices
 // to have a count_per_degree of 0x4B (75). With the standard resolution of 1/2 deg C
 // this allowed an expanded resolution of 1/150th of a deg C. I wouldn't rely on this
@@ -337,11 +337,7 @@
     count_per_degree = RAM[7];
     answer = reading +0.0;
     answer = answer - 0.25 + (count_per_degree - remaining_count) / count_per_degree;
-    if (scale=='C' or scale=='c')
-        answer = answer / 2.0;
-    else
-        // Convert to deg F
-        answer = answer * 9.0 / 10.0 + 32.0;
+    answer = answer / 2.0;
     return answer;
 }
 
diff -r 245af9360f0d -r 980691eb0534 DS1820.h
--- a/DS1820.h	Tue Feb 28 07:42:07 2012 +0000
+++ b/DS1820.h	Thu Mar 17 12:22:16 2016 +0000
@@ -70,7 +70,7 @@
  *             probe[0]->convert_temperature(DS1820::all_devices);
  *             lcd.cls();
  *             for (i=0; i<devices_found; i++) {
- *                 lcd.printf("%3.1f ",probe[i]->temperature('f'));
+ *                 lcd.printf("%3.1f ",probe[i]->temperature());
  *             }
  *         }
  *     }
@@ -170,10 +170,9 @@
       * that precision. It does seem to give a smooth reading to the
       * tenth of a degree.
       *
-      * @param scale, may be either 'c' or 'f'
       * @returns temperature for that scale
       */
-    float temperature(char scale='c');
+    float temperature();
     
     /** This function calculates the ROM checksum and compares it to the
       * CRC value stored in ROM[7].
@@ -233,7 +232,7 @@
 
 private:
     bool _parasite_power;
-    char CRC_byte (char CRC, char byte );
+    char CRC_byte (char aCRC, char aByte );
     bool onewire_reset();
     void match_ROM();
     void skip_ROM();