Testing SHT75 humidity sensor on STM F303K8 board.
Fork of Nucleo-F303K8-SSD1306_OLED by
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); } }