Вывод температуры на Oled дисплей
- Войдите на сайт для отправки комментариев
Втр, 09/01/2018 - 11:45
Добрый день! Подскажите пожалуйста! Есть скетч работы Ардуино Уно, Олед 0,96 дисплей, датчик температуры DS18B20. При включении дисплей показал температуру и на этом остановился показ, тоесть, температура меняется а на дисплее все та же. После перезагрузки дисплей показывает температуру правильно, но она не изменяется! Я так понимаю что должен быть циклический вывод, но как прописать не соображу!
// DS18B20 Read to 128x64 OLED Display
// Include the OneWire library
#include <OneWire.h>
// Include the Dallas Temperature library
#include <DallasTemperature.h>
// Setup the OneWire bus on Pin 2
OneWire bus(10);
// Setup DallasTemperature to work on the OneWire bus
DallasTemperature sensors(&bus);
// Include the U8glib Library
#include <U8glib.h>
// Configure the OLED Screen (I2C)
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);
float temperature;
char temperatureString[6] = "-";
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_fur11);
u8g.drawStr( 0, 22, "Temp:");
u8g.setFont(u8g_font_fub25);
u8g.drawStr( 0, 54, temperatureString);
u8g.drawStr( 100, 54, "C");
}
void setup() {
// Start the sensors
sensors.begin();
}
void loop() {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
// Update the sensor readings
sensors.requestTemperatures();
// Read Temperature
temperature = sensors.getTempCByIndex(0);
dtostrf(temperature, 2, 2, temperatureString);
// Delay for 2 seconds between readings
delay(5000);
}
43ю строчку целиком после 53й поставь
Спасибо! Вечером попробую!
43ю строчку целиком после 53й поставь
Не помогает! Эта строчка влияет на время обновления экрана, а не на обновление опроса датчика.
Сложно что-то сказать, не изучив библиотек
Библиотеку sensors не знаю, но вообще для ds18b20 между запросом на измерение и получением температуры должно пройти минимум 0.7 секунды, а у вас они идут подряд - строки 46 и 49. Скорее всего датчик просто не успевает. Для начала вставьте после строки 46 delay(800);. Если поможет - значит дело в этом.