Ты сначала от адресов избавься. Потом будем прикручивать несколько датчиков. Да и если адреса в скетче не будет - то датчик кто угодно поменять может.
Вот на разных пинах. Правда проверить неначем. Код (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"); }
наконец нашол что искал Код (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)); }
Здравствуйте. Поделитесь пожалуйста своим изменённым скетчем с десятыми градуса. Самому мне этого не победить никак. Заранее очень благодарен... smirnovboris@mail.ru
Здравствуйте. Подскажите пожалуйста, Работаю с датчиком DS18B20, библиотека "DallasTemperature.h". Почему во время конвертации температуры весь скетч подтормаживает на 750 мс.? Из даташита видно что время конвертации 750 мс., получается что я запросила температуру "sensors.requestTemperatures();", и пока я жду ответ от датчика скетч стоит как при "delay". Это даже заметно в мониторенге com порта. Как устранить данную проблему?
В библиотеке можно отключить задержку. Но тогда нужно самостоятельно отслеживать, чтобы 750 мс прошло.
В .h-файле, который вы включаете, находится перечисление всего, что есть в библиотеке. Там же обычно бывают комментарии.
Возьми эту библиотеку <OneWire.h> там задержка delay(1000); прямо в тексте программы выкинь её, и сама отслеживай время.
попробуй так Код (C++): sensors.setWaitForConversion(false); // отключить ожидание вроде как в таком случае ждать не будет
В <OneWire.h> delay не нашла. Вечером буду дома попробую Код (C++): sensors.setWaitForConversion(false); По крайней мере компиляция прошла успешно. Дома залью проверю. Подскажите а эта пауза формируется на стадии запроса или ответа?
Посмотрите пример WaitForConversion2 В этом примере, как раз отключается пауза ожидания методом sensors.setWaitForConversion(false);, пауза измерения температуры заменяется на millis();
Нашла пример: Код (C++): sensors.setWaitForConversion(false); sensors.requestTemperatures(); sensors.setWaitForConversion(true); Интересно зачем после запроса включают ожидание? Разве нельзя его совсем выключить и использовать свой таймер при помощи millis? Смотрю есть много примеров где вообще отказались от библиотеки dallas. Достаточно только OneWire
Пауза для измерения температуры все равно должна быть в независимости от библиотеки Код (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++; }