Fork of Erik's DS1820 library working on OS6
Dependents: DS1820-example DS1820mitWebserver DS1820ohneWebserver
DS1820.h
- Committer:
- star297
- Date:
- 2020-12-29
- Revision:
- 0:a43dcf6ca539
File content as of revision 0:a43dcf6ca539:
#ifndef MBED_DS1820_H #define MBED_DS1820_H #include "mbed.h" #include "LinkedList2.h" #define FAMILY_CODE _ROM[0] #define FAMILY_CODE_DS1820 0x10 #define FAMILY_CODE_DS18B20 0x28 #define FAMILY_CODE_DS1822 0x22 /** DS1820 Dallas 1-Wire Temperature Probe * * Example for single sensor: * @code * #include "mbed.h" * #include "DS1820.h" * * DS1820 probe(DATA_PIN); * * int main() { * while(1) { * probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until completed * printf("It is %3.1foC\r\n", probe.temperature()); * ThisThread::sleep_for(chrono::milliseconds(1000)); * } * } * @endcode */ class DS1820 { public: enum devices{ this_device, // command applies to only this device all_devices }; // command applies to all devices enum { invalid_conversion = -1000 }; /** Create a probe object connected to the specified pins * * The probe might either by regular powered or parasite powered. If it is parasite * powered and power_pin is set, that pin will be used to switch an external mosfet connecting * data to Vdd. If it is parasite powered and the pin is not set, the regular data pin * is used to supply extra power when required. This will be sufficient as long as the * number of probes is limitted. * * @param data_pin DigitalInOut pin for the data bus * @param power_pin DigitalOut (optional) pin to control the power MOSFET * @param power_polarity bool (optional) which sets active state (0 for active low (default), 1 for active high) */ DS1820(PinName data_pin, PinName power_pin = NC, bool power_polarity = 0); // Constructor with parasite power pin ~DS1820(); /** Function to see if there are DS1820 devices left on a pin which do not have a corresponding DS1820 object * * @return - true if there are one or more unassigned devices, otherwise false */ static bool unassignedProbe(PinName pin); /** This routine will initiate the temperature conversion within * one or all DS1820 probes. * * @param wait if true or parisitic power is used, waits up to 750 ms for * conversion otherwise returns immediatly. * @param device allows the function to apply to a specific device or * to all devices on the 1-Wire bus. * @returns milliseconds untill conversion will complete. */ int convertTemperature(bool wait, devices device=all_devices); /** This function will return the probe temperature. Approximately 10ms per * probe to read its RAM, do CRC check and convert temperature on the LPC1768. * * @param scale, may be either 'c' or 'f' * @returns temperature for that scale, or DS1820::invalid_conversion (-1000) if CRC error detected. */ float temperature(char scale='c'); /** This function sets the temperature resolution for the DS18B20 * in the configuration register. * * @param a number between 9 and 12 to specify resolution * @returns true if successful */ bool setResolution(unsigned int resolution); static LinkedList2<node> probes; private: bool _parasite_power; bool _power_mosfet; bool _power_polarity; static char CRC_byte(char _CRC, char byte ); static bool onewire_reset(DigitalInOut *pin); void match_ROM(); void skip_ROM(); static bool search_ROM_routine(DigitalInOut *pin, char command, char *ROM_address); static void onewire_bit_out (DigitalInOut *pin, bool bit_data); void onewire_byte_out(char data); static bool onewire_bit_in(DigitalInOut *pin); char onewire_byte_in(); static bool ROM_checksum_error(char *_ROM_address); bool RAM_checksum_error(); void read_RAM(); static bool unassignedProbe(DigitalInOut *pin, char *ROM_address); void write_scratchpad(int data); bool read_power_supply(devices device=this_device); DigitalInOut _datapin; DigitalOut _parasitepin; char _ROM[8]; char RAM[9]; }; #endif