Как заставить работать DHT22 и DHT11 с ATMEGA328b (8 mHz)

AiR_WiZArD
Offline
Зарегистрирован: 27.03.2017

DHT22/11 установленые на Atmega 328 без кристала отображают нули, при чем с кристалом все отлично работает! Ошибку при работа не выдает, как с отключеным датчиком.

Использую простенький отладочный скетч:

#include "DHT.h"

#define DHTPIN 10

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
  dht.begin();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
  }
}

В меня тапками не кидайте, с ардуино только 2 недели сижу)

AiR_WiZArD
Offline
Зарегистрирован: 27.03.2017

Разобрался. Вместо

DHT dht(DHTPIN, DHTTYPE);

вставил

DHT dht(DHTPIN, DHTTYPE, 3);

 

popUP
Offline
Зарегистрирован: 09.10.2014

А можно ли подключить одновременно DHT11 и DHT22 к одной ардуинке?

как быть со строкой #define DHTTYPE DHT22 или DHT 11

Drunken0Master
Offline
Зарегистрирован: 23.10.2018

Доброго времени суток! 

Уперся в такую же самую проблему на atmega328 3.3В 8mhz. Когда отлаживал на UNO все работал, как только перенес на Pro mini датчик перестал читаться. Пробовал объявлять так, но не помогло, все равно получаю нули:

DHT dht(DHTPIN, DHTTYPE, 3);

Код передатчика:

#include <SPI.h>      // библиотека для протокола SPI
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>     // библиотека для радио модуля
#include <math.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include "DHT.h"

#define DHTPIN 9
#define DHTTYPE DHT11

RF24 radio(7,6); // PIN 9, 10 (CE, CSN) PIN PRO mini 7, 6
//DHT dht(9, DHT11, 3); // PIN9 connect DHT
DHT dht(DHTPIN, DHTTYPE, 3);



const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
int data[3]; // массив передаваемых данных
int Vin;  // значение напряжения питания
int Vnormal = 1; // нормальное питание
int Vlow = 0; // батарея села
int i;

/// Измерение напряжения питания
static int vccRead(byte us = 250)
{
  ADMUX = 1 << REFS0; // опорное напряжение - Vcc
  ADMUX |= 0x0E;    // объект измерения - внутренний источник стабилизированного напряжения 1.1В
  delayMicroseconds(us);
  ADCSRA |= 1 << ADSC;       // запуск АЦ-преобразования
  while (ADCSRA & (1 << ADSC)); // и ожидание его завершения
  word x = ADC;
  return x ? (1100L * 1023) / x : -1;
}
/////////

/// Watchdog interrupt
ISR(WDT_vect)
{
  wdt_disable();  // disable watchdog
}
/////////

/// Watchdog ON
void WatchdogEnable(const byte interval)
{
  MCUSR = 0;                          // reset various flags
  WDTCSR |= 0b00011000;               // see docs, set WDCE, WDE
  WDTCSR =  0b01000000 | interval;    // set WDIE, and appropriate delay
  wdt_reset();
  set_sleep_mode (SLEEP_MODE_PWR_SAVE); // SLEEP_MODE_PWR_SAVE или SLEEP_MODE_PWR_DOWN
  sleep_mode();            // now goes to Sleep and waits for the interrupt
}
//////////

/// Настройка 
void setup()
{
  dht.begin();
  radio.begin();       // включаем радио модуль
  radio.setChannel(9); // выбираем канал (от 0 до 127)
  radio.setDataRate(RF24_1MBPS); // скорость: RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
  radio.setPALevel(RF24_PA_HIGH); // мощность: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM
  radio.openWritingPipe(pipe);      // открываем трубу на передачу
  radio.stopListening();
}
//////////

/// START
void loop()
{
  wdt_disable();
  Vin = vccRead();
  if (Vin <= 4300)
  {
    data[0] = Vlow; // Батарея села
  }
  else 
  {
    data[0] = Vnormal; // Нормальное напряжение питания
  }
  delay(1000);
  data[1] = float(dht.readTemperature()); // записываем температуру
  data[2] = float(dht.readHumidity()); // записываем влажность
  radio.powerUp(); // NRF24 ON
  delay(500);
  radio.write(&data, sizeof(data));
  radio.powerDown(); //NRF24 OFF
  delay(2000);
  //for (i = 0; i <=38; i++) // (i<38) ~ 5 minut OFF ALL 
  //{
    WatchdogEnable(0b100001);  // 8 seconds
  //}
}
///////////
// sleep bit patterns:
//  1 second:  0b000110
//  2 seconds: 0b000111
//  4 seconds: 0b100000
//  8 seconds: 0b100001
///////////