Добрый день! Подскажите пожалуйста! Есть скетч работы Ардуино Уно, Олед 0,96 дисплей, датчик температуры DS18B20. При включении дисплей показал температуру и на этом остановился показ, тоесть, температура меняется а на дисплее все та же. После перезагрузки дисплей показывает температуру правильно, но она не изменяется! Я так понимаю что должен быть циклический вывод, но как прописать не соображу! Код (C++): // 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); }
#include<OneWire.h> #include<DallasTemperature.h> #define ONE_WIRE_BUS 10// номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #include<OLED_I2C.h> OLED myOLED(8,9,8);// 8pin - SDA , 9pin - SCL externuint8_tRusFont[];// Русский шрифт externuint8_tMegaNumbers[];// Подключение больших шрифтов externuint8_tSmallFont[];// Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); } void loop() { sensors.requestTemperatures(); myOLED.clrScr();// очищаем экран myOLED.setFont(RusFont);// Устанавливаем русский шрифт myOLED.print("Ntvgthfnehf", CENTER,0);// Выводим надпись "Температура" myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0),1), CENTER,9);// Отображение температуры myOLED.update(); delay(100); } должно работать
#include<OneWire.h> #include<DallasTemperature.h> #define ONE_WIRE_BUS 10// номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #include<OLED_I2C.h> OLED myOLED(8,9,8);// 8pin - SDA , 9pin - SCL externuint8_tRusFont[];// Русский шрифт externuint8_tMegaNumbers[];// Подключение больших шрифтов externuint8_tSmallFont[];// Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); } void loop() { sensors.requestTemperatures(); myOLED.clrScr();// очищаем экран myOLED.setFont(RusFont);// Устанавливаем русский шрифт myOLED.print("Ntvgthfnehf", CENTER,0);// Выводим надпись "Температура" myOLED.setFont(SmallFont); myOLED.print("OLed ", CENTER,55);// вывод текста myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0),1), CENTER,9);// Отображение температуры myOLED.update(); delay(100); } А так?
Рекомендую посмотреть эту тему по поводу выгорания пикселей на OLED. Там есть интересное видео с лекций по органическим светодиодам от Валентины Уточниковой .
OLED-дисплей тут совершенно не уместен, он выгорит в таком режиме за месяц-два... Как вариант решения - вывести кнопку и отображать данные по нажатию, а секунд через 5-10 засыпать, тогда проработает, если же хотите гонять 24/7 - смотрите в сторону ЖКИ, хоть графических, хоть символьных (благо стоят они на Али как жвачка)