Simple DS1820 sensor demo showing how to use the DS1820 library [https://developer.mbed.org/users/hudakz/code/DS1820/]

Dependencies:   DS1820

Revision:
9:1d1c57840c7e
Parent:
7:8beaacebc82d
Child:
10:739d1a7a4b1b
--- a/main.cpp	Sun Jan 27 18:03:28 2019 +0000
+++ b/main.cpp	Sun Mar 10 13:20:39 2019 +0000
@@ -5,17 +5,20 @@
  *       between the DS1820's data pin and the +3.3V pin
  *
  */
+/* Single sensor: */
+/*
 #include "mbed.h"
 #include "DS1820.h"
 
 Serial      pc(USBTX, USBRX);
 DigitalOut  led(LED1);
-DS1820      ds1820(p8);  // substitute p8 with actual mbed pin name connected to the DS1820 data pin
+OneWire     oneWire(D8);    // substitute D8 with actual mbed pin name connected 1-wire bus
 float       temp = 0;
 int         result = 0;
 
 int main()
 {
+    pc.printf("\r\n--Starting--\r\n");
     if (ds1820.begin()) {
         while (1) {
             ds1820.startConversion();   // start temperature conversion from analog to digital
@@ -40,26 +43,54 @@
     else
         pc.printf("No DS1820 sensor found!\r\n");
 }
+*/
 
-// Array of sensors:
-//int main() {
-//    DS1820  ds1820[3] = {DS1820(PA_8), DS1820(PA_9), DS1820(PC_7)};
-//
-//    for(int i = 0; i < 3; i++) {
-//        if(!ds1820[i].begin()) {
-//            serial.printf("Cannot find sensor %d", i);
-//        } else
-//            ds1820[i].startConversion();
-//    }
-//    wait(1.0);  // let DS1820s complete the temperature conversion
-//    while(1) {
-//        for(int i = 0; i < 3; i++) {
-//            if(ds1820[i].isPresent() {
-//                serial.printf("temp%d = %3.1f\r\n", i, ds1820[i].read());     // read temperature
-//                ds1820[i].startConversion();     // start temperature conversion
-//            }
-//        }
-//        wait(1.0);  // let DS1820s complete the temperature conversion
-//    }
-//}
-//
+/*Several sensors connected to the same 1-wire bus:*/
+
+#include "mbed.h"
+#include "DS1820.h"
+
+#define     SENSORS_COUNT   64      // number of DS1820 sensors to be connected to the 1-wire bus (max 256)
+
+Serial      pc(USBTX, USBRX);
+DigitalOut  led(LED1);
+OneWire     oneWire(D8);            // substitute D8 with actual mbed pin name connected 1-wire bus
+DS1820*     ds1820[SENSORS_COUNT];
+int         sensors_found = 0;      // counts the actually found DS1820 sensors
+float       temp = 0;
+int         result = 0;
+
+int main() {
+    int i = 0;
+    
+    pc.printf("\r\n--Starting--\r\n");
+    //Enumerate (i.e. detect) DS1820 sensors on the 1-wire bus
+    for(i = 0; i < SENSORS_COUNT; i++) {
+        ds1820[i] = new DS1820(&oneWire);
+        if(!ds1820[i]->begin()) {
+            delete ds1820[i];
+            break;
+        }
+    }
+    
+    sensors_found = i;
+    
+    if (sensors_found == 0) {
+        pc.printf("No DS1820 sensor found!\r\n");
+        return -1;
+    }
+    else
+        pc.printf("Found %d sensors.\r\n", sensors_found);
+    
+    while(1) {
+        pc.printf("-------------------\r\n");
+        for(i = 0; i < sensors_found; i++)
+            ds1820[i]->startConversion();   // start temperature conversion from analog to digital       
+        wait(1.0);                          // let DS1820s complete the temperature conversion
+        for(int i = 0; i < sensors_found; i++) {
+            if(ds1820[i]->isPresent())
+                pc.printf("temp[%d] = %3.1f%cC\r\n", i, ds1820[i]->read(), 176);     // read temperature
+        }
+    }
+}
+