Как обьеденить DS18B20 с TM1637 ?

Vitas_007
Offline
Зарегистрирован: 03.10.2016

Библиотеку из кложений по ссылке скачивали? У меня компиляция без ошибок проходит.

Vitas_007
Offline
Зарегистрирован: 03.10.2016

Vitas_007 пишет:

Библиотеку из кложений по ссылке скачивали? У меня компиляция без ошибок проходит.

Только вы говорили что датчик 22-й, а тут библиотека под 11 - могут косячки вылезти в виде неотоброжения минусовой и т.д.

P@vel
Offline
Зарегистрирован: 27.04.2016

Всё, заработало!

Для этого понадобилось переустановить программу, исключить все рускоязычные папки, использовать 2 DHT библиотеки и вкоде внести изменения:

добавил

#define DHTTYPE DHT22 

изменил

с  DHT.read11(dht_pin);

 на DHT.read22(dht_pin);

заработало!

Всем спасибо! 

Следующим шагом будет отправка и получение данных через WIFI.

lar-x
Offline
Зарегистрирован: 16.11.2016

Скиньте сюда скетч, пожалуйста.

По результату хочу получить отображение температуры с десятыми долями градусов и отрицательними значениями.

rus2014
Offline
Зарегистрирован: 11.09.2014

Помогите пожалуйста, неполучается вывести символ градуса в tm1637, температуру с датчика ds18s20 выводит, также выводит символ отрицательной температуры в первый разряд, второй пустой, третий и четвертый показывают температуру, мне бы хотелось в последний разряд вставить символ градуса, а показания температуры на вторй и третий разряд, из примеров библиотеки  отдельно без кода датчика символ градуса выводится в четвертый разряд но скетч, как понял использует скрол(передвижение знаков), из постов выше, думаю надо выводить знаки в каждый  разряд по отдельности? подскажите куда дальше копать? первый скетч термометр, второй вывод символа градуса.



// dallas ds18s20 ds1820
#include "TM1637.h" // Подключаем библиотеку TM1637.h
#include <OneWire.h>
#define CLK 3 // К этому пину подключаем CLK
#define DIO 2 // К этому пину подключаем DIO
OneWire  ds(10);  // линия 1-Wire будет на pin 10

TM1637 disp(CLK, DIO);

void setup() // Выполняем процедуру 1 раз
{
  // Устанавливаем яркость от 0 до 7
  disp.set(5);
  disp.init(D4056A);
  Serial.begin(9600);
}

void loop() // Повторяем в бесконечном цикле
{
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
    // Serial.print("No more addresses.\n");
    ds.reset_search();
    return;
  }

  //Serial.print("R=");
  for ( i = 0; i < 8; i++) {
    //Serial.print(addr[i], HEX);
    //Serial.print(" ");
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
    //Serial.print("CRC is not valid!\n");
    return;
  }

  if ( addr[0] != 0x10) {
    Serial.print("Device is not a DS18S20 family device.\n");
    return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // запускаем конвертацию

  delay(1000);     // скорее всего достаточно 750ms
  // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);         // считываем ОЗУ датчика

  //Serial.print("P=");
  //Serial.print(present,HEX);
  // Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // обрабатываем 9 байт
    data[i] = ds.read();
    //Serial.print(data[i], HEX);
    // Serial.print(" ");
  }
  //Serial.print(" CRC=");
  //Serial.print( OneWire::crc8( data, 8), HEX);
  // Serial.println();

  // высчитываем температуру
  int HighByte, LowByte, TReading, Tc_100;
  LowByte = data[0];
  //Serial.print("LB= ");Serial.print(LowByte,HEX);
  HighByte = data[1];
  // Serial.print(" HB= ");Serial.print(HighByte,HEX);
  TReading = (HighByte << 8) + LowByte;
  Tc_100 = TReading / 2;
  Serial.print(" T = ");
  Serial.print(Tc_100);
  Serial.println();
  disp.display(Tc_100 ); // Выводим значение
}

// скетч из примеров библиотеки TM1637.h выводит символ градуса в последний разряд
#include "TM1637.h" // Подключаем библиотеку
#define CLK 3 // К этому пину подключаем CLK
#define DIO 2 // К этому пину подключаем DIO

TM1637 disp(CLK, DIO);

void setup() // Выполняем процедуру 1 раз
{
  // Устанавливаем яркость от 0 до 7
  disp.set(5);
  disp.init(D4056A);
}

void loop() // Повторяем в бесконечном цикле
{

  int8_t NumTab[] = {18};//значение º
  int8_t ListDisp[4];
  unsigned char i = 0;
  unsigned char count = 0;
  delay(150);
  while (1)
  {
    i = count;
    count ++;
    if (count == sizeof(NumTab)) count = 0;
    for (unsigned char BitSelect = 0; BitSelect < 4; BitSelect ++)
    {
      ListDisp[BitSelect] = NumTab[i];
      i ++;
      if (i == sizeof(NumTab)) i = 0;
    }
    //disp.display(0,Disp[0]);
    //disp.display(1,Disp[1]);
    //disp.display(2,Disp[2]);
    //disp.display(0,); // Выводим значение º
    disp.display(3, ListDisp[3]);
    // delay(300);
  }


}

 

P@vel
Offline
Зарегистрирован: 27.04.2016

И снова сдрасте, вернулся к этому скетчу и не получается опять выдаёт ошибку(((

#include <SimpleDHT.h>

#include "DHT.h"
#include <DHT.h>
#include "TM1637.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
 
 
#define DHTPIN 2 
 #define DHTTYPE DHT22
#define dht_pin 2 // Pin sensor is connected to
#define CLK 3//Pins for TM1637       
#define DIO 4
 
TM1637 tm1637(CLK,DIO);
DHT dht(DHTPIN, DHTTYPE);
 
 
void setup(){
  
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL); 
  //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
 
  delay(1500);//Delay to let system boot
 
 
}//end "setup()"
 
 
 
void loop(){
 
  //Start of Program 
 
  DHT.read22(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,digittwoT);
    tm1637.display(3,12);  // put a C at the end
    
    delay (3000);
    
    tm1637.display(1,23); 
    tm1637.display(2,digitoneH); 
    tm1637.display(3,digittwoH);
 
    
  //Wait 3 seconds before accessing sensor again.
 
  //Fastest should be once every two seconds.
    delay(3000);
 
}// end loop() 

Библиотеки разные пробовал применять, не компилируется и всё

Подскажите пожалуйста что делать?

b707
Offline
Зарегистрирован: 26.05.2017

P@vel пишет:

Подскажите пожалуйста что делать?

Как минимум описать подробно, что за ошибка

P@vel
Offline
Зарегистрирован: 27.04.2016

Ругается таким вот образом

C:\Users\836D~1\AppData\Local\Temp\arduino_modified_sketch_362910\sketch_jul03a.ino: In function 'void loop()':
 
sketch_jul03a:38: error: expected unqualified-id before '.' token
 
   DHT.read22(DHTPIN);
 
      ^
 
sketch_jul03a:41: error: expected primary-expression before '.' token
 
  int temp = DHT.temperature;
 
                ^
 
sketch_jul03a:42: error: expected primary-expression before '.' token
 
  int humidity = DHT.humidity;
 
                    ^
 
Несколько библиотек найдено для "DHT.h"
 Используется: C:\sketch\libraries\DHT_sensor_library
Не используется: C:\Program Files (x86)\Arduino\libraries\DHT-sensor-library-master
exit status 1
expected unqualified-id before '.' token
 
strarbit
Offline
Зарегистрирован: 12.06.2016

แทน Dht. -> dht.

P@vel
Offline
Зарегистрирован: 27.04.2016

Пробовал и большими и маленькими

DHT.read22(dht_pin);

dht.read22(dht_pin);

DHT.read22(DHTPIN);

DHT.read(DHTPIN);

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

P@vel пишет:

Пробовал и большими и маленькими

DHT.read22(dht_pin);

dht.read22(dht_pin);

DHT.read22(DHTPIN);

DHT.read(DHTPIN);

А примеры к библиотеке вашей есть? Как там сделано?

T.Rook
Offline
Зарегистрирован: 05.03.2016

P@vel пишет:

Пробовал и большими и маленькими

DHT.read22(dht_pin);

dht.read22(dht_pin);

DHT.read22(DHTPIN);

DHT.read(DHTPIN);

Ы :) а так:

dht.read22(DHTPIN)

Ибо:

#define DHTPIN 2 //большими
DHT dht(DHTPIN, DHTTYPE); //маленькими

+  у Вас найдено две библиотеки "DHT.h" - оставьте только одну.

Да и что то мне подсказывает чтонапдергали Вы из разных примеров.  Потому что для библиотеки где используется создание:

DHT dht(DHTPIN, DHTTYPE);

читают так:

  // 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();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

Из всех библ:

01 #include <SimpleDHT.h>
02  
03 #include "DHT.h"
04 #include <DHT.h>

Оставьте только строку 4.  И одну библиотеку и читайте как в примере к ней.

 

P@vel
Offline
Зарегистрирован: 27.04.2016

Попробовал вашь вариант, баловался по всякому, но так и не компилируется.

Попробовал переустановить программу, не помогло.

Вот что у меня получилось


#include <DHT.h>
#include "TM1637.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
 
 
#define DHTPIN 2 
 #define DHTTYPE DHT22
#define dht_pin 2 // Pin sensor is connected to
#define CLK 3//Pins for TM1637       
#define DIO 4
 
TM1637 tm1637(CLK,DIO);
DHT dht(DHTPIN, DHTTYPE);
 
 
void setup(){
  
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL); 
  //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
 
  delay(1500);//Delay to let system boot
 
 
}//end "setup()"
 
 
 
void loop(){
 
  //Start of Program 
 
dht.read(dht_pin);
 
 
 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,digittwoT);
    tm1637.display(3,12);  // put a C at the end
    
    delay (3000);
    
    tm1637.display(1,23); 
    tm1637.display(2,digitoneH); 
    tm1637.display(3,digittwoH);
 
    
  //Wait 3 seconds before accessing sensor again.
 
  //Fastest should be once every two seconds.
    delay(3000);
 
}// end loop() 

в ответ он мне заругался так

C:\Users\836D~1\AppData\Local\Temp\arduino_modified_sketch_269326\dht22.ino: In function 'void loop()':
 
dht22:39: error: 'class DHT' has no member named 'temperature'
 
  int temp = dht.temperature;
 
                 ^
 
dht22:40: error: 'class DHT' has no member named 'humidity'
 
  int humidity = dht.humidity;
 
                     ^
 
exit status 1
'class DHT' has no member named 'temperature'
 
b707
Offline
Зарегистрирован: 26.05.2017

P@vel,

Вам же в сообщении #62 T.Rook дал и ссылку на библиотеку и ссылку на пример. Где вы в этом примере видите dht.temperature или dht.humidity? Сделайте как в примере

 

P@vel
Offline
Зарегистрирован: 27.04.2016

По поводу библяотеки, у меня она не компилирует элементарнй DHTtester пока не удалишь DHT_U.cpp

И как я понял меня упрекнули в том что я на выдёргивал с разных примеров.

Как я понимаю Serial.println - это вывод на монитор (что мне не надо) что в свою очередь я удаляю

ну и последнее на что заругался компилятор

C:\Users\836D~1\AppData\Local\Temp\arduino_modified_sketch_51003\dht22.ino: In function 'void loop()':
 
dht22:56: error: invalid operands of types 'float' and 'int' to binary 'operator%'
 
  int digittwoT = t % 10;
 
                      ^
 
dht22:59: error: invalid operands of types 'float' and 'int' to binary 'operator%'
 
  int digittwoH = h % 10;
 
                      ^
 
dht22:78: error: expected '}' at end of input
 
 }// end loop() 
 
 ^
 
exit status 1
invalid operands of types 'float' and 'int' to binary 'operator%'
 
Проценты ему не нравятся... Мне тоже не нравятся проценты у кредита и нечего, работаю же!
 
b707
Offline
Зарегистрирован: 26.05.2017

P@vel пишет:

И как я понял меня упрекнули в том что я на выдёргивал с разных примеров.

Я бы скорее сказал. что ваша беда - вы пытаетесь программировать методом тыка. Не подошли большие буквы DHT - попробуем маленькие? - так?

А почитать? хотя бы те крохи, что по ссылке "Программирование" вверху форума . Например описание оператора взятия остатка "%". Этот оператор неприменим к типу float - о чем вам компилятор и пишет.

P@vel, судя по вашим сообщениям, вы воюете с этим несчестным скетчем с октября. За это время уже можно было выучить C++. Ну. или в вашем случае - понять, что "программирование - не мое"

P@vel
Offline
Зарегистрирован: 27.04.2016

Вы совершенно правы, дело в том что я возвращаюсь к этому вопросу по остаточному принципу т.е. сперва повседневные дела и заботы. Знаю что нужно учить библию, т.к. это далеко не единственная идея по благоустройсту, но нужно начинать с малого, метод тыка вовсе не так плох и даёт свои результаты.