Sensiron SHT 7x Temperature and humidity device library
Dependents: temp xj-Nucleo-F303K8-SHT75-TEST
Diff: sht75.cpp
- Revision:
- 1:20aa2d4a28bf
- Parent:
- 0:f401474a3e96
- Child:
- 2:dd218144f9fe
--- a/sht75.cpp Wed Oct 27 15:27:38 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -// -// Ian Molesworth October 2010 -// SHT 75 class -// -// -// To do: -// -// - -#include "sht75.h" - -void SHT75::reset() - { - _data.output(); - _data = 1; // data bus high - for (int i=0;i<12;i++) - { - _clock = 1; // clock high - wait_us(1); - _clock = 0; // clock lo - wait_us(1); - } - _clock = 1; // clock high - wait_us(1); - _data = 0; - wait_us(1); - _clock = 0; // clock lo - wait_us(1); - _clock = 1; - wait_us(1); - _data = 1; - wait_us(1); - _clock = 0; - wait_us(1); - } - -void SHT75::softReset(void) - { - _data.output(); - start(); - write(0x1E); - wait_ms(12); - } - -void SHT75::start(void) - { - _data.output(); - _clock = 1; - wait_us(1); - _data = 0; - wait_us(1); - _clock = 0; - wait_us(1); - _clock = 1; - wait_us(1); - _data = 1; - wait_us(1); - _clock = 0; - } - -int SHT75::readStatus(void) - { - int status; - status = -1; - start(); - if (write(0x06) == 0) - status = read(1); // read with a wait for ack - read(0); // read without the wait - return status; - } - -bool SHT75::write(char d) - { - auto int i; - _data.output(); // bus output - // Writes char and returns -1 if no ACK was sent from remote - for (i=0;i<8;i++) - { - if (d & 0x80) - _data = 1; // data high - else - _data = 0; // data lo - // shift the data - d <<= 1; - wait_us(1); - _clock = 1; // clock high - wait_us(1); - _clock = 0; // clock lo - } - _data.input(); // float the bus - wait_us(1); - _clock = 1; // clock high - wait_us(1); - i = _data; - _clock = 0; // clock lo - return i; // leave the bus in input mode and return the status of the ack bit read. - } - -int SHT75::read(char ack) - { - auto int i,s; - auto char c; - s = 0; - _data.input(); // bus to input - - for (i=0;i<8;i++) - { - s <<= 1; - wait_us(1); - _clock = 1; // clock high - wait_us(1); - c = _data; // get the data bit - _clock = 0; // clock lo - if ( c ) - s |= 1; - } - - if (ack == 1) - _data = 0; // data lo - else - _data = 1; // data hi - _data.output(); - _clock = 1; // clock lo - wait_us(1); - _clock = 0; // clock lo - _data = 1; // data hi - _data.input(); - return s; - } - - -// Put the current temperature into passed variable -bool SHT75::readTempTicks(int* temp) -{ - int v, value; - start(); // Start a tx ( leaves data as input ) - if (write(0x03) == 0) // send the read command and get an ack - { - for (v=0; v<50; v ++) // wait for ready up to 500 ms - { - wait_ms(10); // 10 ms pause - if ( _data == 0 ) // - { - value = read(1); // read a byte - value <<= 8; // shift it in - value |= read(1); // read another byte - read(0); - // transfer the value - *temp = value; - reset(); - return true; - } - } - } - return false; - } - -bool SHT75::readHumidityTicks(int* humi) - { - start(); - if (write(0x05) == 0) - { - for (int value=0; value<50; value ++) // wait for ready up to 500 ms - { - wait_ms(10); // - if ( _data == 0 ) // - { - value = read(1); - value <<= 8; - value |= read(1); - read(0); - *humi = value; // transfer the value - reset(); - return true; - } - } - } - - return false; - }