SensorCooler

Dependencies:   mbed DS1820

Committer:
hudakz
Date:
Sun Mar 10 13:20:39 2019 +0000
Revision:
9:1d1c57840c7e
Parent:
7:8beaacebc82d
Child:
10:739d1a7a4b1b
Several DS1820 sensors connected to the same 1-wire bus.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:77a366f9ba45 1 /*
hudakz 0:77a366f9ba45 2 * Simple DS1820 sensor demo
hudakz 1:fe12bf2ad337 3 *
hudakz 1:fe12bf2ad337 4 * Note: Don't forget to connect a 4.7k Ohm resistor
hudakz 1:fe12bf2ad337 5 * between the DS1820's data pin and the +3.3V pin
hudakz 1:fe12bf2ad337 6 *
hudakz 0:77a366f9ba45 7 */
hudakz 9:1d1c57840c7e 8 /* Single sensor: */
hudakz 9:1d1c57840c7e 9 /*
hudakz 0:77a366f9ba45 10 #include "mbed.h"
hudakz 0:77a366f9ba45 11 #include "DS1820.h"
hudakz 0:77a366f9ba45 12
hudakz 4:d263a2860484 13 Serial pc(USBTX, USBRX);
hudakz 4:d263a2860484 14 DigitalOut led(LED1);
hudakz 9:1d1c57840c7e 15 OneWire oneWire(D8); // substitute D8 with actual mbed pin name connected 1-wire bus
hudakz 4:d263a2860484 16 float temp = 0;
hudakz 7:8beaacebc82d 17 int result = 0;
hudakz 7:8beaacebc82d 18
hudakz 7:8beaacebc82d 19 int main()
hudakz 7:8beaacebc82d 20 {
hudakz 9:1d1c57840c7e 21 pc.printf("\r\n--Starting--\r\n");
hudakz 7:8beaacebc82d 22 if (ds1820.begin()) {
hudakz 7:8beaacebc82d 23 while (1) {
hudakz 7:8beaacebc82d 24 ds1820.startConversion(); // start temperature conversion from analog to digital
hudakz 7:8beaacebc82d 25 wait(1.0); // let DS1820 complete the temperature conversion
hudakz 4:d263a2860484 26 result = ds1820.read(temp); // read temperature from DS1820 and perform cyclic redundancy check (CRC)
hudakz 7:8beaacebc82d 27 switch (result) {
hudakz 7:8beaacebc82d 28 case 0: // no errors -> 'temp' contains the value of measured temperature
hudakz 7:8beaacebc82d 29 pc.printf("temp = %3.1f%cC\r\n", temp, 176);
hudakz 7:8beaacebc82d 30 break;
hudakz 7:8beaacebc82d 31
hudakz 7:8beaacebc82d 32 case 1: // no sensor present -> 'temp' is not updated
hudakz 7:8beaacebc82d 33 pc.printf("no sensor present\n\r");
hudakz 7:8beaacebc82d 34 break;
hudakz 7:8beaacebc82d 35
hudakz 7:8beaacebc82d 36 case 2: // CRC error -> 'temp' is not updated
hudakz 7:8beaacebc82d 37 pc.printf("CRC error\r\n");
hudakz 7:8beaacebc82d 38 }
hudakz 7:8beaacebc82d 39
hudakz 4:d263a2860484 40 led = !led;
hudakz 0:77a366f9ba45 41 }
hudakz 7:8beaacebc82d 42 }
hudakz 7:8beaacebc82d 43 else
hudakz 4:d263a2860484 44 pc.printf("No DS1820 sensor found!\r\n");
hudakz 0:77a366f9ba45 45 }
hudakz 9:1d1c57840c7e 46 */
hudakz 1:fe12bf2ad337 47
hudakz 9:1d1c57840c7e 48 /*Several sensors connected to the same 1-wire bus:*/
hudakz 9:1d1c57840c7e 49
hudakz 9:1d1c57840c7e 50 #include "mbed.h"
hudakz 9:1d1c57840c7e 51 #include "DS1820.h"
hudakz 9:1d1c57840c7e 52
hudakz 9:1d1c57840c7e 53 #define SENSORS_COUNT 64 // number of DS1820 sensors to be connected to the 1-wire bus (max 256)
hudakz 9:1d1c57840c7e 54
hudakz 9:1d1c57840c7e 55 Serial pc(USBTX, USBRX);
hudakz 9:1d1c57840c7e 56 DigitalOut led(LED1);
hudakz 9:1d1c57840c7e 57 OneWire oneWire(D8); // substitute D8 with actual mbed pin name connected 1-wire bus
hudakz 9:1d1c57840c7e 58 DS1820* ds1820[SENSORS_COUNT];
hudakz 9:1d1c57840c7e 59 int sensors_found = 0; // counts the actually found DS1820 sensors
hudakz 9:1d1c57840c7e 60 float temp = 0;
hudakz 9:1d1c57840c7e 61 int result = 0;
hudakz 9:1d1c57840c7e 62
hudakz 9:1d1c57840c7e 63 int main() {
hudakz 9:1d1c57840c7e 64 int i = 0;
hudakz 9:1d1c57840c7e 65
hudakz 9:1d1c57840c7e 66 pc.printf("\r\n--Starting--\r\n");
hudakz 9:1d1c57840c7e 67 //Enumerate (i.e. detect) DS1820 sensors on the 1-wire bus
hudakz 9:1d1c57840c7e 68 for(i = 0; i < SENSORS_COUNT; i++) {
hudakz 9:1d1c57840c7e 69 ds1820[i] = new DS1820(&oneWire);
hudakz 9:1d1c57840c7e 70 if(!ds1820[i]->begin()) {
hudakz 9:1d1c57840c7e 71 delete ds1820[i];
hudakz 9:1d1c57840c7e 72 break;
hudakz 9:1d1c57840c7e 73 }
hudakz 9:1d1c57840c7e 74 }
hudakz 9:1d1c57840c7e 75
hudakz 9:1d1c57840c7e 76 sensors_found = i;
hudakz 9:1d1c57840c7e 77
hudakz 9:1d1c57840c7e 78 if (sensors_found == 0) {
hudakz 9:1d1c57840c7e 79 pc.printf("No DS1820 sensor found!\r\n");
hudakz 9:1d1c57840c7e 80 return -1;
hudakz 9:1d1c57840c7e 81 }
hudakz 9:1d1c57840c7e 82 else
hudakz 9:1d1c57840c7e 83 pc.printf("Found %d sensors.\r\n", sensors_found);
hudakz 9:1d1c57840c7e 84
hudakz 9:1d1c57840c7e 85 while(1) {
hudakz 9:1d1c57840c7e 86 pc.printf("-------------------\r\n");
hudakz 9:1d1c57840c7e 87 for(i = 0; i < sensors_found; i++)
hudakz 9:1d1c57840c7e 88 ds1820[i]->startConversion(); // start temperature conversion from analog to digital
hudakz 9:1d1c57840c7e 89 wait(1.0); // let DS1820s complete the temperature conversion
hudakz 9:1d1c57840c7e 90 for(int i = 0; i < sensors_found; i++) {
hudakz 9:1d1c57840c7e 91 if(ds1820[i]->isPresent())
hudakz 9:1d1c57840c7e 92 pc.printf("temp[%d] = %3.1f%cC\r\n", i, ds1820[i]->read(), 176); // read temperature
hudakz 9:1d1c57840c7e 93 }
hudakz 9:1d1c57840c7e 94 }
hudakz 9:1d1c57840c7e 95 }
hudakz 9:1d1c57840c7e 96