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.
Diff: main.cpp
- Revision:
- 3:47148198f5f2
- Parent:
- 2:dc3e84d595c3
- Child:
- 4:2c46c3bc8032
--- a/main.cpp Mon Mar 21 03:42:56 2016 +0000 +++ b/main.cpp Wed Mar 30 14:49:21 2016 +0000 @@ -1,7 +1,12 @@ /* 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 - Displays voltage read from first 2 ADC lines on OLED display + Nucleo_F303K8. Displays voltage read from first 2 ADC lines on OLED display + By Joseph Ellsworth CTO of A2WH + Take a look at A2WH.com Producing Water from Air using Solar Energy + March-2016 License: https://developer.mbed.org/handbook/MIT-Licence + Please contact us http://a2wh.com for help with custom design projects. + + Used 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 @@ -34,6 +39,10 @@ AnalogIn pa0(PA_0); AnalogIn pa1(PA_1); +PwmOut fan1(D11); +//PwmOut fan2(D12); +//PwmOut fan3(PA_2); +DigitalOut fan2x(D12); DigitalOut myled(LED1); const float voltMeterARef = 3.3; @@ -57,9 +66,9 @@ { float tval = ain.read(); float volts = tval * voltMeterARef; - float perc = tval * 100.0; + float perc = tval * 100.0f; unsigned short tvalu16 = ain.read_u16 (); - printf("adc %s R=%3.3f V=%3.3f%% U16=%u\r\n",label, tval, volts, tvalu16); + pc.printf("adc %s R=%3.3f V=%3.3f U16=%u\r\n",label, tval, volts, tvalu16); gOled2.printf("%s=%3.3fV\r\n",label,volts); gOled2.display(); return tval; @@ -68,6 +77,7 @@ int main() { + pc.baud(9600); // Display with the Adafruit Library gOled2.printf("%ux%u OLED Display\r\n", gOled2.width(), gOled2.height()); wait(5); @@ -80,8 +90,64 @@ wait(0.1); gOled2.setTextCursor(1,10); readPrint(pa1, "PA_1"); + + float pwmpw = 0.3; //0.0005; //0.09; // 0.1001; + float pwmpp = 3.0; //0.00001; //0.0001; // 0.01001; + //fan2.period_ms(); + //fan2.pulsewidth_ms(200); + + //float pwmpw = 0.1; //0.0005; //0.09; // 0.1001; + //float pwmpp = 1.0; //0.00001; //0.0001; // 0.01001; + //fan2.pulsewidth(0.1); + //fan2.period(1.0 / 10.0); + //fan2.pulsewidth(2.0); + //fan2.period(20); + float pwmduty = 0.1f; + float unit_time = 10.0; + float total_period = 0.1; //0.7; //3.5; //0.8; + float num_cycle = (unit_time / total_period) + 1; + + while (pwmduty <= 1.1f) { + float on_time = total_period * pwmduty; + float off_time = total_period - on_time; + //gOled2.clearDisplay(); + gOled2.setTextCursor(1,20); + wait(0.1); + gOled2.printf("pwm=%3.3f\r\n", pwmduty); + wait(0.1); + gOled2.display(); + wait(0.1); + gOled2.display(); + wait(0.1); + pc.printf("pwm=%3.3f\r\n", pwmduty); + //wait(3.0); + fan2x = 1; + wait(0.15); + for (int x=0; x<= num_cycle; x++) { + + fan2x = 1; + wait(on_time); + fan2x = 0; + wait(off_time); + // accelerate to get the motor turning + // then slow down to the current speed; + //fan1 = 0.0; + //fan2 = 0.0; + //fan3 = 0.0; + //wait(0.02); + //fan1 = pwmduty; + //fan2 = pwmduty; + //fan3 = pwmduty; + //fan2 = pwmduty; + //fan2.period(pwmduty/100); + //fan2.period(pwmduty); + + } + pwmduty+= 0.1f; + } + //fan1 = 0.0; + //fan2 = 0.0; + //fan3 = 0.0; wait(3.0); } - - }