Arduino. Термометр + гигрометр + психрометр на DHT11 И LCD1602 Keypad Shield
- Войдите на сайт для отправки комментариев
Пнд, 09/03/2015 - 13:04
Здравствуйте.
Наконецто нашол код на т этот девайс но выходит ошибки компиляции.
на видео у чела вроде все .
сылка на сайт http://tim4dev.com/2015/02/arduino-lcd-1602-displej-s-klaviaturoj/
Вод сам скетч.
/* | |
* LCD 1602 with Keypad, DHT11 | |
* Copyright 2015 Yuriy Tim http://tim4dev.com | |
* | |
* Кнопки на клавиатуре: | |
* LEFT, UP - показать температуру/влажность в течение 10 (DELAY_SHOW) сек | |
* RIGHT, DOWN - показать точки росы в течение 10 (DELAY_SHOW) сек | |
* SELECT - перечитать информацию с датчика температуры/влажности воздуха | |
*/ | |
#include "dht11.h" | |
#include <LiquidCrystal.h> | |
#define DHT11PIN 2 | |
dht11 DHT11; | |
// обычно LiquidCrystal lcd(12, 11, 5, 4, 3, 2); | |
// но у нас с кнопками | |
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | |
// определяем кнопки | |
const byte bRIGHT = 0; | |
const byte bUP = 1; | |
const byte bDOWN = 2; | |
const byte bLEFT = 3; | |
const byte bSELECT= 4; | |
const byte bNONE = 99; | |
int keyIN = -1; | |
// различные задержки | |
const int DELAY_KEY = 1500; // после надписи какая кнопка нажата | |
const int DELAY_SHOW= 10000; // сколько времени показывать данные | |
const int DELAY_FOR = 50; // для цикла for | |
// Символ градуса, создан с помощью | |
// Custom Character Generator for HD44780 LCD Modules http://omerk.github.io/lcdchargen/ | |
byte tempChar[8] = {0b00110,0b01001,0b01001,0b00110,0b00000,0b00000,0b00000,0b00000}; | |
int temperature, humidity; | |
double dewP, dewPFast; | |
// Общее количество итераций/замеров | |
int count = 0; | |
/**************************************************************************** | |
* Главная программа | |
****************************************************************************/ | |
// загрузка, установка | |
void setup() { | |
lcd.begin(16, 2); | |
lcd.clear(); | |
lcd.createChar(0, tempChar); | |
lcd.setCursor(0,0); // col, row | |
lcd.print("DHT11+LCD+Keypad"); | |
lcd.setCursor(0,1); // col, row | |
lcd.print("tim4dev.com"); | |
delay(3000); | |
} | |
// главный цикл | |
void loop() | |
{ | |
int i; | |
lcd.clear(); | |
// если ошибки при считывании датчика DHT11 | |
if (!readDTH11() ) | |
return; // начать новый loop() | |
showTemperatureHumidity(); | |
for (i = 0; i <= DELAY_SHOW; i = i + DELAY_FOR) { | |
actionKey(); | |
delay(50); | |
} | |
showDP(); | |
for (i = 0; i <= DELAY_SHOW; i = i + DELAY_FOR) { | |
actionKey(); | |
delay(50); | |
} | |
} | |
/**************************************************************************** | |
* Функции | |
****************************************************************************/ | |
// считать информацию с датчика температуры/влажности воздуха | |
boolean readDTH11() { | |
count++; | |
int chk = DHT11.read(DHT11PIN); | |
// если ошибки при считывании датчика DHT11 | |
if (!checkError(chk) ) | |
return false; // начать новый loop() | |
temperature = DHT11.temperature; | |
humidity = DHT11.humidity; | |
dewP = dewPoint(temperature, humidity); | |
dewPFast = dewPointFast(temperature, humidity); | |
return true; | |
} | |
// dewPoint function NOAA | |
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm | |
// reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm | |
// | |
double dewPoint(double celsius, double humidity) | |
{ | |
// (1) Saturation Vapor Pressure = ESGG(T) | |
double RATIO = 373.15 / (273.15 + celsius); | |
double RHS = -7.90298 * (RATIO - 1); | |
RHS += 5.02808 * log10(RATIO); | |
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ; | |
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ; | |
RHS += log10(1013.246); | |
// factor -3 is to adjust units - Vapor Pressure SVP * humidity | |
double VP = pow(10, RHS - 3) * humidity; | |
// (2) DEWPOINT = F(Vapor Pressure) | |
double T = log(VP/0.61078); // temp var | |
return (241.88 * T) / (17.558 - T); | |
} | |
// delta max = 0.6544 wrt dewPoint() | |
// 6.9 x faster than dewPoint() | |
// reference: http://en.wikipedia.org/wiki/Dew_point | |
double dewPointFast(double celsius, double humidity) | |
{ | |
double a = 17.271; | |
double b = 237.7; | |
double temp = (a * celsius) / (b + celsius) + log(humidity*0.01); | |
double Td = (b * temp) / (a - temp); | |
return Td; | |
} | |
boolean checkError(int chk) { | |
lcd.setCursor(0,0); // col, row | |
switch (chk) | |
{ | |
case DHTLIB_OK: | |
return true; | |
break; | |
case DHTLIB_ERROR_CHECKSUM: | |
lcd.print("Checksum error "); | |
delay(30000); | |
return false; | |
break; | |
case DHTLIB_ERROR_TIMEOUT: | |
lcd.print("Time out error "); | |
delay(30000); | |
return false; | |
break; | |
default: | |
lcd.print("Unknown error "); | |
delay(30000); | |
return false; | |
break; | |
} | |
return true; | |
} | |
// вывести на экран температуру/влажность | |
void showTemperatureHumidity() { | |
lcd.clear(); | |
lcd.setCursor(0,0); // col, row | |
lcd.print("Temp "); | |
lcd.print((int)temperature); | |
lcd.write((byte)0); | |
lcd.print("C ("); lcd.print(count); lcd.print(")"); | |
lcd.setCursor(0,1); // col, row | |
lcd.print("Humidity "); lcd.print((int)humidity); lcd.print("% "); | |
} | |
void showDP() { | |
lcd.clear(); | |
lcd.setCursor(0,0); // col, row | |
lcd.print("DewPoint "); lcd.print(dewP); | |
lcd.write((byte)0); lcd.print("C"); | |
lcd.setCursor(0,1); // col, row | |
lcd.print("DP Fast "); lcd.print(dewPFast); | |
lcd.write((byte)0); lcd.print("C "); | |
} | |
// читает какая кнопка нажата | |
// использован код Mark Bramwell, July 2010 | |
int readLCDbtn() | |
{ | |
keyIN = analogRead(0); // чтение нажатой кнопки с аналогового пина 0 | |
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741 | |
// we add approx 50 to those values and check to see if we are close | |
if (keyIN > 1000) return bNONE; // We make this the 1st option for speed reasons since it will be the most likely result | |
if (keyIN < 50) return bRIGHT; | |
if (keyIN < 195) return bUP; | |
if (keyIN < 380) return bDOWN; | |
if (keyIN < 555) return bLEFT; | |
if (keyIN < 790) return bSELECT; | |
return bNONE; | |
} | |
/* | |
* Производит действия при нажатии на кнопки | |
* | |
* Кнопки на клавиатуре: | |
* LEFT, UP - показать температуру/влажность в течение 10 (DELAY_SHOW) сек | |
* RIGHT, DOWN - показать точки росы в течение 10 (DELAY_SHOW) сек | |
* SELECT - перечитать информацию с датчика температуры/влажности воздуха | |
*/ | |
void actionKey() { | |
int lcd_key; | |
lcd_key = readLCDbtn(); | |
lcd.setCursor(0, 0); // col, row | |
switch (lcd_key) | |
{ | |
case bLEFT: | |
{ | |
lcd.print("LEFT "); | |
delay(DELAY_KEY); | |
showTemperatureHumidity(); | |
break; | |
} | |
case bUP: | |
{ | |
lcd.print("UP "); | |
delay(DELAY_KEY); | |
showTemperatureHumidity(); | |
break; | |
} | |
case bRIGHT: | |
{ | |
lcd.print("RIGHT "); | |
delay(DELAY_KEY); | |
showDP(); | |
break; | |
} | |
case bDOWN: | |
{ | |
lcd.print("DOWN "); | |
delay(DELAY_KEY); | |
showDP(); | |
break; | |
} | |
case bSELECT: | |
{ | |
lcd.print("SELECT "); | |
delay(DELAY_KEY); | |
readDTH11(); // считать информацию с датчика температуры/влажности воздуха | |
showTemperatureHumidity(); | |
break; | |
} | |
case bNONE: | |
{ | |
break; | |
} | |
} | |
} | |
А какие именно ошибки компиляции нужно догадаться самостоятельно ?
dht11 DHT11;
передвинул на #define DHT11PIN 2 dht11 DHT11;
теперь еще вылезла ошибка
int chk = DHT11.read(DHT11PIN);
чет во это смущает sketch_mar09a_DHT11_LCD.cpp:11:19: error: dht11.h: No such file or directory
либо названия файла нето либо деректория нета
а ты библиотеку ставил?
"либо названия файла нето либо деректория нета" Именно. Проверите наличие \arduino\libraries\dht11\dht11.h - его у Вас нет. Зато должен быть \arduino\libraries\DHTsensor\DHT.h И в списке установленных библиотек уже должна быть стандартная "DHTsensor".
Поменяйте в скетче #include "dht11.h" на #include "DHT.h" и попробуйте скомпилировать.
Все добавил
Всеровно затыкается на int chk = DHT11.read(DHT11PIN);
ещё на красном фоне написано 'DHT11' was not declared in this scope
а внизу на черном фоне
Может код фальшивка
Сразу скомпилился. Код в порядке. С библиотекой оттуда-же. http://tim4dev.com/2015/02/arduino-lcd-1602-displej-s-klaviaturoj/
Попробуйте наверху добавить библиотеку. Она есть там у вас?
Сразу скомпилился. Код в порядке. С библиотекой оттуда-же. http://tim4dev.com/2015/02/arduino-lcd-1602-displej-s-klaviaturoj/
Попробуйте наверху добавить библиотеку. Она есть там у вас?
А в какой версией компелировал?
1.0.6 библиотеку проверьте.
Добавил idDHT11
и все также
Добавил idDHT11
и все также
Скриншот папки "документы пользователя>\Arduino\libraries" в студию.
Нет у Вас библиотеки DHT с файлом dht11.h.
Все сделал СПАСИБО.
Библиотеки все добавил и все заработало во всех версиях
Именно так! Нет у него библиотеки.
Библиотеки могут располагаться в двух местах:
1. В "системной" папке Ардуино /libraries. Там те, что идут с инсталляцией. Лучше в папку Ардуино ничего лишнего не класть.
2. В папке со скетчами /libraries. Расположение её редактируется в настройках.
И лучше не использовать всякие там мой_документы, а сознательно перенести её куда-нибудь в более доступное и безопасное место. Я всё держу в ДропБоксе. И библиотеки ( мои) и скетчи. Чего и вам желаю.