Alexandru Albul Albul / Mbed 2 deprecated ECE4180Final_11u24

Dependencies:   mbed Stepper_Motor_X27168

Files at this revision

API Documentation at this revision

Comitter:
aalbul3
Date:
Sun Apr 28 23:15:33 2019 +0000
Parent:
0:71dc3ae7e2eb
Child:
2:12b24ae1dc9f
Commit message:
Yoyo

Changed in this revision

Dht11.cpp Show annotated file Show diff for this revision Revisions of this file
Dht11.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Dht11.cpp	Sun Apr 28 23:15:33 2019 +0000
@@ -0,0 +1,89 @@
+#include "Dht11.h"
+
+Dht11::Dht11(PinName const &p) : _pin(p) {
+    // Set creation time so we can make 
+    // sure we pause at least 1 second for 
+    // startup.
+    _timer.start();
+    
+    _temperature = 0;
+    _humidity = 0;
+}
+
+int Dht11::read()
+{
+    // BUFFER TO RECEIVE
+    uint8_t bits[5];
+    uint8_t cnt = 7;
+    uint8_t idx = 0;
+
+    // EMPTY BUFFER
+    for (int i=0; i< 5; i++) bits[i] = 0;
+    
+    // Verify sensor settled after boot
+    while(_timer.read_ms() < 1500) {}
+    _timer.stop();
+
+    // Notify it we are ready to read
+    _pin.output();
+    _pin = 0;
+    wait_ms(18);
+    _pin = 1;
+    wait_us(40);
+    _pin.input();
+
+    // ACKNOWLEDGE or TIMEOUT
+    unsigned int loopCnt = 10000;
+    while(_pin == 0)
+        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
+
+    loopCnt = 10000;
+    while(_pin == 1)
+        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
+
+    // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
+    for (int i=0; i<40; i++)
+    {
+        loopCnt = 10000;
+        while(_pin == 0)
+            if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
+
+        //unsigned long t = micros();
+        Timer t;
+        t. start();
+
+        loopCnt = 10000;
+        while(_pin == 1)
+            if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
+
+        if (t.read_us() > 40) bits[idx] |= (1 << cnt);
+        if (cnt == 0)   // next byte?
+        {
+            cnt = 7;    // restart at MSB
+            idx++;      // next byte!
+        }
+        else cnt--;
+    }
+
+    // WRITE TO RIGHT VARS
+    // as bits[1] and bits[3] are allways zero they are omitted in formulas.
+    _humidity    = bits[0]; 
+    _temperature = bits[2]; 
+
+    uint8_t sum = bits[0] + bits[2];  
+
+    if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
+    return DHTLIB_OK;
+}
+
+float Dht11::getFahrenheit() {
+    return((_temperature * 1.8) + 32);
+}
+
+int Dht11::getCelsius() {
+    return(_temperature);
+}
+
+int Dht11::getHumidity() {
+    return(_humidity);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Dht11.h	Sun Apr 28 23:15:33 2019 +0000
@@ -0,0 +1,74 @@
+#ifndef DHT11_H
+#define DHT11_H
+
+#include "mbed.h"
+
+#define DHTLIB_OK                0
+#define DHTLIB_ERROR_CHECKSUM   -1
+#define DHTLIB_ERROR_TIMEOUT    -2
+
+/** Class for the DHT11 sensor.
+ * 
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "Dht11.h"
+ *
+ * Serial pc(USBTX, USBRX);
+ * Dht11 sensor(PTD7);
+ * 
+ * int main() {
+ *     sensor.read()
+ *     pc.printf("T: %f, H: %d\r\n", sensor.getFahrenheit(), sensor.getHumidity());
+ * }
+ * @endcode
+ */
+class Dht11
+{
+public:
+    /** Construct the sensor object.
+     *
+     * @param pin PinName for the sensor pin.
+     */
+    Dht11(PinName const &p);
+    
+    /** Update the humidity and temp from the sensor.
+     *
+     * @returns
+     *   0 on success, otherwise error.
+     */
+    int read();
+    
+    /** Get the temp(f) from the saved object.
+     *
+     * @returns
+     *   Fahrenheit float
+     */
+    float getFahrenheit();
+    
+    /** Get the temp(c) from the saved object.
+     *
+     * @returns
+     *   Celsius int
+     */
+    int getCelsius();
+    
+    /** Get the humidity from the saved object.
+     *
+     * @returns
+     *   Humidity percent int
+     */
+    int getHumidity();
+
+private:
+    /// percentage of humidity
+    int _humidity;
+    /// celsius
+    int _temperature;
+    /// pin to read the sensor info on
+    DigitalInOut _pin;
+    /// times startup (must settle for at least a second)
+    Timer _timer;
+};
+
+#endif
--- a/main.cpp	Tue Oct 20 00:41:08 2015 +0000
+++ b/main.cpp	Sun Apr 28 23:15:33 2019 +0000
@@ -1,19 +1,90 @@
 #include "mbed.h"
 #include "StepperMotor_X27168.h"
-
-StepperMotor_X27168 smotor(p25, p26, p23, p22);
+#include "Dht11.h"
+/*
+StepperMotor_X27168 smotor(p26, p25, p34, p36);
+StepperMotor_X27168 smotor2(p5,p6,p14,p25);
+DigitalOut motor1(p30);
+DigitalOut motor2(p8);
 
 int main() {
-
-    smotor.step_position(180);
-    wait(0.5);
-    
-    smotor.step_position(100);
-    wait(0.5);
+   
+   motor1=0;
+   motor2=1;
+   // smotor.set_speed(1200);
+   smotor.set_max_position(180);
+   int i=0;
+   while (1){
+   while (i<180) {
+       smotor2.step(0);
+       wait(.1);
+       i++;
+       }
+   while (i>0) {
+       smotor2.step(1);
+       wait(.1);
+       i--;
+       }
     
-    smotor.angle_position(270);
-    wait(0.5);
+    }
+}
+*/
+
+
+
+/*
+ Serial pc(USBTX, USBRX);
+ Dht11 sensor(p21);
+
+ 
+ int main() {
+     while (1) {
+     sensor.read();
+     pc.printf("T: %f, H: %d\r\n", sensor.getFahrenheit(), sensor.getHumidity());
+     wait(1);
+     }
+
+ }
+ 
+ */
+ 
+ 
+ 
+ Serial device(p9,p10); //9-10 11u;    28-27 1768
+ volatile char   c = '\0'; // Initialized to the NULL character
+ DigitalOut      led(LED1);
+ DigitalOut      mbedp(p22);
+void onCharReceived()
+{
+    c = device.getc();
+}
+
+int main() {
     
-    smotor.step_position(0);
-    wait(0.5);
+    mbedp = 1;
+    device.attach(&onCharReceived);
+ 
+    while (true)
+    {
+        if (c == '1')
+        {
+            c = '\0';  // To avoid execution of this block until a '1' is received again.
+            led = 1;
+            mbedp = 0;
+            wait(4);
+            led = 0;
+            mbedp = 1;
+        }
+ 
+        if (c == '0')
+        {
+            c = '\0';  // To avoid execution of this block until a '0' is received again.
+            led = 0;
+        }
 }
+
+
+
+}
+ 
+ 
\ No newline at end of file