kstmApp/src/pi_2_dht_read.c
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Fri, 14 Aug 2015 11:30:43 +0200
changeset 0 bd6bb22c6533
child 1 7029db7ac3db
permissions -rw-r--r--
First import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     1
// Copyright (c) 2014 Adafruit Industries
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     2
// Author: Tony DiCola
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     3
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     4
// Permission is hereby granted, free of charge, to any person obtaining a copy
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     5
// of this software and associated documentation files (the "Software"), to deal
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     6
// in the Software without restriction, including without limitation the rights
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     7
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     8
// copies of the Software, and to permit persons to whom the Software is
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     9
// furnished to do so, subject to the following conditions:
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    10
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    11
// The above copyright notice and this permission notice shall be included in all
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    12
// copies or substantial portions of the Software.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    13
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    14
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    15
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    16
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    17
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    18
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    19
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    20
// SOFTWARE.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    21
#include <stdbool.h>
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    22
#include <stdlib.h>
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    23
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    24
#include "pi_2_dht_read.h"
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    25
#include "pi_2_mmio.h"
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    26
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    27
// This is the only processor specific magic value, the maximum amount of time to
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    28
// spin in a loop before bailing out and considering the read a timeout.  This should
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    29
// be a high value, but if you're running on a much faster platform than a Raspberry
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    30
// Pi or Beaglebone Black then it might need to be increased.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    31
#define DHT_MAXCOUNT 32000
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    32
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    33
// Number of bit pulses to expect from the DHT.  Note that this is 41 because
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    34
// the first pulse is a constant 50 microsecond pulse, with 40 pulses to represent
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    35
// the data afterwards.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    36
#define DHT_PULSES 41
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    37
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    38
int pi_2_dht_read(int type, int pin, float* humidity, float* temperature) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    39
  // Validate humidity and temperature arguments and set them to zero.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    40
  if (humidity == NULL || temperature == NULL) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    41
    return DHT_ERROR_ARGUMENT;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    42
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    43
  *temperature = 0.0f;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    44
  *humidity = 0.0f;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    45
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    46
  // Initialize GPIO library.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    47
  if (pi_2_mmio_init() < 0) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    48
    return DHT_ERROR_GPIO;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    49
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    50
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    51
  // Store the count that each DHT bit pulse is low and high.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    52
  // Make sure array is initialized to start at zero.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    53
  int pulseCounts[DHT_PULSES*2] = {0};
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    54
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    55
  // Set pin to output.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    56
  pi_2_mmio_set_output(pin);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    57
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    58
  // Bump up process priority and change scheduler to try to try to make process more 'real time'.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    59
  set_max_priority();
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    60
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    61
  // Set pin high for ~500 milliseconds.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    62
  pi_2_mmio_set_high(pin);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    63
  sleep_milliseconds(500);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    64
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    65
  // The next calls are timing critical and care should be taken
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    66
  // to ensure no unnecssary work is done below.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    67
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    68
  // Set pin low for ~20 milliseconds.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    69
  pi_2_mmio_set_low(pin);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    70
  busy_wait_milliseconds(20);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    71
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    72
  // Set pin at input.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    73
  pi_2_mmio_set_input(pin);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    74
  // Need a very short delay before reading pins or else value is sometimes still low.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    75
volatile int i;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    76
  for (i = 0; i < 50; ++i) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    77
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    78
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    79
  // Wait for DHT to pull pin low.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    80
  uint32_t count = 0;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    81
  while (pi_2_mmio_input(pin)) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    82
    if (++count >= DHT_MAXCOUNT) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    83
      // Timeout waiting for response.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    84
      set_default_priority();
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    85
      return DHT_ERROR_TIMEOUT;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    86
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    87
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    88
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    89
  // Record pulse widths for the expected result bits.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    90
  int j;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    91
  for ( j=0; j < DHT_PULSES*2; j+=2) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    92
    // Count how long pin is low and store in pulseCounts[i]
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    93
    while (!pi_2_mmio_input(pin)) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    94
      if (++pulseCounts[i] >= DHT_MAXCOUNT) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    95
        // Timeout waiting for response.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    96
        set_default_priority();
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    97
        return DHT_ERROR_TIMEOUT;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    98
      }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    99
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   100
    // Count how long pin is high and store in pulseCounts[i+1]
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   101
    while (pi_2_mmio_input(pin)) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   102
      if (++pulseCounts[i+1] >= DHT_MAXCOUNT) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   103
        // Timeout waiting for response.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   104
        set_default_priority();
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   105
        return DHT_ERROR_TIMEOUT;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   106
      }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   107
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   108
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   109
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   110
  // Done with timing critical code, now interpret the results.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   111
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   112
  // Drop back to normal priority.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   113
  set_default_priority();
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   114
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   115
  // Compute the average low pulse width to use as a 50 microsecond reference threshold.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   116
  // Ignore the first two readings because they are a constant 80 microsecond pulse.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   117
  uint32_t threshold = 0;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   118
  int k;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   119
  for (k=2; i < DHT_PULSES*2; k+=2) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   120
    threshold += pulseCounts[k];
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   121
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   122
  threshold /= DHT_PULSES-1;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   123
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   124
  // Interpret each high pulse as a 0 or 1 by comparing it to the 50us reference.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   125
  // If the count is less than 50us it must be a ~28us 0 pulse, and if it's higher
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   126
  // then it must be a ~70us 1 pulse.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   127
  uint8_t data[5] = {0};
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   128
  int l;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   129
  for ( l=3; l < DHT_PULSES*2; l+=2) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   130
    int index = (l-3)/16;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   131
    data[index] <<= 1;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   132
    if (pulseCounts[l] >= threshold) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   133
      // One bit for long pulse.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   134
      data[index] |= 1;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   135
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   136
    // Else zero bit for short pulse.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   137
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   138
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   139
  // Useful debug info:
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   140
  //printf("Data: 0x%x 0x%x 0x%x 0x%x 0x%x\n", data[0], data[1], data[2], data[3], data[4]);
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   141
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   142
  // Verify checksum of received data.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   143
  if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   144
    if (type == DHT11) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   145
      // Get humidity and temp for DHT11 sensor.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   146
      *humidity = (float)data[0];
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   147
      *temperature = (float)data[2];
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   148
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   149
    else if (type == DHT22) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   150
      // Calculate humidity and temp for DHT22 sensor.
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   151
      *humidity = (data[0] * 256 + data[1]) / 10.0f;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   152
      *temperature = ((data[2] & 0x7F) * 256 + data[3]) / 10.0f;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   153
      if (data[2] & 0x80) {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   154
        *temperature *= -1.0f;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   155
      }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   156
    }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   157
    return DHT_SUCCESS;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   158
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   159
  else {
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   160
    return DHT_ERROR_CHECKSUM;
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   161
  }
bd6bb22c6533 First import
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   162
}