Как переработать скетч (добавить вывод данных на дисплей)?

DiMan
Offline
Зарегистрирован: 20.04.2016

Есть рабочий скетч вывода данных с DHT11 на монитор порта:

// 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() {
  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");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
  }
}

Нужно дописать его, дабы данные с DHT выводились не только на монитор порта, но и на LCD (2004).

Как вывести заданную информацию на дисплей я то понимаю, только вот как его настроить, инициализировать. 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Читали про  это?  http://www.arduino.cc/en/Reference/LiquidCrystal

Нашли библиотеку?
Запускали примеры?
Тогда самое время это сделать.

DiMan
Offline
Зарегистрирован: 20.04.2016

Тут дисплей напрямую подключают, а я по шине I2C. Однако немного разобрался.

trembo пишет:

Читали про это? http://www.arduino.cc/en/Reference/LiquidCrystal

Выдаёт ошибку:

sketch_v0.2.ino: In function 'void setup()':
sketch_v0.2.ino:46: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'
note: candidates are: void LiquidCrystal_I2C::begin()
Насколько я понял, ошибка состоит в том, что в 46-й строке должно быть пустоты LiquidCrystal_I2C начать("характеристики дисплея"). Сменил на:

LiquidCrystal_I2C begin(20, 4);
,вылезло в 4 раза больше ошибок. Подскажите пожалуйста, где я накосячил. Напишите названия строк и в чём состоят ошибки. Заранее благодарен.

Вот код:




//#include <LiquidCrystal_I2C.h>

// 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);

LiquidCrystal_I2C lcd(0x27, 20, 4);








void setup() 

{
  
  Serial.begin(9600); 
  Serial.println("DHTxx test!");

  dht.begin();
  
  
  
  lcd.begin(20, 4);
  lcd.setCursor(0, 1);
  lcd.print("Hello Dmitry"); // Print a message to the LCD.
  

}






void loop() 

{
  lcd.clear();
  lcd.setCursor(0, 1);
  
  // 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");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C"); 
    
    
    


  }
  
}
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

DiMan, теперь открывай файл LiquidCrystal_I2C.h и смотри как там объявлен метод begin()...

bwn
Offline
Зарегистрирован: 25.08.2014

Andy пишет:

DiMan, теперь открывай файл LiquidCrystal_I2C.h и смотри как там объявлен метод begin()...

Издеваетесь.))))

DiMan, открывайте примеры из библиотеки и по образу и подобию.))))

DiMan
Offline
Зарегистрирован: 20.04.2016

Сразу подключил библиотеку  LiquidCrystal_I2C.

Заглянул в пример, там настраивается дисплей. Мой вариант:

LiquidCrystal_I2C lcd(0x27, 20, 4);

В сетапе вкл. дисплей:

lcd.begin();

Прописываем параметры подсветки:

lcd.backlight();

Далее в примере высвечивается хеллоу ворд ("lcd.print("Hello, world!");"), а у меня должно быть высвечено приветсвие и в лупе крутится снятие показателей с датчика DHT11:

lcd.print("Hello Dmitry");

Далее loop. Чистим дисплей:

lcd.clear();

Выставляем курсор, выводим название "температура", показатели температуры с DHT и знак цельсия:

  lcd.setCursor(0, 0);
  lcd.print("Tem: "); 
  lcd.print(t); 
  lcd.print("C "); 
 Выставляем курсор, выводим название "влажность", показатели влажности с DHT и знак процентов:
  lcd.setCursor(0, 1);
  lcd.print("Hum: "); 
  lcd.print(h); 
  lcd.print("%");

Вуаля! Не работает!

Ошибка:

LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::begin()':
LiquidCrystal_I2C.cpp:35: error: 'Wire' was not declared in this scope
LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::expanderWrite(uint8_t)':
LiquidCrystal_I2C.cpp:223: error: 'Wire' was not declared in this scope
 
Можете исправить и скинуть уже готовый код? Уже второй день нубом бьюсь об i2c, LCD. Заранее премного благодарен.
 
Вот мой недокод с недоскетча:
//недоскетч аля Димас

#include <LiquidCrystal_I2C.h>

// 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);

LiquidCrystal_I2C lcd(0x27, 20, 4);





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

  dht.begin();
  
  lcd.begin();
  lcd.backlight();
  lcd.print("Hello Dmitry");
}

void loop()
{
  lcd.clear();
  // 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");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
    
    
    lcd.setCursor(0, 0);
    lcd.print("Tem: "); 
    lcd.print(t); 
    lcd.print("C "); 
    
    lcd.setCursor(0, 1);
    lcd.print("Hum: "); 
    lcd.print(h); 
    lcd.print("%");
    
  }
}

 

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

DiMan пишет:
LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::begin()':

LiquidCrystal_I2C.cpp:35: error: 'Wire' was not declared in this scope

Теперь открываем LiquidCrystal_I2C.cpp и смотрим метод begin(), он начинается так:

void LiquidCrystal_I2C::begin() {
  Wire.begin();
  ...

На этот Wire в строке 35 и ругается компилятор. В 4 строке LiquidCrystal_I2C.cpp подключен Wire.h

Ищешь wire.cpp и смотришь как там объявлена переменная Wire, вполне возможно она там названа по другому.

В общем, без понимания С++ тебе будет тяжело.

DiMan
Offline
Зарегистрирован: 20.04.2016

cpp? Вы шутите? 11кл, мы даже в паскале программ не пишем (только сейчас пойдут простые вроде "рассчитать периметр квадрата" и пр.)

Andy пишет:

В общем, без понимания С++ тебе будет тяжело.

bwn
Offline
Зарегистрирован: 25.08.2014

DiMan пишет:

cpp? Вы шутите? 11кл, мы даже в паскале программ не пишем (только сейчас пойдут простые вроде "рассчитать периметр квадрата" и пр.)

И что такого? Разве теперь запрещено читать литературу сверх программы?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

#include "Wire.h" надо добавить толи перед толи после подключения #include "LiquidCristall_I2C" , ни помню. Само оно не подключается. Тоже наступал на эти грабли. :)

Araris
Offline
Зарегистрирован: 09.11.2012

Arhat109-2 пишет:

толи перед толи после подключения #include "LiquidCristall_I2C"

Перед.

Дятел
Offline
Зарегистрирован: 27.05.2017

Помогите найти аналогичное описание для LiquidCrystal_I2C

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Дятел пишет:

Помогите найти аналогичное описание для LiquidCrystal_I2C

"Page not found" можно найти где угодно.

А вообще - смотрите заголовочный файл библиотеки LiquidCrystal_I2C.h - все основные сведения содержатся там. А если нужны тонкости - тогда LiquidCrystal_I2C.cpp