Ещё раз опрос нескольких ds18b20

JKQ
Offline
Зарегистрирован: 04.08.2018

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

#include <OneWire.h>                        // Подключаем библиотеку Wire
#include <LiquidCrystal.h>              // Подключаем библиотеку LiquidCrystal
#include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature
#define PIN_DS18B20 9                         // Указываем, к какому выводу подключена DQ

// При помощи пина 3 мы будем управлять подсветкой
int backlight = 3;
// Инициализируем пины, по которым будет производиться обмен данными с дисплеем
LiquidCrystal lcd(4, 6, 10, 11, 12, 13);
// Создаем объект OneWire
OneWire oneWire(PIN_DS18B20);
// Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire.
DallasTemperature dallasSensors(&oneWire);

// Специальный объект для хранения адреса устройства
DeviceAddress sensorAddress;

void setup(void){
// Включаем подсветку
    pinMode(backlight, OUTPUT);
    digitalWrite(backlight, HIGH);
// Выставляем количество колонок и строк
  lcd.begin(16, 2); // Выставляем количество колонок и строк
// Выполняем поиск устрйоств на линии
  dallasSensors.begin();
// Выбор места курсора (символ 0-16, строка 0-1)
lcd.setCursor(0, 0);
lcd.print("Naydeno");
lcd.setCursor(8, 0);
// Выводим количество устрйоств на линии
lcd.print(dallasSensors.getDeviceCount(), DEC);
delay(2000);
  // Определяем режим питания (по отдельной линии или через паразитное питание по линии данных)
  Serial.print("Режим паразитного питания: ");
  if (dallasSensors.isParasitePowerMode()) Serial.println("ВКЛЮЧЕН");
  else Serial.println("ВЫКЛЮЧЕН");

  // Раскомментируйте, если хотите задать адрес устройства вручную
  //sensorAddress = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };

  // Поиск устройства:
  // Ищем адрес устройства по порядку (индекс задается вторым параметром функции)
  if (!dallasSensors.getAddress(sensorAddress, 0));

  // Запрос адреса ds18b20, который мы нашли
    printAddress(sensorAddress);

  // Устанавливаем разрешение датчика в 12 бит (мы могли бы установить другие значения, точность уменьшится, но скорость получения данных увеличится
  dallasSensors.setResolution(sensorAddress, 12);
 }

void loop(void){
  // Запрос на измерения датчиком температуры Просим ds18b20 собрать данные
   dallasSensors.requestTemperatures();
  //  Запрос на получение сохраненного значения температуры
  printTemperature(sensorAddress);
  }

// Вспомогательная функция печати значения температуры для устрйоства
void printTemperature(DeviceAddress deviceAddress){
  float tempC = dallasSensors.getTempC(deviceAddress);
lcd.setCursor(0, 1);
lcd.print("Temperatura");
lcd.setCursor(12, 1);
lcd.print(tempC);
delay(2000);
}

// Вспомогательная функция для отображения адреса датчика ds18b20
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    {
lcd.setCursor(0, 0);
lcd.print("Address");
lcd.setCursor(9, 0);
lcd.print(deviceAddress[i], HEX);
delay(2000);
    }
  }
}

Добавляю цикл и перестаёт работать. Помогите пожалуйста.

 for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    {
      float tempC = dallasSensors.getTempC(deviceAddress[i]);
lcd.setCursor(0, 1);
lcd.print("Term");
lcd.setCursor(12, 1);
lcd.print(tempC);
delay(1000);
    }
  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В первом скетче печатается одна температура - как написано, так и работает.

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

JKQ
Offline
Зарегистрирован: 04.08.2018

ЕвгенийП пишет:

 т.к. делается попытка читать не с разных адресов, а с разных байтов одного и того же адреса.

А я то дурак! =)