DS18B20

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

  1. ИгорьК

    ИгорьК Гуру

    Спасибо ещё раз.
     
  2. alp69

    alp69 Форумчанин

     
  3. alp69

    alp69 Форумчанин

    Так и пишите туда, куда пишут те, кому в том числе...
     
    Последнее редактирование: 17 мар 2017
  4. ostrov

    ostrov Гуру

    То есть функция tempa() не возвращает данные при вызове, как это у функций обычно делается, а записывает их в глобальную переменную?
     
  5. Slaiterx

    Slaiterx Гик

    Немогу негде найти пример чтобы допустим три датчика ds18b20 подключить к разным пинам ардуино
     
  6. Tomasina

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

    а зачем к разным пинам?
     
  7. Slaiterx

    Slaiterx Гик

    Чтобы если что поменять без проблем мог любой человек
     
  8. Slaiterx

    Slaiterx Гик

    Ну и чтобы непутатся какой за что отвечает
     
  9. Tomasina

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

    создаешь несколько экземпляров классов, по количеству датчиков.
    Вместо
    Код (C++):
    OneWire  ds(10);
    пишешь
    Код (C++):
    OneWire  ds1(10);  // 10 - номер пина
    OneWire  ds2(11);
    OneWire  ds3(9);
    Соответственно, все дальнейшие куски кода создаешь в нескольких экземплярах.

    P.S. Да, это маразм ;)
     
  10. Slaiterx

    Slaiterx Гик

    Просто там где будет стоять термостат я зимой появится не смогу и датчики поменять а дедушка с бабушкой смогут
     
  11. Slaiterx

    Slaiterx Гик

    А прям нету поного кода а то я пока неочень сильно разбераюсь поменять код добавить могу но с нуля пока немогу
     
  12. serg_admin

    serg_admin Гик

    А как программа будет определять с каким датчиком работать? и что ты уже на программил?
     
  13. serg_admin

    serg_admin Гик

    Код (C++):
    OneWire ds[3] = { // Создаем шины
      OneWire(9),
      OneWire(10),
      OneWire(11),
    };
    DallasTemperature sensors[3] = { // Инициализируем градусники
      DallasTemperature(&ds[0]),
      DallasTemperature(&ds[1]),
      DallasTemperature(&ds[2]),
    };

     
    Код (C++):

    int avr = 0;
    for (byte i = 0; i < 3 ; i++) {
      sensors[i].requestTemperatures();
      avr +=  sensors[i].getTempCByIndex(0); // Суммируем показания всех градусников
    }
    avr = avr/3; // Средняя температура по больнице
     
     
    ИгорьК и Tomasina нравится это.
  14. ИгорьК

    ИгорьК Гуру

    Полезная фича, если работает и не тормозит, очень полезная. Респект.
     
  15. Slaiterx

    Slaiterx Гик

    Мне надо каждый датчик выводить отдельно на дисплей 1602
     
  16. serg_admin

    serg_admin Гик

    Ты начни, как-нибудь. Пусть с одним датчиком, но что бы уже работало.
    И скинь сюда рабочий скетч. А то как-то вилами на воде.
     
  17. Slaiterx

    Slaiterx Гик

    вот типо этого но чтобы адреса не прописывать и на разные пины
    Код (C++):
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <LiquidCrystal.h>

    OneWire oneWire(15); // вход датчиков 18b20
    DallasTemperature ds(&oneWire);
    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);
      ds.begin();
      lcd.begin(16, 2);
      lcd.clear();
    }

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

    }
     
  18. serg_admin

    serg_admin Гик

    Пробовал убрать адреса и запрашивать по индексу?
     
  19. Slaiterx

    Slaiterx Гик

    это как
     
  20. serg_admin

    serg_admin Гик

    Сможешь скрестить со своим скетчем? Здесь без адресов.