Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SHT_v1 by
Revision 1:0dbbb4802508, committed 2016-02-23
- Comitter:
- fblanc
- Date:
- Tue Feb 23 08:10:54 2016 +0000
- Parent:
- 0:df1c8f2961a1
- Commit message:
- SHT V4 5V;
Changed in this revision
--- a/SHT.cpp Sun Jan 24 22:00:35 2010 +0000
+++ b/SHT.cpp Tue Feb 23 08:10:54 2016 +0000
@@ -6,6 +6,7 @@
#include "SHT.h"
#include "mbed.h"
+#define MICROSECONDE 10//1
SHT::SHT(PinName p_sclk, PinName p_data, SHT_acc p_accuracy) : sclk(p_sclk), data(p_data), accuracy(p_accuracy) {
sclk=0;
@@ -13,7 +14,7 @@
data.mode(PullUp); // with the pull up internally active
data.input(); // with line released to go high
temperature = humidity = dewpoint=0.0f;
- printf("constructor\n");
+
}
char SHT::write_byte(byte value)
@@ -26,16 +27,17 @@
for (i=0x80;i>0;i/=2) { //shift bit for masking
if (i & value) data.input(); //masking value with i , write to SENSI-BUS
else data.output();
- wait_us(1); //ensure sclk is low for min time
+ wait_us(MICROSECONDE); //ensure sclk is low for min time
+
sclk=1; //clk for SENSI-BUS
- wait_us(1); //pulsewith approx. 2 us
+ wait_us(MICROSECONDE); //pulsewith approx. 2 us
sclk=0;
}
data.input(); //release DATA-line
- wait_us(1); //ensure sclk is low for min time
+ wait_us(MICROSECONDE); //ensure sclk is low for min time
sclk=1; //clk #9 for ack
error=data; //check ack (DATA will be pulled down by SHT11)
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
return error; //error=1 in case of no acknowledge
}
@@ -47,16 +49,16 @@
byte i,val=0;
data.input(); //release DATA-line
for (i=0x80;i>0;i/=2) { //shift bit for masking
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=1; //clk for SENSI-BUS
if (data) val=(val | i); //read bit
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
}
- wait_us(1);
+ wait_us(MICROSECONDE);
if (send_ack) data.output(); // if ack needed then drive data low
sclk=1; //clk #9 for ack
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
data.input(); //release DATA-line
return val;
@@ -72,19 +74,19 @@
{
data.input();
sclk=0; //Initial state
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=1;
- wait_us(1);
+ wait_us(MICROSECONDE);
data.output(); // data low
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=1;
- wait_us(1);
+ wait_us(MICROSECONDE);
data.input(); // allow data to high
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
- wait_us(1);
+ wait_us(MICROSECONDE);
}
void SHT::connection_reset(void)
@@ -99,12 +101,13 @@
data.input(); // allow data high
sclk=0; // and clk low
for (i=0;i<9;i++) { // 9 SCK cycles
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=1;
- wait_us(1);
+ wait_us(MICROSECONDE);
sclk=0;
}
}
+
char SHT::soft_reset(void)
//----------------------------------------------------------------------------------
// resets the sensor by a softreset
@@ -168,21 +171,23 @@
void SHT::calculate()
//----------------------------------------------------------------------------------------
-// calculates temperature [°C] and humidity [%RH]
+// calculates temperature [�C] and humidity [%RH]
// input : hum [Ticks] (12 bit)
// temp [Ticks] (14 bit)
// output: humidity [%RH]
-// temperature [°C]
+// temperature [�C]
{
- const float C1=-4.0; // for 12 Bit
- const float C2=+0.0405; // for 12 Bit
- const float C3=-0.0000028; // for 12 Bit
- //const float T1=+0.01; // for 14 Bit @ 5V
- //const float T2=+0.00008; // for 14 Bit @ 5V
-
+ //Optimized V4 humidity conversion coefficients
+ const float C1=-2.0468; // for 12 Bit
+ const float C2=0.0367; // for 12 Bit
+ const float C3=-1.5955E-6; // for 12 Bit
+ const float T1=0.01; // for 12
+ const float T2=0.00008; // for 12 Bit
+ const float D1= -40.1; //for °C 5V
+ const float D2= 0.01 ; //for °C for 14
float rh; // rh: Humidity [Ticks] 12 Bit
float t; // t: Temperature [Ticks] 14 Bit
- //float rh_lin; // rh_lin: Humidity linear
+ float rh_lin; // rh_lin: Humidity linear
if (accuracy==SHT_low) {
rh=hum*16; // rescale to high accuracy values - 8 to 12 bits
t=temp*4; // and 12 to 14 bits
@@ -191,9 +196,9 @@
t=temp;
}
- temperature=t*0.01 - 40; //calc. temperature from ticks to [°C]
- humidity=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH]
- // =(temperature-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH] (ignore as never >0.25%)
+ temperature=D1 + D2*t ; //calc. temperature from ticks to [�C]
+ rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH]
+ humidity =(temperature-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH] (ignore as never >0.25%)
if (humidity>100)humidity=100; //cut if the value is outside of
if (humidity<0.1)humidity=0.1; //the physical possible range
}
@@ -210,9 +215,10 @@
return dewpoint;
}
-void SHT::update(SHT_acc acc) { // update stored values from sensor
+int SHT::update(SHT_acc acc) { // update stored values from sensor
int error=0;
- connection_reset();
+ soft_reset();
+ //connection_reset();
if (acc!=accuracy) {
accuracy=acc;
error+=write_status((acc==SHT_low)?0x01:0x00); //set the status reg to high or low accuarcy
@@ -220,5 +226,5 @@
error+=measure(temp,com_measure_temp);
error+=measure(hum,com_measure_humid);
if (!error) calculate();
-
+return error;
}
--- a/SHT.h Sun Jan 24 22:00:35 2010 +0000
+++ b/SHT.h Tue Feb 23 08:10:54 2016 +0000
@@ -7,6 +7,7 @@
#include "mbed.h"
+
enum SHT_acc {
SHT_low=0,
SHT_high=1
@@ -14,7 +15,7 @@
typedef unsigned char byte;
-class SHT : public Base {
+class SHT {
public:
/* Constructor: SHT
* Creates an SHT interface connected to specific pins.
@@ -27,7 +28,7 @@
float get_temperature(); // get the most recent temp reading
float get_humidity(); // get the most recent humidity reading
float get_dewpoint(); // get the most recent dewpoint value
- void update(SHT_acc accuracy); // update stored values from sensor
+ int update(SHT_acc accuracy); // update stored values from sensor
protected:
byte read_byte(bool send_ack);
--- a/main.cpp Sun Jan 24 22:00:35 2010 +0000
+++ b/main.cpp Tue Feb 23 08:10:54 2016 +0000
@@ -3,18 +3,49 @@
#include "mbed.h"
#include "SHT.h"
+const char VERSION[]="2014_11_14";
+Serial pc(USBTX, USBRX); // tx, rx
+//SHT sht(PTE2,PTE3,SHT_high); // sclock, data
+SHT sht(p19,p20,SHT_high); // sclock, data
+DigitalOut led1(LED1);
+Ticker flipper;
-SHT th1(p5,p6,SHT_high); // sclock, data
-
-DigitalOut led1(LED1);
+void flip()
+{
+ led1=!led1;
+ sht.update(SHT_high);
+}
-int main() {
- while(1) {
- th1.update(SHT_high);
- printf("t:%6.2fC h:%6.2f%%\n",th1.get_temperature(),th1.get_humidity());
- led1=!led1;
- wait(1);
+void pc_rx(void)
+{
+ char c;
+ c=pc.getc();
+ switch (c) {
+
+ case 'H':
+ case 'h':
+ pc.printf("Humdity [ %3.2f %% ]\r\n", sht.get_humidity());
+ break;
+ case 'T':
+ case 't':
+ pc.printf("Temperature [ %3.2f C ]\r\n", sht.get_temperature());
+ break;
+ case 'V':
+ case 'v':
+ pc.printf("version %s\r\n",VERSION);
+ break;
+
}
+
+}
+int main() {
+flipper.attach(&flip, 0.5);
+ while (1) {
+ if (pc.readable())
+ pc_rx();
+
+
+ }
}
--- a/mbed.bld Sun Jan 24 22:00:35 2010 +0000 +++ b/mbed.bld Tue Feb 23 08:10:54 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0 +http://mbed.org/users/mbed_official/code/mbed/builds/b3110cd2dd17 \ No newline at end of file
