Датчик температуры DHT11 и TM1637

SlawonK
Offline
Зарегистрирован: 19.01.2020

Почему не работает код

 

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 

 
 
ВЫДАЕТ ОШИБКУ:
exit status 1
'class DHT' has no member named 'temperature'
 
И ВОТ ЭТО: 
 
C:\Users\User\Documents\DT11\DT11.ino: In function 'void loop()':
 
DT11:29:18: error: 'class DHT' has no member named 'temperature'
 
   int temp = dht.temperature;
 
                  ^
 
DT11:30:22: error: 'class DHT' has no member named 'humidity'
 
   int humidity = dht.humidity;
 
                      ^
 
DT11:38:18: error: unable to find numeric literal operator 'operator""digitoneT'
 
   tm1637.display(1.digitoneT);
 
                  ^
 
DT11:39:18: error: unable to find numeric literal operator 'operator""digitwoT'
 
   tm1637.display(2.digitwoT);
 
                  ^
 
DT11:40:22: error: no matching function for call to 'TM1637::display(double)'
 
   tm1637.display(3.12);
 
                      ^
 
In file included from C:\Users\User\Documents\DT11\DT11.ino:3:0:
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:51:10: note: candidate: void TM1637::display(int8_t*)
 
     void display(int8_t DispData[]);
 
          ^
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:51:10: note:   no known conversion for argument 1 from 'double' to 'int8_t* {aka signed char*}'
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:52:10: note: candidate: void TM1637::display(uint8_t, int8_t)
 
     void display(uint8_t BitAddr,int8_t DispData);
 
          ^
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:52:10: note:   candidate expects 2 arguments, 1 provided
 
DT11:44:18: error: unable to find numeric literal operator 'operator""digitoneH'
 
   tm1637.display(1.digitoneH);
 
                  ^
 
DT11:45:18: error: unable to find numeric literal operator 'operator""digitwoH'
 
   tm1637.display(2.digitwoH);
 
                  ^
 
DT11:46:22: error: no matching function for call to 'TM1637::display(double)'
 
   tm1637.display(3.15);
 
                      ^
 
In file included from C:\Users\User\Documents\DT11\DT11.ino:3:0:
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:51:10: note: candidate: void TM1637::display(int8_t*)
 
     void display(int8_t DispData[]);
 
          ^
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:51:10: note:   no known conversion for argument 1 from 'double' to 'int8_t* {aka signed char*}'
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:52:10: note: candidate: void TM1637::display(uint8_t, int8_t)
 
     void display(uint8_t BitAddr,int8_t DispData);
 
          ^
 
C:\Program Files (x86)\Arduino\libraries\TM1637/TM1637.h:52:10: note:   candidate expects 2 arguments, 1 provided
 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ответьте на вопрос: что именно вам непонятно в сообщении "class DHT' has no member named 'temperature'" ?

SlawonK
Offline
Зарегистрирован: 19.01.2020

DHT переменную как правильно прописать, чтоб работало. Дело вроде в ней

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

SlawonK пишет:

Почему не работает код

Потому что вставлен через задницу. А как вставлен, значит так и написан. ИМХО.

SlawonK
Offline
Зарегистрирован: 19.01.2020
#include <DHT.h>
#include <DHT_U.h>
#include <TM1637.h>





#define DHTPIN 2
#define DHTTYPE DHT11
#define CLK 9
#define DIO 8

TM1637 tm1637 (CLK,DIO);
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  // put your setup code here, to run once:
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);

  delay(1500);
}

void loop() {
  // put your main code here, to run repeatedly:
   dht.read(DHTPIN);

  int temp = dht.temperature;
  int humidity = dht.humidity;

  int digitoneT = temp / 10;
  int digittwoT = temp % 10;

  int digitoneH = humidity / 10;
  int digittwoH = humidity % 10;

  tm1637.display(1.digitoneT);
  tm1637.display(2.digitwoT);
  tm1637.display(3.12);

  delay (5000);

  tm1637.display(1.digitoneH);
  tm1637.display(2.digitwoH);
  tm1637.display(3.15);
  
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Жесть. Хаотичный набор букв с множеством ошибок. Навскидку: ошибки в строках 29, 30, 38, 39, 40,  44, 45, 46. Исправляйте, смотрите, какие методы и члены классов доступны в используемых библиотеках, смотрите примеры к используемым библиотекам, ищите разницу. Не стоит вслепую тыкаться в надежде, что оно само как-то заработает - это не тот случай.

SlawonK
Offline
Зарегистрирован: 19.01.2020

А что именно неправильно в строках: 29, 30. Переменная dht? Если да, то как ее записать правильно?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

SlawonK пишет:

А что именно неправильно в строках: 29, 30. Переменная dht? Если да, то как ее записать правильно?

не переменная, а обращение к несуществующим членам класса. Давайте не будем гадать, а просто возьмём - и посмотрим на документацию и примеры к библиотеке, ок?

ramstudio
ramstudio аватар
Offline
Зарегистрирован: 20.04.2020
#include "TM1637.h"   // Подключаем библиотеку для работы с модулем
#include "DHT.h"
//{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//0~9,A,b,C,d,E,F
// Настройка символов для последующего вывода на дислей
//Определяем пины для подключения к плате Arduino
#define CLK 3
#define DIO 2
#define DHTPin 2 // Pin sensor
#define DHTTYPE DHT11   // DHT 11
//Создаём объект класса TM1637, в качестве параметров
//передаём номера пинов подключения
TM1637 tm1637(CLK, DIO);

void setup()
{
  //Инициализация модуля
  tm1637.init();
  //Установка яркости горения сегментов
  /*
     BRIGHT_TYPICAL = 2 Средний
     BRIGHT_DARKEST = 0 Тёмный
     BRIGHTEST = 7      Яркий
  */
  tm1637.set(BRIGHT_TYPICAL);
}
void loop()
{
  DHT dht(DHTPin, DHTTYPE);
int Temperature = dht.readTemperature(); // Gets the values of the temperature
int Humidity = dht.readHumidity(); // Gets the values of the humidity 

//int Temperature;
int digitoneT = Temperature /10;
int digittwoT = Temperature % 10;

int digitoneH = Humidity / 10;
int digittwoH = Humidity % 10;

tm1637.display(1, digitoneT);
tm1637.display(2, digittwoT);
tm1637.display(3, 12); //  C

delay (5000);

tm1637.display(1, digitoneH);
tm1637.display(2, digittwoH);
tm1637.display(3, 15);

delay (5000);  
}