Library to tell DS18B20 temperature sensor to measure temperatures
DS18B20.cpp@0:d76559dea000, 2013-06-23 (annotated)
- Committer:
- simonbarker
- Date:
- Sun Jun 23 15:18:52 2013 +0000
- Revision:
- 0:d76559dea000
Finalised DS18B20 methods
Who changed what in which revision?
User | Revision | Line number | New 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 | } |