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