Testing SHT75 humidity sensor on STM F303K8 board.

Dependencies:   SHT75 mbed

Fork of Nucleo-F303K8-SSD1306_OLED by Joseph Ellsworth

Sample code to test SHT75 humidity sensor using STM F303K8 board. Uses a 3.3V from board to power sensor. 10K resistor Pull-up on data. Must not be on same pins as I2C. Uses D0 for Clk and D1 for Data.

I had to modify sample code supplied by https://developer.mbed.org/users/nimbusgb/code/SHT75/ because the sensor failed to read without the softReset() and readStatus() at beginning of measurement loop. I think this is caused by the 72Mhtz speed of the F303K8 but did not attempt to fully diagnose.

The readStatus() method from library seems to malfunction and always return a -1 which never changes even when sensor is unplugged.

See https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity_Sensors/Sensirion_Humidity_Sensors_SHT7x_Datasheet_V5.pdf section 2.1 for wiring.

main.cpp

Committer:
joeata2wh
Date:
2016-03-21
Revision:
1:90d213185462
Parent:
0:fa185766e039
Child:
2:dc3e84d595c3

File content as of revision 1:90d213185462:

/* Example of Reading all the ADC pins PIN and display ot OLED display using
 Nucleo_F303K8 by Joseph Ellsworth CTO A2WH -  Free for all but no warranty, no promises 
 Attempt to drive:  
   ebay part http://www.ebay.com/itm/152000005331?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
  0-96-I2C-IIC-SPI-Serial-White-OLED-LCD-LED-Display-Module-128X64
  The Datasheet.  https://www.adafruit.com/datasheets/SSD1306.pdf
  
  Unfortunately this part never turns on using the SSD1308 library.
  Not sure why and don't have time to finish tracking it down at this 
  time. 
  
  Using my I2C address scanner I found that it responds on Added 120 (x78) ,121 (x79)
  and when the part was unsoldered nothing responded on 120 or 121. According to 
  to the page #19 (8.1.5) of the data sheet the I2C address should be 011110
  which seems to map correctly to dec=120 hex=79 so I think the chip is responsive
  and the library must be sending incorrect commands.
  
 */

#include "mbed.h"
#include "SSD1308.h"

//#include "mbed_logo.h"
 
 //Pin Defines for I2C Bus
 #define D_SDA                  PB_7 // specific for Nucleo-F303K8
 #define D_SCL                  PB_6 // specific for Nucleo-F303K8
 I2C i2c(D_SDA, D_SCL);
 
 // Host PC Communication channels
 Serial pc(USBTX, USBRX); // tx, rx
 
 // Instantiate OLED
 //SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
 SSD1308 oled = SSD1308(i2c, SSD1308_SA1);
 //SSD1308 oled = SSD1308(i2c, 120);
 
AnalogIn   pa0(PA_0); 
 
DigitalOut myled(LED1);
const float voltMeterARef = 3.3;

char buff[100];
float readPrint(AnalogIn ain, char *label) {
  float tval = ain.read();
  float volts = tval * voltMeterARef;
  float perc = tval * 100.0;  
  unsigned short  tvalu16 = ain.read_u16 ();

  printf("adc %s R=%3.3f V=%3.3f%% U16=%u\r\n",label, tval, volts, tvalu16);
  sprintf(buff, "V=%3.3f%",volts);
  oled.printf(buff);
  return tval;
}
    

int main() {
    pc.printf("OLED test start\r");  
    oled.writeString(0, 0, "Hello World !");
    oled.printf("Hello World !");
  
    oled.fillDisplay(0xAA);
    oled.setDisplayOff();
    wait(1);   
    oled.setDisplayOn();
    oled.clearDisplay();
    oled.setDisplayInverse();
    wait(0.5);
    oled.setDisplayNormal();                                         
    //oled.writeBitmap((uint8_t*) mbed_logo);
    pc.printf("OLED test done\r\n");  
  


    while(1) {
        myled = !myled; // toggle led 
        readPrint(pa0, "PA_0");                
        wait(7.0);        
    }
}