101 lines
2.8 KiB
C++
101 lines
2.8 KiB
C++
#ifndef _SENSOR_H
|
|
#define _SENSOR_H
|
|
|
|
|
|
#include "onewire.h"
|
|
#include "DS18X20.h"
|
|
#include "mbed.h"
|
|
|
|
/** DS18B20Sensor class.
|
|
* A wrapper class for the DS18B20 (temperature sensor) and onewire 'c' library.
|
|
* Based on the OneWireDrv Library by Frederic Blanc. Many thanks to him for making this code available.
|
|
*
|
|
* Simple Example:
|
|
* @code
|
|
#include "mbed.h"
|
|
#include "DS18B20Sensor.h"
|
|
|
|
// Instantiate sensor with hardware in pin p30
|
|
DS18B20Sensor sensor(p30);
|
|
|
|
// Setup a window to the world
|
|
Serial pc(p13, p14);
|
|
//Serial pc(USBTX, USBRX);
|
|
|
|
int main()
|
|
{
|
|
char sensorBuf[25];
|
|
|
|
// count will search for sensors, if not already called
|
|
pc.printf("Found %d sensor/s\r", sensor.count());
|
|
|
|
uint8_t result = sensor.startReading(true); // start sensor readings and wait
|
|
|
|
for (uint8_t i = 0; i < sensor.count(); i++) {
|
|
sensor.getReading(sensorBuf, i); // get result into buf
|
|
pc.printf("Sensor %d : %s\r", i+1, sensorBuf); // display it to the world
|
|
}
|
|
|
|
}
|
|
* @endcode
|
|
*/
|
|
class DS18B20Sensor
|
|
{
|
|
public:
|
|
/** Create DS18B20Sensor instance
|
|
* @param pin The pin number used by the onewire bus.
|
|
*/
|
|
DS18B20Sensor(PinName pin);
|
|
|
|
/** Copies the sensor results into the parameter text.
|
|
* @param text The target text buffer.
|
|
* @param index The sensor number.
|
|
*/
|
|
void getReading(char * text, uint8_t index);
|
|
|
|
/** Copies the sensor results into the parameter text.
|
|
* @param text The target text buffer.
|
|
* @param subzero 1 for less than zero.
|
|
* @param cel Degrees Cel
|
|
* @param cel Degrees fraction
|
|
*/
|
|
void getReading(char * text, uint8_t subzero, uint8_t cel, uint8_t cel_frac_bits);
|
|
|
|
/** Gets the sensors reading results.
|
|
* @param index The sensor number.
|
|
* @param subzero Returns 1 if less than zero.
|
|
* @param cel Returns degrees Cel
|
|
* @param cel Returns degrees fraction
|
|
*/
|
|
void getReading(uint8_t index, uint8_t *subzero, uint8_t *cel, uint8_t *cel_frac_bits);
|
|
|
|
/** This searches for sensors on the onewire bus.
|
|
* It can also invoked by just using count()
|
|
* @returns The number of sensors found on the bus.
|
|
*/
|
|
uint8_t search(void);
|
|
|
|
/** Starts the sensors reading.
|
|
* @param includeWait If true, the method will wait the specified time for the sensors to complete the reading.
|
|
* @returns
|
|
DS18X20_OK on success,
|
|
Other values in DS18X20.h on failure.
|
|
*/
|
|
uint8_t startReading(bool includeWait = true);
|
|
|
|
/** If search() was not called before this, then search() is invoked.
|
|
* @returns The number of sensors found on the bus.
|
|
*/
|
|
uint8_t count(void);
|
|
|
|
|
|
protected:
|
|
DigitalInOut _oneWirePort;
|
|
uint8_t gSensorIDs[MAXSENSORS][OW_ROMCODE_SIZE];
|
|
uint8_t nSensors;
|
|
bool _init;
|
|
|
|
};
|
|
|
|
#endif // file
|