DS1820B возвращает только -127
Я использовал один датчик DS1820B в схеме макетной платы AVR, и он там работает, теперь я попытался подключить его к мегаплате Arduino с помощью кода, приведенного ниже, а также другой библиотеки, расположенной ниже.
В настоящее время контакт данных подключен к контакту 10 на плате Arduino, но я также попробовал контакт 2, как показано на этом рисунке:
https://lastminuteengineers.com /wp-content/uploads/2018/12/Wiring-Multiple-DS18B20-Temperature-Sensors-With-Arduino.png
я изменил: #define ONE_WIRE_BUS 10 соответственно.
После этого я поставил чип обратно на макетную плату, и он все еще работает. Я также попробовал это с резистором 4,7 кОм на линии передачи данных в качестве подтяжки .... все еще -127.
Есть идеи?
#include <SPI.h>
#include <SD.h>
/********************************************************************/
// Сначала подключаем библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
/********************************************************************/
// Провод данных подключен к контакту 2 на Arduino
#define ONE_WIRE_BUS 10
/********************************************************************/
// Настройка экземпляра oneWire для связи с любыми устройствами OneWire
// (не только температурные микросхемы Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS);
/********************************************************************/
// Передаем нашу ссылку oneWire в Dallas Temperature.
DallasTemperature sensors(&oneWire);
/********************************************************************/
void setup() {
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
sensors.begin();
}
void loop() {
Serial.print("Temperature is: ");
Serial.print(sensors.getTempCByIndex(0)); // Почему "по индексу"?
// Вы можете иметь более одного DS18B20 на одной шине.
// 0 относится к первой микросхеме на проводе
delay(1000);
}
второй код:
#include "DS18B20Events.h"
// Пин для DS18B20
#define ONE_WIRE_BUS 10
/********************************************************************/
// Настройка экземпляра oneWire для связи с любыми устройствами OneWire
// (не только температурные микросхемы Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS);
// Инициируем DallasTemperature
DallasTemperature dallasTemperature(&oneWire);
//Инициализируем термометр с индексом 0 (по умолчанию)
DS18B20Events thermometer(0);
// функция настройки запускается один раз, когда вы нажимаете сброс или питание платы
void setup() {
Serial.begin(9600);
DS18B20Events::setup(&dallasTemperature); // Связать DS18B20Events с объектом DallasTemperature
DS18B20Events::setInterval(5000); // Установите минимальный интервал в миллисекундах между двумя измерениями. По умолчанию в методе setup() установлено значение 10000.
// подписываемся на событие изменения температуры
thermometer.onChange = temperatureChanged;
}
// функция цикла выполняется снова и снова, пока питание не будет отключено или не будет сброшено
void loop() {
thermometer.loop(); // Обязательно для измерения температуры и запуска события при необходимости
Serial.print(thermometer.getTempC()); // При необходимости получить последнее измеренное значение tempC.
Serial.print(" measured ");
Serial.print((millis() - thermometer.getMillis()) / 1000);
Serial.println(" seconds ago.");
delay(1000);
}
void temperatureChanged(uint8_t index, float tempC)
{
Serial.print(tempC);
Serial.print(" new tempC at index ");
Serial.println(index);
}
@James Baker, 👍-1
Обсуждение3 ответа
Не знаю, что это было, но теперь работает со вторым кодом. первое, вероятно, тоже верно.
Может быть, я просто охладился (-127C) несколько часов назад... о нет. Вероятно, для этого тоже есть страница stackoverflow.
- Установка значения float до двух знаков после запятой
- ESP-01 неправильно просыпается после глубокого сна
- Ошибка компиляции в nodeMCU вместе с датчиком температуры oneWire ds18b20 и ЖК-дисплеем 2x16 (не I2C)
- DS1820 плохие показания 4-го датчика
- Wemos D1R2 - переход Onewire 2 DS18B20 на переменную
- DS18b20 Заказ датчиков на кабеле
- Датчик температуры не выдает правильных значений
- Датчик температуры MKR1000 и DS18B20
Пожалуйста, опубликуйте фотографию вашей проводки (включая четкое изображение полос на подтягивающем резисторе)., @Dougie
Вам нужна фотография вашей НАСТОЯЩЕЙ проводки к Arduino, а не схема Fritzing того, как должна выглядеть ваша проводка., @Dougie
Я не уверен, что это было, но теперь он работает со вторым кодом. первый, наверное, тоже прав. Может быть, я просто остыл (-127C) несколько часов назад... о нет. Вероятно, для этого тоже есть страница stackoverflow., @James Baker
вы наверное забыли подтягивающий резистор, @david
Я нашел эту страницу, потому что у меня была похожая проблема. Я пытался подключиться к ESP01. Мне не удалось заставить его читать GPIO3, GPIO1 или GPIO0, но я смог заставить его работать с GPIO2. Кажется, он может быть весьма чувствителен к сопротивлению подтягивания., @Richard Thomas