frederic blanc
/
MAX31850_HelloWorld
test MAX31850
SHTxx/sht7X.cpp
- Committer:
- fblanc
- Date:
- 2016-09-28
- Revision:
- 4:031e71e61e80
- Parent:
- 0:55f2866e9c0c
File content as of revision 4:031e71e61e80:
// // Ian Molesworth October 2010 // SHT 75 class // // // To do: // modification PULL-UP //2010_12_22 F.BLANC #include "sht7X.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 _data.mode(PullUp); //PULL-UP 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 _data.mode(PullUp); //PULL-UP 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(); _data.mode(PullUp); //PULL-UP 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; }