Ещё раз опрос нескольких ds18b20
- Войдите на сайт для отправки комментариев
Сб, 04/08/2018 - 16:48
Накопировал из кусков скетч показывает адреса всех датчиков но температуру одного.
#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); } }
В первом скетче печатается одна температура - как написано, так и работает.
Во втором скетче написан какой-то несусветный бред, но толком сказать ничего нельзя, т.к. скетч неполный, что означает "Добавляю цикл" не знает никто, куда добавляю, как добавляю, одному богу исвестно. В любом случае это бред, т.к. делается попытка читать не с разных адресов, а с разных байтов одного и того же адреса.
т.к. делается попытка читать не с разных адресов, а с разных байтов одного и того же адреса.
А я то дурак! =)