Как заставить работать DHT22 и DHT11 с ATMEGA328b (8 mHz)
- Войдите на сайт для отправки комментариев
Пнд, 27/03/2017 - 10:51
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 недели сижу)
Разобрался. Вместо
вставил
А можно ли подключить одновременно DHT11 и DHT22 к одной ардуинке?
как быть со строкой #define DHTTYPE DHT22 или DHT 11
Доброго времени суток!
Уперся в такую же самую проблему на atmega328 3.3В 8mhz. Когда отлаживал на UNO все работал, как только перенес на Pro mini датчик перестал читаться. Пробовал объявлять так, но не помогло, все равно получаю нули:
Код передатчика:
#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 ///////////