Library to tell DS18B20 temperature sensor to measure temperatures

Committer:
simonbarker
Date:
Sun Jun 23 15:18:52 2013 +0000
Revision:
0:d76559dea000
Finalised DS18B20 methods

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simonbarker 0:d76559dea000 1 #include "DS18B20.h"
simonbarker 0:d76559dea000 2
simonbarker 0:d76559dea000 3 DS18B20::DS18B20(PinName oneBus):oneBus_(oneBus){
simonbarker 0:d76559dea000 4
simonbarker 0:d76559dea000 5 }
simonbarker 0:d76559dea000 6
simonbarker 0:d76559dea000 7 /*
simonbarker 0:d76559dea000 8 send message to every sensor on the bus to take a reading
simonbarker 0:d76559dea000 9 */
simonbarker 0:d76559dea000 10
simonbarker 0:d76559dea000 11 void DS18B20::broadcastConvert() {
simonbarker 0:d76559dea000 12 //broadcast that temp conversions should begin, all at once so saves time
simonbarker 0:d76559dea000 13 oneBus_.init();
simonbarker 0:d76559dea000 14 oneBus_.writeByte(0xCC);
simonbarker 0:d76559dea000 15 oneBus_.writeByte(0x44);
simonbarker 0:d76559dea000 16
simonbarker 0:d76559dea000 17 while (1) {
simonbarker 0:d76559dea000 18 if (oneBus_.readBit())
simonbarker 0:d76559dea000 19 break;
simonbarker 0:d76559dea000 20 }
simonbarker 0:d76559dea000 21 }
simonbarker 0:d76559dea000 22
simonbarker 0:d76559dea000 23 /*
simonbarker 0:d76559dea000 24 retrieve temperatures from sensors
simonbarker 0:d76559dea000 25 */
simonbarker 0:d76559dea000 26
simonbarker 0:d76559dea000 27 float DS18B20::getTemperature(unsigned char* address) {
simonbarker 0:d76559dea000 28 //get temperature from the device with address address
simonbarker 0:d76559dea000 29 float temperature;
simonbarker 0:d76559dea000 30 int scratchPad[9] = {0,0,0,0,0,0,0,0,0};
simonbarker 0:d76559dea000 31
simonbarker 0:d76559dea000 32 oneBus_.init();
simonbarker 0:d76559dea000 33 oneBus_.writeByte(0x55);
simonbarker 0:d76559dea000 34 for (int i = 0; i < 8; i++)
simonbarker 0:d76559dea000 35 oneBus_.writeByte(address[i]);
simonbarker 0:d76559dea000 36 oneBus_.writeByte(0xBE);
simonbarker 0:d76559dea000 37
simonbarker 0:d76559dea000 38 for (int i = 0; i < 2; i++) {
simonbarker 0:d76559dea000 39 scratchPad[i] = oneBus_.readByte();
simonbarker 0:d76559dea000 40 }
simonbarker 0:d76559dea000 41 oneBus_.init();
simonbarker 0:d76559dea000 42 temperature = ((scratchPad[1] * 256) + scratchPad[0])*0.0625;
simonbarker 0:d76559dea000 43
simonbarker 0:d76559dea000 44 return temperature;
simonbarker 0:d76559dea000 45 }
simonbarker 0:d76559dea000 46
simonbarker 0:d76559dea000 47 /*
simonbarker 0:d76559dea000 48 retrieve address of sensor and print to terminal
simonbarker 0:d76559dea000 49 */
simonbarker 0:d76559dea000 50
simonbarker 0:d76559dea000 51 void DS18B20::printSingleAddress() {
simonbarker 0:d76559dea000 52 oneBus_.init();
simonbarker 0:d76559dea000 53 //attach one sensor to port 25 and this will print out it's address
simonbarker 0:d76559dea000 54 unsigned char address[8]= {0,0,0,0,0,0,0,0};
simonbarker 0:d76559dea000 55
simonbarker 0:d76559dea000 56 oneBus_.writeByte(0x33);
simonbarker 0:d76559dea000 57
simonbarker 0:d76559dea000 58 for (int i = 0; i<8; i++)
simonbarker 0:d76559dea000 59 address[i] = oneBus_.readByte();
simonbarker 0:d76559dea000 60 for (int i = 0; i<8; i++)
simonbarker 0:d76559dea000 61 printf("0x%x,",address[i]);
simonbarker 0:d76559dea000 62
simonbarker 0:d76559dea000 63 //check crc
simonbarker 0:d76559dea000 64 unsigned char crc = oneBus_.CRC(address, 7);
simonbarker 0:d76559dea000 65 printf("crc = %x \r\n",crc);
simonbarker 0:d76559dea000 66 }