| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 | 
							- #ifndef DallasTemperature_h
 
- #define DallasTemperature_h
 
- #define DALLASTEMPLIBVERSION "3.8.1" // To be deprecated -> TODO remove in 4.0.0
 
- // This library is free software; you can redistribute it and/or
 
- // modify it under the terms of the GNU Lesser General Public
 
- // License as published by the Free Software Foundation; either
 
- // version 2.1 of the License, or (at your option) any later version.
 
- // set to true to include code for new and delete operators
 
- #ifndef REQUIRESNEW
 
- #define REQUIRESNEW false
 
- #endif
 
- // set to true to include code implementing alarm search functions
 
- #ifndef REQUIRESALARMS
 
- #define REQUIRESALARMS true
 
- #endif
 
- #include <inttypes.h>
 
- #ifdef __STM32F1__
 
- #include <OneWireSTM.h>
 
- #else
 
- #include <OneWire.h>
 
- #endif
 
- // Model IDs
 
- #define DS18S20MODEL 0x10  // also DS1820
 
- #define DS18B20MODEL 0x28  // also MAX31820
 
- #define DS1822MODEL  0x22
 
- #define DS1825MODEL  0x3B
 
- #define DS28EA00MODEL 0x42
 
- // Error Codes
 
- #define DEVICE_DISCONNECTED_C -127
 
- #define DEVICE_DISCONNECTED_F -196.6
 
- #define DEVICE_DISCONNECTED_RAW -7040
 
- // For readPowerSupply on oneWire bus
 
- // definition of nullptr for C++ < 11, using official workaround:
 
- // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
 
- #if __cplusplus < 201103L
 
- const class
 
- {
 
- public:
 
- 	template <class T>
 
- 	operator T *() const
 
- 	{
 
- 		return 0;
 
- 	}
 
- 	template <class C, class T>
 
- 	operator T C::*() const
 
- 	{
 
- 		return 0;
 
- 	}
 
- private:
 
- 	void operator&() const;
 
- } nullptr = {};
 
- #endif
 
- typedef uint8_t DeviceAddress[8];
 
- class DallasTemperature {
 
- public:
 
- 	DallasTemperature();
 
- 	DallasTemperature(OneWire*);
 
- 	DallasTemperature(OneWire*, uint8_t);
 
- 	void setOneWire(OneWire*);
 
-     void setPullupPin(uint8_t);
 
- 	// initialise bus
 
- 	void begin(void);
 
- 	// returns the number of devices found on the bus
 
- 	uint8_t getDeviceCount(void);
 
- 	// returns the number of DS18xxx Family devices on bus
 
- 	uint8_t getDS18Count(void);
 
- 	// returns true if address is valid
 
- 	bool validAddress(const uint8_t*);
 
- 	// returns true if address is of the family of sensors the lib supports.
 
- 	bool validFamily(const uint8_t* deviceAddress);
 
- 	// finds an address at a given index on the bus
 
- 	bool getAddress(uint8_t*, uint8_t);
 
- 	// attempt to determine if the device at the given address is connected to the bus
 
- 	bool isConnected(const uint8_t*);
 
- 	// attempt to determine if the device at the given address is connected to the bus
 
- 	// also allows for updating the read scratchpad
 
- 	bool isConnected(const uint8_t*, uint8_t*);
 
- 	// read device's scratchpad
 
- 	bool readScratchPad(const uint8_t*, uint8_t*);
 
- 	// write device's scratchpad
 
- 	void writeScratchPad(const uint8_t*, const uint8_t*);
 
- 	// read device's power requirements
 
- 	bool readPowerSupply(const uint8_t* deviceAddress = nullptr);
 
- 	// get global resolution
 
- 	uint8_t getResolution();
 
- 	// set global resolution to 9, 10, 11, or 12 bits
 
- 	void setResolution(uint8_t);
 
- 	// returns the device resolution: 9, 10, 11, or 12 bits
 
- 	uint8_t getResolution(const uint8_t*);
 
- 	// set resolution of a device to 9, 10, 11, or 12 bits
 
- 	bool setResolution(const uint8_t*, uint8_t,
 
- 			bool skipGlobalBitResolutionCalculation = false);
 
- 	// sets/gets the waitForConversion flag
 
- 	void setWaitForConversion(bool);
 
- 	bool getWaitForConversion(void);
 
- 	// sets/gets the checkForConversion flag
 
- 	void setCheckForConversion(bool);
 
- 	bool getCheckForConversion(void);
 
- 	// sends command for all devices on the bus to perform a temperature conversion
 
- 	void requestTemperatures(void);
 
- 	// sends command for one device to perform a temperature conversion by address
 
- 	bool requestTemperaturesByAddress(const uint8_t*);
 
- 	// sends command for one device to perform a temperature conversion by index
 
- 	bool requestTemperaturesByIndex(uint8_t);
 
- 	// returns temperature raw value (12 bit integer of 1/128 degrees C)
 
- 	int16_t getTemp(const uint8_t*);
 
- 	// returns temperature in degrees C
 
- 	float getTempC(const uint8_t*);
 
- 	// returns temperature in degrees F
 
- 	float getTempF(const uint8_t*);
 
- 	// Get temperature for device index (slow)
 
- 	float getTempCByIndex(uint8_t);
 
- 	// Get temperature for device index (slow)
 
- 	float getTempFByIndex(uint8_t);
 
- 	// returns true if the bus requires parasite power
 
- 	bool isParasitePowerMode(void);
 
- 	// Is a conversion complete on the wire? Only applies to the first sensor on the wire.
 
- 	bool isConversionComplete(void);
 
-   int16_t millisToWaitForConversion(uint8_t);
 
-   
 
-   // Sends command to one device to save values from scratchpad to EEPROM by index
 
-   // Returns true if no errors were encountered, false indicates failure
 
-   bool saveScratchPadByIndex(uint8_t);
 
-   
 
-   // Sends command to one or more devices to save values from scratchpad to EEPROM
 
-   // Returns true if no errors were encountered, false indicates failure
 
-   bool saveScratchPad(const uint8_t* = nullptr);
 
-   
 
-   // Sends command to one device to recall values from EEPROM to scratchpad by index
 
-   // Returns true if no errors were encountered, false indicates failure
 
-   bool recallScratchPadByIndex(uint8_t);
 
-   
 
-   // Sends command to one or more devices to recall values from EEPROM to scratchpad
 
-   // Returns true if no errors were encountered, false indicates failure
 
-   bool recallScratchPad(const uint8_t* = nullptr);
 
-   
 
-   // Sets the autoSaveScratchPad flag
 
-   void setAutoSaveScratchPad(bool);
 
-   
 
-   // Gets the autoSaveScratchPad flag
 
-   bool getAutoSaveScratchPad(void);
 
- #if REQUIRESALARMS
 
- 	typedef void AlarmHandler(const uint8_t*);
 
- 	// sets the high alarm temperature for a device
 
- 	// accepts a int8_t.  valid range is -55C - 125C
 
- 	void setHighAlarmTemp(const uint8_t*, int8_t);
 
- 	// sets the low alarm temperature for a device
 
- 	// accepts a int8_t.  valid range is -55C - 125C
 
- 	void setLowAlarmTemp(const uint8_t*, int8_t);
 
- 	// returns a int8_t with the current high alarm temperature for a device
 
- 	// in the range -55C - 125C
 
- 	int8_t getHighAlarmTemp(const uint8_t*);
 
- 	// returns a int8_t with the current low alarm temperature for a device
 
- 	// in the range -55C - 125C
 
- 	int8_t getLowAlarmTemp(const uint8_t*);
 
- 	// resets internal variables used for the alarm search
 
- 	void resetAlarmSearch(void);
 
- 	// search the wire for devices with active alarms
 
- 	bool alarmSearch(uint8_t*);
 
- 	// returns true if ia specific device has an alarm
 
- 	bool hasAlarm(const uint8_t*);
 
- 	// returns true if any device is reporting an alarm on the bus
 
- 	bool hasAlarm(void);
 
- 	// runs the alarm handler for all devices returned by alarmSearch()
 
- 	void processAlarms(void);
 
- 	// sets the alarm handler
 
- 	void setAlarmHandler(const AlarmHandler *);
 
- 	// returns true if an AlarmHandler has been set
 
- 	bool hasAlarmHandler();
 
- #endif
 
- 	// if no alarm handler is used the two bytes can be used as user data
 
- 	// example of such usage is an ID.
 
- 	// note if device is not connected it will fail writing the data.
 
- 	// note if address cannot be found no error will be reported.
 
- 	// in short use carefully
 
- 	void setUserData(const uint8_t*, int16_t);
 
- 	void setUserDataByIndex(uint8_t, int16_t);
 
- 	int16_t getUserData(const uint8_t*);
 
- 	int16_t getUserDataByIndex(uint8_t);
 
- 	// convert from Celsius to Fahrenheit
 
- 	static float toFahrenheit(float);
 
- 	// convert from Fahrenheit to Celsius
 
- 	static float toCelsius(float);
 
- 	// convert from raw to Celsius
 
- 	static float rawToCelsius(int16_t);
 
- 	// convert from raw to Fahrenheit
 
- 	static float rawToFahrenheit(int16_t);
 
- #if REQUIRESNEW
 
- 	// initialize memory area
 
- 	void* operator new (unsigned int);
 
- 	// delete memory reference
 
- 	void operator delete(void*);
 
- #endif
 
- private:
 
- 	typedef uint8_t ScratchPad[9];
 
- 	// parasite power on or off
 
- 	bool parasite;
 
- 	// external pullup
 
- 	bool useExternalPullup;
 
- 	uint8_t pullupPin;
 
- 	// used to determine the delay amount needed to allow for the
 
- 	// temperature conversion to take place
 
- 	uint8_t bitResolution;
 
- 	// used to requestTemperature with or without delay
 
- 	bool waitForConversion;
 
- 	// used to requestTemperature to dynamically check if a conversion is complete
 
- 	bool checkForConversion;
 
-   // used to determine if values will be saved from scratchpad to EEPROM on every scratchpad write
 
-   bool autoSaveScratchPad;
 
- 	// count of devices on the bus
 
- 	uint8_t devices;
 
- 	// count of DS18xxx Family devices on bus
 
- 	uint8_t ds18Count;
 
- 	// Take a pointer to one wire instance
 
- 	OneWire* _wire;
 
- 	// reads scratchpad and returns the raw temperature
 
- 	int16_t calculateTemperature(const uint8_t*, uint8_t*);
 
- 	void blockTillConversionComplete(uint8_t);
 
- 	// Returns true if all bytes of scratchPad are '\0'
 
- 	bool isAllZeros(const uint8_t* const scratchPad, const size_t length = 9);
 
-     // External pullup control
 
-     void activateExternalPullup(void);
 
-     void deactivateExternalPullup(void);
 
- #if REQUIRESALARMS
 
- 	// required for alarmSearch
 
- 	uint8_t alarmSearchAddress[8];
 
- 	int8_t alarmSearchJunction;
 
- 	uint8_t alarmSearchExhausted;
 
- 	// the alarm handler function pointer
 
- 	AlarmHandler *_AlarmHandler;
 
- #endif
 
- };
 
- #endif
 
 
  |