Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ds18b20/DS18B20.cpp
- Committer:
- redplam
- Date:
- 2014-04-12
- Revision:
- 3:0ef2ced1f02d
- Parent:
- 1:3aec489c7366
File content as of revision 3:0ef2ced1f02d:
#include "DS18B20.h" #include "DS1Wire.h" #include "mbed.h" #include <stdint.h> // Device byte commands over 1-wire serial enum COMMANDS { READ_ROM = 0x33, CONVERT = 0x44, READ_SCRATCHPAD = 0xBE, SKIP_ROM = 0xCC }; // device onboard register layout typedef struct { uint8_t LSB; uint8_t MSB; uint8_t Th; uint8_t Tl; uint8_t config; uint8_t reserved0xFF; uint8_t reserved0xCH; uint8_t reserved0x10; uint8_t CRC; } ScratchPad_t; DigitalOut conversionInProgress(LED4); // conversion in progress DigitalOut resetFailure(LED1); // for error reporting extern DigitalInOut sensor; // sensor pin static void inError() { while (1) { resetFailure = !resetFailure; wait(0.2); } } void DoConversion() { if (Reset(sensor) != 0) { inError(); } else { conversionInProgress = 1; // led on WriteByte(sensor, SKIP_ROM); // Skip ROM WriteByte(sensor, CONVERT); // Convert while (ReadBit(sensor) == 0) { // wait for conversion to complete } conversionInProgress = 0; // led off } } uint32_t GetTemperature() { uint32_t result = 0; if (Reset(sensor) != 0) { inError(); } else { ScratchPad_t scratchpad; WriteByte(sensor, SKIP_ROM); // Skip ROM WriteByte(sensor, READ_SCRATCHPAD); // Read Scrachpad scratchpad.LSB = ReadByte(sensor); scratchpad.MSB = ReadByte(sensor); Reset(sensor); // terminate read as we only want temperature result = ((scratchpad.MSB << 8) | scratchpad.LSB); } return result; } float mytemp(void) { DoConversion(); uint32_t temp = GetTemperature(); float f = (temp & 0x0F) * 0.0625; // calculate .4 part f += (temp >> 4); // add 7.0 part to it return f; //s.printf("Temp is %2.1fC\n\r", f); // display in 2.1 format }