Нужна помощь

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

Собирался снимать с DHT11 показатели и по i2c выводить их на LCD 2004

Собрал вот такой скетч:

1.       #include <Wire.h>

2.       #include <LiquidCrystal_I2C.h>

3.       // include the library code:

4.       #include "pitches.h"

5.       #include "stDHT.h"

6.       DHT dht(DHT11); // Указать датчик DHT11, DHT21, DHT22

7.       // Установить ЖК-адрес для 0x27 для отображения 20 символов и 4 линии

8.       LiquidCrystal_I2C lcd(0x27, 20, 4); 

9.       void setup()

10.   {

11.       // initialize the LCD

12.     lcd.begin();

  1.     // Turn on the blacklight and print a message.

14.     lcd.noBacklight();

15.     lcd.clear();

16.     lcd.setCursor(0, 1);

17.         // настройка UART (связь с компьютером - через виртуальный COM-порт посредством USB)

18.     Serial.begin(9600);

19.       // настройка вывода датчика DHT11

20.     pinMode(6, INPUT);

21.     digitalWrite(6, HIGH);

22.     lcd.clear();

23.     lcd.backlight();

24.   }

25.   void loop()

26.   {

27.     int t = sens.readTemperature(2); // чтение датчика на пине 6

28.     int h = sens.readHumidity(2);    // чтение датчика на пине 6

29.     // передача данных о температуре и влажности по виртуальному COM-порту

30.     Serial.print("Hum: ");

31.     Serial.print(h);

32.     Serial.print(" %");

33.     Serial.print("Temp: ");

34.     Serial.print(t);

35.     Serial.println(" C ");

36.     // отображение данных о температуре и влажности на знакосинтезирующем ЖКИ

  1.   // set the cursor to column 0, line 0
  2.   // (note: line 1 is the second row, since counting begins with 0):

39.     lcd.setCursor(0, 0);

40.     lcd.print("Tem: ");

41.     lcd.print(t);

42.     lcd.print("C ");

43.     lcd.setCursor(0, 1);

44.     lcd.print("Hum: ");

45.     lcd.print(h);

46.     lcd.print("%");

  1.   // print the number of seconds since reset:

48.     //lcd.print(millis() / 1000);

49.     delay(1000);

50.   }

 

Выдаёт сл.ошибку в 6-й строке:

sketch_2.ino:5:21: error: pitches.h: No such file or directory
sketch_2.ino:6:19: error: stDHT.h: No such file or directory
sketch_2:7: error: 'DHT' does not name a type
sketch_2.ino: In function 'void loop()':
sketch_2:45: error: 'sens' was not declared in this scope
 
Поправите?
 
T.Rook
Offline
Зарегистрирован: 05.03.2016

DiMan пишет:

Выдаёт сл.ошибку в 6-й строке:

sketch_2.ino:5:21: error: pitches.h: No such file or directory
sketch_2.ino:6:19: error: stDHT.h: No such file or directory
sketch_2:7: error: 'DHT' does not name a type
sketch_2.ino: In function 'void loop()':
sketch_2:45: error: 'sens' was not declared in this scope
 
Поправите?
 

Не найдены и соответственно не подключены библиотеки: pitches.h и stDHT.h. Соответственно не смогли инициализировать DHT в 6 строке. Ну и sens используемый в loop нигде не объявлен. Кстати, по идее раз в 6 строке объявили dht то и в 27, 28 надо использовать "dht." а не "sens." судя по примеру

А "pitches.h" Вам  зачем? Нигде ведь не используете.

и вот: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

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

поправил в 6-й строке на:

       DHT sens(DHT11)

убрал 4-ю строку. выдаёт ошибку в той же 6-й строчке:

sketch_2:7: error: no matching function for call to 'DHT::DHT(int)'
C:\Users\root\Documents\Arduino\libraries\DHT-sensor-library-master/DHT.h:40: note: candidates are: DHT::DHT(uint8_t, uint8_t, uint8_t)
C:\Users\root\Documents\Arduino\libraries\DHT-sensor-library-master/DHT.h:38: note:                 DHT::DHT(const DHT&)
sketch_2:10: error: expected ',' or ';' before 'LiquidCrystal_I2C'
sketch_2.ino: In function 'void setup()':
sketch_2:20: error: 'lcd' was not declared in this scope
sketch_2.ino: In function 'void loop()':
sketch_2:57: error: 'lcd' was not declared in this scope
 
Насколько я понял, тут что-то с обозначением пинов DHT. Но в примере стоит " DHT sens(DHT11)".
  


 

 

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

DiMan, не стесняйся открывать DHT.h и DHT.cpp и смотреть как устроен этот класс.

Конструктор объявлен так:

DHT(uint8_t pin, uint8_t type, uint8_t count=6);

первый параметр это пин, на который у тебя подключен датчик.

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

Спасибо. Теперь проблема с этим:

 int DHT = 2;
  int t = readTemperature, sens DHT (uint8_t, uint8_t, uint8_t);
  int h = readTemperature, sens DHT (uint8_t, uint8_t, uint8_t);

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

sketch_2.ino: In function 'void loop()':
sketch_2:46: error: 'readTemperature' was not declared in this scope
sketch_2:46: error: expected initializer before 'DHT'
sketch_2:48: error: expected initializer before 'DHT'
 

Что значит не был объявлен readTemperature? Где его объявлять? и почему он пишет, что нет инициализатора перед DHT? Я же обозначил:

 int DHT = 2;

Вообщем объясните новичку.

 

Полный програмный код:

#include <DHT.h>

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


DHT sens(uint8_t pin, uint8_t type, uint8_t count=6);


// Установить ЖК-адрес для 0x27 для отображения 20 символов и 4 линии
LiquidCrystal_I2C lcd(0x27, 20, 4);
  
 
  
  
  
  
void setup() 
{
    // initialize the LCD
  lcd.begin();

    // Turn on the blacklight and print a message.
  lcd.noBacklight();
  lcd.clear();
  lcd.setCursor(0, 1);
  
    // настройка UART (связь с компьютером - через виртуальный COM-порт посредством USB)
  Serial.begin(9600);
    // настройка вывода датчика DHT11
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  lcd.clear();
  lcd.backlight();
}





void loop()

{
  int DHT = 2;
  //int t = sens.readTemperature(2); // чтение датчика на пине 2
  int t = readTemperature, sens DHT (uint8_t, uint8_t, uint8_t);
  //int h = sens.readHumidity(2);    // чтение датчика на пине 2
  int h = readTemperature, sens DHT (uint8_t, uint8_t, uint8_t);
  
  // передача данных о температуре и влажности по виртуальному COM-порту
  Serial.print("Hum: ");
  Serial.print(h);
  Serial.print(" %");
  Serial.print("Temp: ");
  Serial.print(t);
  Serial.println(" C ");
  
  // отображение данных о температуре и влажности на знакосинтезирующем ЖКИ
  // set the cursor to column 0, line 0
  // (note: line 1 is the second row, since counting begins with 0):
  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("%"); 

  // print the number of seconds since reset:
  //lcd.print(millis() / 1000);
  
  delay(1000);
}

 

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

DiMan, без понимания С++ будет тяжело... Как-то так должно выглядеть:

#include "DHT.h"

#define PIN 2
#define TYPE DHT11

DHT sensor(PIN, TYPE);

void setup()
{
  sensor.begin();
}

void loop()
{
  float t = sensor.readTemperature();
}