DS18B20

Тема в разделе "Arduino & Shields", создана пользователем Perun61, 15 ноя 2012.

  1. Slaiterx

    Slaiterx Гик

    пасибо буду пробывать
     
  2. Slaiterx

    Slaiterx Гик

    но тут тоже к одному пину подключино а мне нужно к разным
     
  3. serg_admin

    serg_admin Гик

    Ты сначала от адресов избавься.
    Потом будем прикручивать несколько датчиков.
    Да и если адреса в скетче не будет - то датчик кто угодно поменять может.
     
  4. serg_admin

    serg_admin Гик

    Вот на разных пинах. Правда проверить неначем.
    Код (C++):
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <LiquidCrystal.h>

    OneWire oneWire1(15); // вход датчиков 18b20
    DallasTemperature ds1(&oneWire1);

    OneWire oneWire2(10); // вход датчиков 18b20
    DallasTemperature ds2(&oneWire2);

    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

    DeviceAddress sensor1 = {0x28, 0xA8, 0x3E, 0xF9, 0x05, 0x0, 0x0, 0x12};
    DeviceAddress sensor2 = {0x28, 0xE6, 0xBD, 0x3B, 0x05, 0x0, 0x0, 0xCF};

    void setup() {
    //  Serial.begin(9600);
      ds1.begin();
      ds2.begin();
      lcd.begin(16, 2);
      lcd.clear();
    }

    void loop() {
      ds1.requestTemperatures(); // считываем температуру с датчиков
        lcd.setCursor(0, 0);
        lcd.print("Sensor 1: ");
        lcd.print(ds1.getTempC(sensor1)); // отправляем температуру
        lcd.print("C");

      ds2.requestTemperatures(); // считываем температуру с датчиков
        lcd.setCursor(0, 1);
        lcd.print("Sensor 2: ");
        lcd.print(ds2.getTempC(sensor2));
        lcd.print("C");

    }
     
  5. Slaiterx

    Slaiterx Гик

    наконец нашол что искал
    Код (C++):
    #include <OneWire.h>
    #include <DallasTemperature.h>

    #define ONE_WIRE_BUS_1 2
    #define ONE_WIRE_BUS_2 4

    OneWire oneWire_in(ONE_WIRE_BUS_1);
    OneWire oneWire_out(ONE_WIRE_BUS_2);

    DallasTemperature sensor_inhouse(&oneWire_in);
    DallasTemperature sensor_outhouse(&oneWire_out);

    void setup(void)
    {
        Serial.begin(9600);
        Serial.println("Dallas Temperature Control Library Demo - TwoPin_DS18B20");

        sensor_inhouse.begin();
        sensor_outhouse.begin();
    }

    void loop(void)
    {
        Serial.print("Requesting temperatures...");
        sensor_inhouse.requestTemperatures();
        sensor_outhouse.requestTemperatures();
        Serial.println(" done");

        Serial.print("Inhouse: ");
        Serial.println(sensor_inhouse.getTempCByIndex(0));

        Serial.print("Outhouse: ");
        Serial.println(sensor_outhouse.getTempCByIndex(0));
    }
     
  6. smirnovboris

    smirnovboris Нуб

    Здравствуйте. Поделитесь пожалуйста своим изменённым скетчем с десятыми градуса. Самому мне этого не победить никак. Заранее очень благодарен... smirnovboris@mail.ru
     
    Последнее редактирование: 12 май 2017
  7. Miheeei

    Miheeei Нерд

    Здравствуйте.
    Подскажите пожалуйста, Работаю с датчиком DS18B20, библиотека "DallasTemperature.h".
    Почему во время конвертации температуры весь скетч подтормаживает на 750 мс.?
    Из даташита видно что время конвертации 750 мс., получается что я запросила температуру "sensors.requestTemperatures();", и пока я жду ответ от датчика скетч стоит как при "delay". Это даже заметно в мониторенге com порта. Как устранить данную проблему?
     
  8. rkit

    rkit Гуру

    В библиотеке можно отключить задержку. Но тогда нужно самостоятельно отслеживать, чтобы 750 мс прошло.
     
  9. Miheeei

    Miheeei Нерд

    Знать бы еще где найти этот параметр, Я разархивировала библиотеку а там куча папок и файлов...
     

    Вложения:

  10. Tomasina

    Tomasina Сушитель лампочек Модератор

  11. rkit

    rkit Гуру

    В .h-файле, который вы включаете, находится перечисление всего, что есть в библиотеке. Там же обычно бывают комментарии.
     
  12. solonovich

    solonovich Нерд

    Возьми эту библиотеку <OneWire.h>
    там задержка delay(1000); прямо в тексте программы
    выкинь её, и сама отслеживай время.
     
  13. solonovich

    solonovich Нерд

    попробуй так
    Код (C++):
     sensors.setWaitForConversion(false);  // отключить ожидание
    вроде как в таком случае ждать не будет
     
  14. Miheeei

    Miheeei Нерд

    В <OneWire.h> delay не нашла.
    Вечером буду дома попробую
    Код (C++):
    sensors.setWaitForConversion(false);
    По крайней мере компиляция прошла успешно. Дома залью проверю.

    Подскажите а эта пауза формируется на стадии запроса или ответа?
     
  15. Limoney

    Limoney Гик

    Посмотрите пример WaitForConversion2
    В этом примере, как раз отключается пауза ожидания
    методом sensors.setWaitForConversion(false);,
    пауза измерения температуры заменяется на millis();
     
  16. Miheeei

    Miheeei Нерд

    Нашла пример:
    Код (C++):
    sensors.setWaitForConversion(false);
    sensors.requestTemperatures();
    sensors.setWaitForConversion(true);
    Интересно зачем после запроса включают ожидание?
    Разве нельзя его совсем выключить и использовать свой таймер при помощи millis?

    Смотрю есть много примеров где вообще отказались от библиотеки dallas.
    Достаточно только OneWire
     
  17. Limoney

    Limoney Гик

    Можно пример WaitForConversion2
    Вполне достаточно OneWire, наверное, дело вкуса
     
  18. solonovich

    solonovich Нерд

    c dallas проще работать для тех кто не понимает что написано :)
     
  19. Limoney

    Limoney Гик

    Пауза для измерения температуры все равно должна быть в независимости от библиотеки

    Код (C++):
    //
    // Sample of using Async reading of Dallas Temperature Sensors
    //
    #include <OneWire.h>
    #include <DallasTemperature.h>

    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 2

    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);

    // Pass our oneWire reference to Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    DeviceAddress tempDeviceAddress;

    int  resolution = 12;
    unsigned long lastTempRequest = 0;
    int  delayInMillis = 0;
    float temperature = 0.0;
    int  idle = 0;
    //
    // SETUP
    //
    void setup(void)
    {
      Serial.begin(115200);
      Serial.println("Dallas Temperature Control Library - Async Demo");
      Serial.print("Library Version: ");
      Serial.println(DALLASTEMPLIBVERSION);
      Serial.println("\n");

      sensors.begin();
      sensors.getAddress(tempDeviceAddress, 0);
      sensors.setResolution(tempDeviceAddress, resolution);

      sensors.setWaitForConversion(false);
      sensors.requestTemperatures();
      delayInMillis = 750 / (1 << (12 - resolution));
      lastTempRequest = millis();

      pinMode(13, OUTPUT);
    }

    void loop(void)
    {
     
      if (millis() - lastTempRequest >= delayInMillis) // waited long enough??
      {
        digitalWrite(13, LOW);
        Serial.print(" Temperature: ");
        temperature = sensors.getTempCByIndex(0);
        Serial.println(temperature, resolution - 8);
        Serial.print("  Resolution: ");
        Serial.println(resolution);
        Serial.print("Idle counter: ");
        Serial.println(idle);  
        Serial.println();  

        idle = 0;
        sensors.requestTemperatures();

        lastTempRequest = millis();
      }

      digitalWrite(13, HIGH);
      // we can do usefull things here
      // for the demo we just count the idle time in millis
      delay(1);
      idle++;
    }
     
     
  20. Limoney

    Limoney Гик

    Полезно документация на датчик http://www.ugolok-mastera.ru/ds18b20-rus_pic_v2.pdf