Доброго времени суток, недавно был на форуме с просьбой о помощи со скетчем для ардуино (1602 i2c, DHT 11, RTC DS1302) Потихоньку начинаю понимать что такое вообще ардуино и программирование Но есть проблема: при выводе данных на дисплей на экране выходит с очень кратким промежутком времени строки: Checksum error, Time out error, Humidity = 95% Temp = 29\1C. С чем это связанно? В мониторе порта все норм. Ссылка на источник со скетчем, библиотекой и статьей: http://zelectro.cc/TemperatureHumiditySensor P. S. (В статье, если смотреть само расположение штырьков идет следующим образом: V, S, G. У меня на датчике идет S, не подписан, -). Скетч компилировался на IDE 1.0.5 Код (C++): //Тестировалось на Arduino IDE 1.0.5 #include <Wire.h> // Добавляем необходимые библиотеки #include <LiquidCrystal_I2C.h> #include <dht11.h> dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN 4 // Датчик DHT11 подключен к цифровому пину номер 4 byte degree[8] = // Битовая маска символа градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея void setup() { lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.createChar(1, degree); // Создаем символ под номером 1 } void loop() { // Выводим показания влажности и температуры lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("Humidity = % "); // Выводим текст lcd.setCursor(11, 0); lcd.print(DHT.humidity, 1); lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("Temp = \1C "); // Выводим текст, \1 - значок градуса lcd.setCursor(11, 1); lcd.print(DHT.temperature,1); int chk; ; // Мониторинг ошибок chk = DHT.read(DHT11_PIN); // Чтение данных switch (chk){ case DHTLIB_OK: break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.print("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.print("Time out error"); break; default: lcd.clear(); lcd.print("Unknown error"); break; } delay(1000); }
Ах да, если я при этом дую на датчик, температура меняется, но это видно лишь на долю секунды, пока видны те строки с показаниями датчика
Всё верно. Ты выводишь показания датчика, тут же стираешь и пишешь что-то ещё. Кстати, сенсору влажности хана.
Ну видимо, иногда датчик не успевает делать преобразования. По-моему ему нужно около 2-х секунд для этого, а у вас стоит 1 секунда задержки. И вообще, строки, отвечающие за вывод ошибок на ЖКИ можно убрать или перенаправить в Serial.
-- Ты, когда ехал сюда, видел вывеску "Склад мёртвых негров"? Не видел? А почему? Да потому, что её нет!!! (с) Криминальное чтиво. Нет в либе функции .begin();
Как это нет?Кто сказал?Брехня всё это.Всё есть! Код (C++): //Работа с датчиком DHT11 //Определяет влажность и температуру //Выдаёт на дисплей по I2C #include <Adafruit_Sensor.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain #include "DHT.h" #define DHTPIN 2 // what pin we're connected to // Uncomment whatever type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 4 (on the right) of the sensor to GROUND // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.init(); lcd.backlight(); Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); float t = dht.readTemperature(); // check if returns are valid, if they are NaN (not a number) then something went wrong! if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); lcd.setCursor(0, 0); lcd.print("error");} //и на LCD } else { lcd.setCursor(0, 0); lcd.print("Hum: %"); lcd.setCursor(11, 0); lcd.print(h); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); lcd.setCursor(0, 1); lcd.print("temp: C"); lcd.setCursor(11, 1); lcd.print(t); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); delay(60000); } }