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.
Revision 0:2d8f1aed9d70, committed 2020-07-06
- Comitter:
- bernard_arnault
- Date:
- Mon Jul 06 13:59:08 2020 +0000
- Commit message:
- First draft NUCELO-LK32KC and DHT11
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DHT.cpp Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,231 @@
+/*
+ * DHT Library for Digital-output Humidity and Temperature sensors
+ *
+ * Works with DHT11, DHT22
+ * SEN11301P, Grove - Temperature&Humidity Sensor (Seeed Studio)
+ * SEN51035P, Grove - Temperature&Humidity Sensor Pro (Seeed Studio)
+ * AM2302 , temperature-humidity sensor
+ * HM2303 , Digital-output humidity and temperature sensor
+ *
+ * Copyright (C) Wim De Roeve
+ * based on DHT22 sensor library by HO WING KIT
+ * Arduino DHT11 library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documnetation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "DHT.h"
+
+#define DHT_DATA_BIT_COUNT 41
+
+DHT::DHT(PinName pin,int DHTtype) {
+ _pin = pin;
+ _DHTtype = DHTtype;
+ _firsttime=true;
+}
+
+DHT::~DHT() {
+}
+
+int DHT::readData() {
+ int i, j, retryCount,b;
+ unsigned int bitTimes[DHT_DATA_BIT_COUNT];
+
+ eError err = ERROR_NONE;
+ time_t currentTime = time(NULL);
+
+ DigitalInOut DHT_io(_pin);
+
+ for (i = 0; i < DHT_DATA_BIT_COUNT; i++) {
+ bitTimes[i] = 0;
+ }
+
+ if (!_firsttime) {
+ if (int(currentTime - _lastReadTime) < 2) {
+ err = ERROR_NO_PATIENCE;
+ return err;
+ }
+ } else {
+ _firsttime=false;
+ _lastReadTime=currentTime;
+ }
+ retryCount = 0;
+
+ do {
+ if (retryCount > 125) {
+ err = BUS_BUSY;
+ return err;
+ }
+ retryCount ++;
+ wait_us(2);
+ } while ((DHT_io==0));
+
+
+ DHT_io.output();
+ DHT_io = 0;
+ wait_ms(18);
+ DHT_io = 1;
+ wait_us(40);
+ DHT_io.input();
+
+ retryCount = 0;
+ do {
+ if (retryCount > 40) {
+ err = ERROR_NOT_PRESENT;
+ return err;
+ }
+ retryCount++;
+ wait_us(1);
+ } while ((DHT_io==1));
+
+ if (err != ERROR_NONE) {
+ return err;
+ }
+
+ wait_us(80);
+
+ for (i = 0; i < 5; i++) {
+ for (j = 0; j < 8; j++) {
+
+ retryCount = 0;
+ do {
+ if (retryCount > 75) {
+ err = ERROR_DATA_TIMEOUT;
+ return err;
+ }
+ retryCount++;
+ wait_us(1);
+ } while (DHT_io == 0);
+ wait_us(40);
+ bitTimes[i*8+j]=DHT_io;
+
+ int count = 0;
+ while (DHT_io == 1 && count < 100) {
+ wait_us(1);
+ count++;
+ }
+ }
+ }
+ DHT_io.output();
+ DHT_io = 1;
+ for (i = 0; i < 5; i++) {
+ b=0;
+ for (j=0; j<8; j++) {
+ if (bitTimes[i*8+j+1] > 0) {
+ b |= ( 1 << (7-j));
+ }
+ }
+ DHT_data[i]=b;
+ }
+
+ if (DHT_data[4] == ((DHT_data[0] + DHT_data[1] + DHT_data[2] + DHT_data[3]) & 0xFF)) {
+ _lastReadTime = currentTime;
+ _lastTemperature=CalcTemperature();
+ _lastHumidity=CalcHumidity();
+
+ } else {
+ err = ERROR_CHECKSUM;
+ }
+
+ return err;
+
+}
+
+float DHT::CalcTemperature() {
+ int v;
+
+ switch (_DHTtype) {
+ case DHT11:
+ v = DHT_data[2];
+ return float(v);
+ case DHT22:
+ v = DHT_data[2] & 0x7F;
+ v *= 256;
+ v += DHT_data[3];
+ v /= 10;
+ if (DHT_data[2] & 0x80)
+ v *= -1;
+ return float(v);
+ }
+ return 0;
+}
+
+float DHT::ReadHumidity() {
+ return _lastHumidity;
+}
+
+float DHT::ConvertCelciustoFarenheit(float celsius) {
+ return celsius * 9 / 5 + 32;
+}
+
+float DHT::ConvertCelciustoKelvin(float celsius) {
+ return celsius + 273.15;
+}
+
+// dewPoint function NOAA
+// reference: http://wahiduddin.net/calc/density_algorithms.htm
+float DHT::CalcdewPoint(float celsius, float humidity) {
+ float A0= 373.15/(273.15 + celsius);
+ float SUM = -7.90298 * (A0-1);
+ SUM += 5.02808 * log10(A0);
+ SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
+ SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
+ SUM += log10(1013.246);
+ float VP = pow(10, SUM-3) * humidity;
+ float T = log(VP/0.61078); // temp var
+ return (241.88 * T) / (17.558-T);
+}
+
+// delta max = 0.6544 wrt dewPoint()
+// 5x faster than dewPoint()
+// reference: http://en.wikipedia.org/wiki/Dew_point
+float DHT::CalcdewPointFast(float celsius, float humidity)
+{
+ float a = 17.271;
+ float b = 237.7;
+ float temp = (a * celsius) / (b + celsius) + log(humidity/100);
+ float Td = (b * temp) / (a - temp);
+ return Td;
+}
+
+float DHT::ReadTemperature(eScale Scale) {
+ if (Scale == FARENHEIT)
+ return ConvertCelciustoFarenheit(_lastTemperature);
+ else if (Scale == KELVIN)
+ return ConvertCelciustoKelvin(_lastTemperature);
+ else
+ return _lastTemperature;
+}
+
+float DHT::CalcHumidity() {
+ int v;
+
+ switch (_DHTtype) {
+ case DHT11:
+ v = DHT_data[0];
+ return float(v);
+ case DHT22:
+ v = DHT_data[0];
+ v *= 256;
+ v += DHT_data[1];
+ v /= 10;
+ return float(v);
+ }
+ return 0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DHT.h Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,89 @@
+/*
+ * DHT Library for Digital-output Humidity and Temperature sensors
+ *
+ * Works with DHT11, DHT21, DHT22
+ * SEN11301P, Grove - Temperature&Humidity Sensor (Seeed Studio)
+ * SEN51035P, Grove - Temperature&Humidity Sensor Pro (Seeed Studio)
+ * AM2302 , temperature-humidity sensor
+ * RHT01,RHT02, RHT03 , Humidity and Temperature Sensor (Sparkfun)
+ *
+ * Copyright (C) Wim De Roeve
+ * based on DHT22 sensor library by HO WING KIT
+ * Arduino DHT11 library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documnetation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MBED_DHT_H
+#define MBED_DHT_H
+
+#include "mbed.h"
+
+enum eType{
+ DHT11 = 11,
+ SEN11301P = 11,
+ RHT01 = 11,
+ DHT22 = 22,
+ AM2302 = 22,
+ SEN51035P = 22,
+ RHT02 = 22,
+ RHT03 = 22
+ } ;
+
+enum eError {
+ ERROR_NONE = 0,
+ BUS_BUSY =1,
+ ERROR_NOT_PRESENT =2 ,
+ ERROR_ACK_TOO_LONG =3 ,
+ ERROR_SYNC_TIMEOUT = 4,
+ ERROR_DATA_TIMEOUT =5 ,
+ ERROR_CHECKSUM = 6,
+ ERROR_NO_PATIENCE =7
+} ;
+
+typedef enum {
+ CELCIUS =0 ,
+ FARENHEIT =1,
+ KELVIN=2
+} eScale;
+
+class DHT {
+public:
+ DHT(PinName pin,int DHTtype);
+ ~DHT();
+ int readData(void);
+ float ReadHumidity(void);
+ float ReadTemperature(eScale Scale);
+ float CalcdewPoint(float celsius, float humidity);
+ float CalcdewPointFast(float celsius, float humidity);
+
+private:
+ time_t _lastReadTime;
+ float _lastTemperature;
+ float _lastHumidity;
+ PinName _pin;
+ bool _firsttime;
+ int _DHTtype;
+ int DHT_data[6];
+ float CalcTemperature();
+ float CalcHumidity();
+ float ConvertCelciustoFarenheit(float);
+ float ConvertCelciustoKelvin(float);
+};
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PinNames.h Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,170 @@
+/* mbed Microcontroller Library
+ *******************************************************************************
+ * Copyright (c) 2018, STMicroelectronics
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *******************************************************************************
+ */
+
+#ifndef MBED_PINNAMES_H
+#define MBED_PINNAMES_H
+
+#include "cmsis.h"
+#include "PinNamesTypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ ALT0 = 0x100,
+ ALT1 = 0x200,
+ ALT2 = 0x300,
+ ALT3 = 0x400
+} ALTx;
+
+typedef enum {
+ PA_0 = 0x00,
+ PA_1 = 0x01,
+ PA_2 = 0x02,
+ PA_2_ALT0 = PA_2 | ALT0,
+ PA_3 = 0x03,
+ PA_3_ALT0 = PA_3 | ALT0,
+ PA_4 = 0x04,
+ PA_4_ALT0 = PA_4 | ALT0,
+ PA_5 = 0x05,
+ PA_6 = 0x06,
+ PA_7 = 0x07,
+ PA_8 = 0x08,
+ PA_9 = 0x09,
+ PA_10 = 0x0A,
+ PA_11 = 0x0B,
+ PA_12 = 0x0C,
+ PA_13 = 0x0D,
+ PA_14 = 0x0E,
+ PA_15 = 0x0F,
+ PA_15_ALT0 = PA_15 | ALT0,
+
+ PB_0 = 0x10,
+ PB_1 = 0x11,
+ PB_2 = 0x12,
+ PB_3 = 0x13,
+ PB_3_ALT0 = PB_3 | ALT0,
+ PB_4 = 0x14,
+ PB_4_ALT0 = PB_4 | ALT0,
+ PB_5 = 0x15,
+ PB_5_ALT0 = PB_5 | ALT0,
+ PB_6 = 0x16,
+ PB_7 = 0x17,
+
+ PC_14 = 0x2E,
+ PC_15 = 0x2F,
+
+ // ADC internal channels
+ ADC_TEMP = 0xF0,
+ ADC_VREF = 0xF1,
+ ADC_VBAT = 0xF2,
+
+ // Arduino connector namings
+ A0 = PA_0,
+ A1 = PA_1,
+ A2 = PA_3,
+ A3 = PA_4,
+ A4 = PA_5,
+ A5 = PA_6,
+ A6 = PA_7,
+ A7 = PA_2,
+ D0 = PA_10,
+ D1 = PA_9,
+ D2 = PA_12,
+ D3 = PB_0,
+ D4 = PB_7,
+ D5 = PB_6,
+ D6 = PB_1,
+ D7 = PC_14,
+ D8 = PC_15,
+ D9 = PA_8,
+ D10 = PA_11,
+ D11 = PB_5,
+ D12 = PB_4,
+ D13 = PB_3,
+
+ // STDIO for console print
+#ifdef MBED_CONF_TARGET_STDIO_UART_TX
+ STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX,
+#else
+ STDIO_UART_TX = PA_2,
+#endif
+#ifdef MBED_CONF_TARGET_STDIO_UART_RX
+ STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX,
+#else
+ STDIO_UART_RX = PA_15,
+#endif
+
+ // Generic signals namings
+ LED1 = PB_3,
+ LED2 = PB_3,
+ LED3 = PB_3,
+ LED4 = PB_3,
+ SERIAL_TX = STDIO_UART_TX,
+ SERIAL_RX = STDIO_UART_RX,
+ USBTX = STDIO_UART_TX,
+ USBRX = STDIO_UART_RX,
+ I2C_SCL = PB_6,
+ I2C_SDA = PB_7,
+ SPI_MOSI = PB_5,
+ SPI_MISO = PB_4,
+ SPI_SCK = PB_3,
+ SPI_CS = PA_11,
+ PWM_OUT = PB_0,
+
+ /**** USB pins ****/
+ USB_DM = PA_11,
+ USB_DP = PA_12,
+ USB_NOE = PA_13,
+
+ /**** OSCILLATOR pins ****/
+ RCC_OSC32_IN = PC_14,
+ RCC_OSC32_OUT = PC_15,
+
+ /**** DEBUG pins ****/
+ SYS_JTCK_SWCLK = PA_14,
+ SYS_JTDI = PA_15,
+ SYS_JTDO_SWO = PB_3,
+ SYS_JTMS_SWDIO = PA_13,
+ SYS_JTRST = PB_4,
+ SYS_PVD_IN = PB_7,
+ SYS_WKUP1 = PA_0,
+ SYS_WKUP4 = PA_2,
+
+ // Not connected
+ NC = (int)0xFFFFFFFF
+} PinName;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hcsr04.cpp Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,27 @@
+/*#include "hcsr04.h"
+#include "mbed.h"
+
+HCSR04::HCSR04(PinName t, PinName e) : trig(t), echo(e) {}
+ long HCSR04::echo_duration() {
+
+ timer.reset(); //reset timer
+ trig=0; // trigger low
+ wait_us(2); // wait
+ trig=1; // trigger high
+ wait_us(10);
+ trig=0; // trigger low
+ while(!echo); // start pulseIN
+ timer.start();
+ while(echo);
+ timer.stop();
+ return timer.read_us();
+
+}
+
+//return distance in cm
+long HCSR04::distance(){
+ duration = echo_duration();
+ distance_cm = (duration/2)/29.1 ;
+ return distance_cm;
+
+}*/
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hcsr04.h Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,18 @@
+/*#ifndef hcsr04_H
+#define hcsr04_H
+#include "mbed.h"
+
+class HCSR04 {
+ public:
+ HCSR04(PinName t, PinName e);
+ long echo_duration();
+ long distance();
+
+ private:
+ DigitalOut trig;
+ DigitalIn echo;
+ Timer timer;
+ long duration,distance_cm;
+};
+
+#endif*/
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Jul 06 13:59:08 2020 +0000
@@ -0,0 +1,32 @@
+#include "mbed.h"
+#include "DHT.h"
+#include "PinNames.h"
+
+Serial pc(USBTX, USBRX);
+
+DigitalOut myled(LED1);
+
+DHT sensor(PA_0,SEN11301P);
+
+int main() {
+ pc.printf("Test minicom.\r\n");
+ int err;
+ printf("\r\nDHT Test program");
+ printf("\r\n******************\r\n");
+ wait(1); // wait 1 second for device stable status
+ while (1) {
+ myled = 1;
+ err = sensor.readData();
+ if (err == 0) {
+ printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
+ printf("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
+ printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
+ printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
+ printf("Dew point is %4.2f \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
+ printf("Dew point (fast) is %4.2f \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
+ } else
+ printf("\r\nErr %i \n",err);
+ myled = 0;
+ wait(5);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Jul 06 13:59:08 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file