Как получить температуру от датчика DS18B20 и отобразить ее на рюкзаке Adafruit LED (4x 7 сегментов) с помощью Arduino Yun
В настоящее время я пытаюсь (в течение нескольких часов) отображать температуру, полученную от DS18B20, в моем Adafruit LEDBackpack. Но когда я пытаюсь запустить отображение в настройках (matrix.begin (0x070)), температура, возвращаемая датчиком, всегда равна -127.
Не могли бы вы помочь мне понять, что я сделал не так?
Случаи применения
- Только датчик температуры: температура верна
- Только экран: экран работает как положено
- Оба: Экран работает и отображает ожидаемое значение, НО температура всегда равна -127.
Компоненты:
- Adafruit LEDBackpack использует I2C, поэтому он подключен к SCL, SDA, 5v, GND
- Датчик температуры - DS18B20 (1-проводная шина). Это связано с D#2, 5 В, GND
Код
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Bridge.h>
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
#define ONE_WIRE_BUS 2
#define TEMP_DELAY 2000 // Request temp every two seconds
Adafruit_7segment matrix = Adafruit_7segment();
unsigned long time, lastTempCheck = 0;
float temp = 0;
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
matrix.begin(0x70); // If I comment this and do not use the matrix, the temperature is correct.
}
void loop(void)
{
time = millis();
if((time - lastTempCheck) > TEMP_DELAY){
lastTempCheck = time;
processTemp();
}else {
matrix.print(100);
matrix.writeDisplay();
}
}
void processTemp(void){
sensors.requestTemperatures(); // Send the command to get temperatures
temp = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(temp);
}
схема
2 ответа
Попробуйте дать каждому компоненту собственный источник питания (т.е. светодиод - 3 В и датчик - 5 В). Каждый вывод может выдавать столько энергии, чтобы остановить повреждение платы. Светодиод может получать питание от датчика, а у датчика может не хватить мощности для правильной работы.
На вашей электрической схеме показано короткое замыкание над (+) и (-) контактами (ножками) DS18B20 - этим коротким горизонтальным проводом под резистором. Значение -127.0 указывает на проблему с датчиком температуры.
Так что, если это реальная проблема (не только на диаграмме), удалите этот провод, чтобы исправить это. Кроме того, в вашей настройке (), вы можете добавить какую-то проверку, что ваши датчики исправны перед циклом:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // Arduino pin D2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
setup()
{
Serial.begin(115200);
Serial.println("setup() runs ...");
sensors.begin();
if (sensors.getDeviceCount() < 1)
{
Serial.println("DS18B20 Error - No sensors found");
}
}
// ... rest of code