Вопросы по OLED-дисплеям на контроллере SSD1306

MadMouse

✩✩✩✩✩✩✩
26 Мар 2021
4
3
@kostyamat, я всегда стараюсь читать внимательно :)
Однако, пересмотрел еще раз исходник библиотеки Wire и вот убейте, но не вижу там метода end(), зато медод endTransmission() имеется.
Мой опыт в программировании arduino ограничивается четырьмя вечерами :) (два из которых разбирался с дисплеем), так что ткните носом если просмотрел чего (что за метод такой).

И да, после подачи питания на дисплей заново конфигурируем шину I2C.

Вижу тема интересна, посему представлю свое решение задачи.
У меня сделано так (работаю с arduino nano 3.0):

C++:
....

Wire.endTransmission();  /* работаю с библиотекой дисплея SSD1306Ascii. Как дало беглое изучение ее кода,
этот метод вызывается при каждой операции обращения к дисплею, поэтому
обращаться к нему перед отключением питания дисплея не вижу смысла */

....

//отключаю питание дисплея

pinMode(A4, OUTPUT);  //после отключения питания дисплея отключаю линии шины I2C
pinMode(A5, OUTPUT);
digitalWrite(A4, 0);
digitalWrite(A5, 0);

....

//включаю питание дисплея

pinMode(A4, INPUT);  //после включения питания дисплея сбрасываю порты контроллера в состояние по умолчанию
pinMode(A5, INPUT);
Wire.begin();                 //инициализирую шину I2C
Wire.setClock(400000L);

//инициализирую дисплей

....
 
Изменено:
  • Лойс +1
Реакции: kostyamat

Ho2518

✩✩✩✩✩✩✩
28 Мар 2021
1
0
Всем доброго здравия!
@druna20031, Удалось решить проблему?
Сам с такой проблемой боролся пару вечеров.
Дерни А4, А5 к нулю после выключения питания дисплея и все получится.
доброго времени суток. подскажи пожалуста ,как подтянуть А4 и А5 к нулю после выключения. Ни силен в программирование и электроники.
проблемма в том что oled 1.3 SH1106 не отображает на экране после пробуждения. спасибо.
 

MadMouse

✩✩✩✩✩✩✩
26 Мар 2021
4
3
@kostyamat, Спасибо большое за ссылку! Я умудрился для изучения скачать старую версию библиотеки (2012 года) хотя и с тем же номером версии. По Вашей ссылке библиотека свежайшая с модификациями от 2017 и 2020 года и в ней сей метод есть. Кстати в его реализации присутствуют строки:
digitalWrite(SDA, 0);
digitalWrite(SCL, 0);
так что скорее всего он должен помочь, хотя и надо пробовать.

@Ho2518, Приветствую! Кусок моего кода глянь там строчки с 11 по 14 как раз этим занимаются, только учти, что это подойдет для arduino nano и uno для других версий, линии шины другие (см. распиновку).
А еще можешь попробовать метод Wire.end(); по совету @kostyamat, похоже он делает тоже самое, но это мной пока не опробовано.

Добрый вечер всем!
Только что опробовал метод Wire.end() в действии. Спешу сообщить, что с ним тоже все прекрасно работает.
Таким образом код несколько упрощается и выглядит красивше.
В моем примере кода строки 11-14 заменить на одну Wire.end(); строки 20 и 21 можно удалить.
 
  • Лойс +1
Реакции: kostyamat

Skleptik

✩✩✩✩✩✩✩
4 Апр 2020
5
0
Приветствую!
Поделку в машину делаю,
дисплей у меня очень много времени отнимает,
постоянно какие то заморочки.

Разные библиотеки пробовал и везде какие то грабли...

Русский так и не удалось подружить с дисплеем, удалось вернее, но почему то при отрисовке больше 3х строк, ничего не видно на экране.
Да хрен с ним с русским.

Упростил уже до нельзя, и все равно артефакты лезут.
че за нах....ткните носом че не так у меня..

Или может это помехи из за того что на макетке собранно "дырчатой", и после пайки их не будет ?

IMG_20210615_15355.jpg

Код прилагаю.
C++:
// ===== ВЫБОР ПИНОВ =====
#define PWM_FAN_PIN 3
#define RELE_FAN_PIN 2
#define IGN_PIN 4
#define VOLT_PIN A1
#define DALLAS_PIN A0
//#define DALLAS_GND 12
//#define DALLAS_V 10

// ===== РЕЖИМ РАБОТЫ =====
#define MIN_TEMP 30     // мин. температура
#define MAX_TEMP 45     // макс. температура
#define MIN_FAN_SPEED 80    // (0-255) мин скорость
#define MAX_FAN_SPEED 255   // (0-255) макс скорость
#define ALARM_TEMP 100   // температура тревоги

//// либы
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_RESET 4
#define SCREEN_WIDTH 128    // OLED display width, in pixels
#define SCREEN_HEIGHT 64  // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(DALLAS_PIN);
DallasTemperature sensors(&oneWire);
DeviceAddress engineCooling, engineOil;

#include "timerMinim.h"
timerMinim fanTimer(60);
//timerMinim sensorTimer(2000);

//// переменные
int16_t minTemp = MIN_TEMP, maxTemp = MAX_TEMP;
bool systemState = true;
int currentTemp = 0;
uint32_t thisTime;

#define VREF 4.97      // точное напряжение на пине 5V (в данном случае зависит от стабилизатора на плате Arduino)
#define DIV_R1 100000  // точное значение 10 кОм резистора
#define DIV_R2 33000   // точное значение 4.7 кОм резистора
int fanSpeed = 0;
int newFanSpeed = 0;
float tempCool, tempOil, tempAmb, tempStart, voltage;
byte screen = 0;
byte menu = 1;
volatile bool IGN = true;        // Зажигание
//unsigned long stTimer = 0;                // тамер сна

void setup() {
  //  pinMode(DALLAS_GND, OUTPUT);// назначаем пины  питания датчиков
  //  pinMode(DALLAS_V, OUTPUT);
  pinMode(IGN_PIN, INPUT);
  pinMode(PWM_FAN_PIN, OUTPUT);
  pinMode(RELE_FAN_PIN, OUTPUT);

  //  digitalWrite(DALLAS_GND, 0);
  //  digitalWrite(DALLAS_V, 1);

  Serial.begin(9600);
  sensors.begin();
  if (!sensors.getAddress(engineCooling, 0)) Serial.println("Engine Cooling Temp Sensor Cirquit");
  if (!sensors.getAddress(engineOil, 1)) Serial.println("Engine Oil Temp Sensor Cirquit");
  sensors.requestTemperatures();

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.cp437(true);

  //  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
  //    Serial.println("SSD1306 allocation failed");
  //    for (;;);
  //  }
//  display.cp437(true);
  Serial.print("Control_FAN_v3.0");
  Serial.println();

  initPWM();

  start_screen();
}

void loop() {
  measure();
  ign_ctrl();
  tempToSpeed();
  fanTick();
  upd_screen();
}

// преобразуем температуру в скорость
void tempToSpeed() {
  currentTemp = tempCool;
  newFanSpeed = map(currentTemp, minTemp, maxTemp, MIN_FAN_SPEED, MAX_FAN_SPEED);
  newFanSpeed = constrain(newFanSpeed, MIN_FAN_SPEED, MAX_FAN_SPEED);
  //    initPWM();    // заново инициализируем шим, тон его ломает

}

void fanTick() {
  if (fanTimer.isReady()) {
//    Serial.print("newFanSpeed = ");
//    Serial.println(newFanSpeed);
    Serial.print("fanSpeed = ");
    Serial.println(fanSpeed);
    if (newFanSpeed > fanSpeed) fanSpeed += 10;  // плавно управляем
    if (newFanSpeed < fanSpeed) fanSpeed -= 10;  // плавно управляем
    fanSpeed = constrain(fanSpeed, 0, 255);  // ограничить

    mega328_PWM20kHz_D3(fanSpeed);  // ШИМ для меги
  }
}

void mega328_PWM20kHz_D3(uint8_t duty) {
  if (duty == 0) {
    bitClear(TCCR2A, COM2B1);
    bitClear(PORTD, 3);
  } else {
    bitSet(TCCR2A, COM2B1);
    OCR2B = map(duty, 0, 255, 0, 99);
  }
}

void upd_screen() {
  switch (screen) {
    case 0: display.clearDisplay(); display.display(); break;
    case 1:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setTextSize(1);
      display.setCursor(20, 0);
      display.println("All data");
//      display.setCursor(0, 0);
      display.print("t.coolant: ");
      display.println(tempCool);
      display.print("t.oil    : ");
      display.println(tempOil);
      display.print("t.Air    : ");
      display.println(tempAmb);
      display.print("voltage  : ");
      display.println(voltage);
      display.print("tempStart: ");
      display.println(tempStart);
      display.display();
      break;
  }
}

void ign_ctrl() {
  IGN = digitalRead(IGN_PIN);
  if (IGN) {
    if (screen == 0) {
      Serial.print("tempStart = ");
      Serial.print(tempStart);
      tempStart = tempCool;
      helloScreen();
    }
    Serial.print(F("IGN-ON"));
    Serial.println();
    screen = menu;

  } else {
    display.clearDisplay();
    Serial.print(F("IGN-OFF"));
    Serial.println();
    screen = 0;
  }
}

void measure() {
  sensors.requestTemperatures();
  tempCool = sensors.getTempC(engineCooling);
  tempOil = sensors.getTempC(engineOil);
  voltage = (float)analogRead(VOLT_PIN) * VREF * ((DIV_R1 + DIV_R2) / DIV_R2) / 1024;
  Serial.print("tempCool=");
  Serial.print(tempCool);
  Serial.println();
  Serial.print("tempOil=");
  Serial.print(tempOil);
  Serial.println();
  Serial.print("voltage=");
  Serial.print(voltage);
 
  Serial.println();
  Serial.println();
//  sensors.requestTemperatures();
}
void start_screen() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("Control_FAN_v3.0");
  display.println("fan Controller");
  display.println();
  display.println("[email protected]");
  display.display();
  delay(1000);
}
void helloScreen() {
  display.clearDisplay();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.setTextSize(3);
  display.print("HELLO");
  display.setCursor(0, 40);
  display.print("PUPPY");
  display.display();
  delay(2000);
}

void initPWM() {
  // инициализация ШИМ 20 кГц для mega328
  TCCR2A = 0b10100011;
  TCCR2B = 0b00001010;
  OCR2A = 99;
}
 

Вложения

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
В SSD1306 вся информация в графическом виде передается, нужно ковырять библиотеку со шрифтами. Если в библиотеке русских шрифтов нет, то русские буквы ессвено не будут отображаться.

Артефакты сразу появляются или при отображении какой то информации?
На шине вместе с дисплеем что нть еще сидит?

У меня все даже на соплях работало. Дисплей очень неприхотливый.
Правда на картинке STM32 и библиотека самописная.
Безымянный.jpg
 
Изменено:

Skleptik

✩✩✩✩✩✩✩
4 Апр 2020
5
0
На i2c шине только дисплей,
вот фото как сейчас это выглядит

IMG_20210615_180209.jpg

Дисплей сдох ...как тарас не включился просто...надо покупать теперь
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Дисплей сдох ...как тарас не включился просто...надо покупать теперь
У меня такое было на Nano - тупо не хватает памяти, из-за этого и прут артефакты, память, выделенная под буфер перезаписывается. И дисплей скорее всего не сдох, а просто стало не хватать памяти вообще, и malloc() не выделяет память. Вылечил переходом на библиотеку U8g2 и отрисовкой по частям.
 
  • Лойс +1
Реакции: Skleptik

Skleptik

✩✩✩✩✩✩✩
4 Апр 2020
5
0
У меня такое было на Nano - тупо не хватает памяти, из-за этого и прут артефакты, память, выделенная под буфер перезаписывается. И дисплей скорее всего не сдох, а просто стало не хватать памяти вообще, и malloc() не выделяет память. Вылечил переходом на библиотеку U8g2 и отрисовкой по частям.
Спасибо за ответ.
Так и есть скорее всего, потому что я сегодня выяснил, что он не сдох все же, а перестал отображать.
Убрал несколько строк из функции, и все вернулось на прежнее место.

Буду думать че дальше делать.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Буду думать че дальше делать.
А что тут думать, если использовать Adafruit_SSD1306, то он сразу отъедает 128*64/8 == 1024 байт оперативки, это половина всей памяти для Atmega328. То есть я думаю реальных варианта два -
  1. перейти на мега или на 32 битный МК
  2. использовать не библиотеку Adafruit_SSD1306, а U8g2 и отображать экран по частям
Можно конечно попытаться для всего остального использовать только половину памяти, но это имхо нереально.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,415
978
58
Марий-Эл
Неизвестно, сократит ли это потребление памяти по сравнению с U8g2, ускорить по идее должно.
В текстовом режиме можно написать драйвер, который не использует память ардуины. Только буквы будут одного размера.
 

SlavaGlow

✩✩✩✩✩✩✩
6 Ноя 2020
2
0
Как в библиотеке GyverOled задаются выводы для подключения дисплея?
 

evg970

✩✩✩✩✩✩✩
30 Дек 2021
1
0
По дисплею самый худший урок.
Надо начать с простого тестирования и ознакомления, а не разом решить задачу.
В итоге куча инфы, которая не нужна и требует времени на разбор.
Если новичок что-то не так подключит он век не разберётся.
 

Vitaly3108

✩✩✩✩✩✩✩
18 Окт 2021
20
2
Ставрополь
Всем здравствуйте.
Нужна помощь по прошивке, по отдельности все работает, показывает температуру или выводит изображение, но совместив обе не показывает на картинке температуру. Помогите с исправлением прошивки, что бы я смог сложить прошивки и найти что я неправильно сделал. Фото и прошивку приложил.

// библиотека для работы с OLED-дисплеем
#include <TroykaOLED.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

// создаём объект для работы с дисплеем
// и передаём I²C адрес дисплея


#define DHTPIN 2 // контакт, к которому подключаемся
#define DHTTYPE DHT11 // для датчика DHT11
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
TroykaOLED myOLED(0x3C);

// создаем экземпляр класса для датчика DHT11:
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
Wire.begin();
dht.begin(); // инициализируем объект «dht»
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// инициализируем объект «display» с I2C-адресом «0x3C», для 128x32
Serial.begin(9600);
}
void displayTempHumid(){
delay(5000);
// считывание данных о температуре и влажности
// занимает около 250 мс; кроме того, это считывание
// может запаздывать примерно на 2 секунды
// (это очень медленный датчик):
float h = dht.readHumidity();
// считываем температуру в градусах Цельсия:
float t = dht.readTemperature();

// проверяем, корректны ли данные, и если нет,
// то выходим и пробуем снова:
if (isnan(h) || isnan(t)) {
display.setTextColor(BLACK); // задаем цвет
display.setTextSize(1); // задаем шрифт
display.setCursor(65,0); // задаем координаты курсора
display.print("Failed to read from DHT sensor!");
// "Не удалось прочесть данные с датчика DHT!"
return;
}
display.clearDisplay();
display.setTextColor(BLACK);
display.setCursor(65,1);
display.print("H: "); // "Влажность: "
display.print(h);
display.print(" %");
display.setCursor(65,11);
display.print("T: "); // "Температура: "
display.print(t);
display.print(" C");
}


// массив изображения
const unsigned char epd_bitmap_4 [] PROGMEM = {64, 64,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x10, 0x10, 0x10, 0x20, 0x60, 0x40, 0x00, 0x40, 0x80,
0x00, 0x00, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x06, 0x81, 0xfd, 0xe4, 0x04, 0x04, 0x04, 0x26, 0x32, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04,
0x99, 0x91, 0x10, 0xcd, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x7e, 0xdf, 0x87, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x61, 0xa0, 0x80, 0x40, 0x41, 0x1e, 0x0c,
0x81, 0x41, 0x60, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x02, 0x04, 0x88, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0,
0xf0, 0xf8, 0xf8, 0xe1, 0x87, 0x06, 0x1c, 0x28, 0x40, 0x40, 0x40, 0x60, 0x61, 0x63, 0x23, 0x10,
0xf8, 0xfc, 0xfe, 0xf1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8,
0x38, 0xfc, 0x02, 0x01, 0xfc, 0x22, 0x12, 0x91, 0x91, 0x90, 0x92, 0x92, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
0x1e, 0x1c, 0x1e, 0x14, 0x1f, 0x1d, 0x1d, 0x0c, 0x0c, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xc1,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x77, 0x8f, 0xbf, 0x97, 0x87, 0x83, 0x81,
0xff, 0xff, 0xc0, 0xc0, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x1f,
0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char epd_bitmap_3 [] PROGMEM = {64, 27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x70, 0x10, 0xc8, 0x20, 0x04, 0x12, 0x0a, 0x08, 0x01, 0x01,
0x01, 0x01, 0x01, 0x08, 0x0a, 0x12, 0x14, 0x64, 0xc8, 0x10, 0x70, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
0x48, 0x48, 0x48, 0x48, 0xfe, 0x01, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0xcc, 0x06, 0x02,
0x02, 0x02, 0x04, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x01, 0xfe, 0x48, 0x48, 0x48,
0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x25, 0x24, 0x30, 0x23, 0x4c, 0x90, 0x20, 0x20, 0x40, 0x40, 0x81, 0x81,
0x81, 0x81, 0x81, 0x40, 0x40, 0x20, 0x20, 0x90, 0x4c, 0x23, 0x30, 0x2c, 0x25, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void loop()
{
displayTempHumid();
display.display();
// инициализируем дисплей
myOLED.begin();
// инвертируем экран для наглядности изображение
myOLED.invertDisplay(true);
// выводи изображение с координатами верхнего левого угла
myOLED.drawImage(epd_bitmap_4, 0, 0);
// выводи 2 изображение с координатами среднего угла посередине
myOLED.drawImage(epd_bitmap_3, 64, 40);
}
 

Вложения

Normalek

★✩✩✩✩✩✩
6 Авг 2021
140
39
@Vitaly3108, зачем использовать несколько библиотек для экрана? зачем каждый цыкал его инициализатор? тем самым чистя его.

C++:
#include <TroykaOLED.h>
#include <Wire.h>
#include <DHT.h>


#define DHTPIN 2 // контакт, к которому подключаемся
#define DHTTYPE DHT11 // для датчика DHT11
// создаем экземпляр класса OLED:
TroykaOLED myOLED(0x3C);
// создаем экземпляр класса для датчика DHT11:
DHT dht(DHTPIN, DHTTYPE);

// массив изображения
const unsigned char epd_bitmap_4 [] PROGMEM = {64, 64,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x10, 0x10, 0x10, 0x20, 0x60, 0x40, 0x00, 0x40, 0x80,
    0x00, 0x00, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
    0x06, 0x81, 0xfd, 0xe4, 0x04, 0x04, 0x04, 0x26, 0x32, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04,
    0x99, 0x91, 0x10, 0xcd, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
    0x7e, 0xdf, 0x87, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x61, 0xa0, 0x80, 0x40, 0x41, 0x1e, 0x0c,
    0x81, 0x41, 0x60, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x02, 0x04, 0x88, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0,
    0xf0, 0xf8, 0xf8, 0xe1, 0x87, 0x06, 0x1c, 0x28, 0x40, 0x40, 0x40, 0x60, 0x61, 0x63, 0x23, 0x10,
    0xf8, 0xfc, 0xfe, 0xf1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8,
    0x38, 0xfc, 0x02, 0x01, 0xfc, 0x22, 0x12, 0x91, 0x91, 0x90, 0x92, 0x92, 0x0c, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
    0x1e, 0x1c, 0x1e, 0x14, 0x1f, 0x1d, 0x1d, 0x0c, 0x0c, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xc1,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
    0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x77, 0x8f, 0xbf, 0x97, 0x87, 0x83, 0x81,
    0xff, 0xff, 0xc0, 0xc0, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
    0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x1f,
    0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
    0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const unsigned char epd_bitmap_3 [] PROGMEM = {64, 27,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x70, 0x10, 0xc8, 0x20, 0x04, 0x12, 0x0a, 0x08, 0x01, 0x01,
    0x01, 0x01, 0x01, 0x08, 0x0a, 0x12, 0x14, 0x64, 0xc8, 0x10, 0x70, 0x90, 0x90, 0x90, 0x90, 0x90,
    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
    0x48, 0x48, 0x48, 0x48, 0xfe, 0x01, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0xcc, 0x06, 0x02,
    0x02, 0x02, 0x04, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x01, 0xfe, 0x48, 0x48, 0x48,
    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x30, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
    0x24, 0x24, 0x24, 0x24, 0x25, 0x24, 0x30, 0x23, 0x4c, 0x90, 0x20, 0x20, 0x40, 0x40, 0x81, 0x81,
    0x81, 0x81, 0x81, 0x40, 0x40, 0x20, 0x20, 0x90, 0x4c, 0x23, 0x30, 0x2c, 0x25, 0x24, 0x24, 0x24,
    0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02,
    0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void setup() {
    Wire.begin();
    dht.begin(); // инициализируем объект «dht»
    myOLED.begin(); // инициализируем объект «display»
    myOLED.invertDisplay(true); // инвертируем экран для наглядности изображение
    myOLED.setFont(font6x8); // выбираем шрифт 6×8
    //myOLED.invertText("true"); //не знаю библтотеку может понадовится ивентировать текс отдельно
    Serial.begin(9600);
}

void loop() {
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    myOLED.clearDisplay();
    myOLED.drawImage(epd_bitmap_4, 0, 0); // выводи изображение с координатами верхнего левого угла
    myOLED.drawImage(epd_bitmap_3, 64, 40); // выводи 2 изображение с координатами среднего угла посередине
    if(isnan(h)) myOLED.print("H: Error", 65, 1);
    else {
        myOLED.print("H: ", 65, 1);
        myOLED.print(h);
        myOLED.print(" %");
    }
    if(isnan(t)) myOLED.print("T: Error", 65, 1);
    else {
        myOLED.print("T: ", 65, 1);
        myOLED.print(t);
        myOLED.print(" C");
    }
}
Не проверял, но должно работать. Ну если нет то суть должен будешь уловить
 
Изменено:
  • Лойс +1
Реакции: Vitaly3108

Vitaly3108

✩✩✩✩✩✩✩
18 Окт 2021
20
2
Ставрополь
Привет, спасибо за прошивку, чуть подредактировал.
Но есть одно но что никак не могу понять:
если я запускаю прошивку как есть то получается наложение буквы и данных - фото 1
если я вторую строку скрываю //myOLED.print(t); то отображение происходит нормально, но данных естественно нету - фото 2
на третьем фото показывает когда я отключаю датчик, здесь все нормально

#include <TroykaOLED.h>
#include <Wire.h>
#include <DHT.h>


#define DHTPIN 2 // контакт, к которому подключаемся
#define DHTTYPE DHT11 // для датчика DHT11

// создаем экземпляр класса OLED:
TroykaOLED myOLED(0x3C);

// создаем экземпляр класса для датчика DHT11:
DHT dht(DHTPIN, DHTTYPE);


// массив изображения
const unsigned char epd_bitmap_4 [] PROGMEM = {64, 64,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x10, 0x10, 0x10, 0x20, 0x60, 0x40, 0x00, 0x40, 0x80,
0x00, 0x00, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x06, 0x81, 0xfd, 0xe4, 0x04, 0x04, 0x04, 0x26, 0x32, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04,
0x99, 0x91, 0x10, 0xcd, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x7e, 0xdf, 0x87, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x61, 0xa0, 0x80, 0x40, 0x41, 0x1e, 0x0c,
0x81, 0x41, 0x60, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x02, 0x04, 0x88, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0,
0xf0, 0xf8, 0xf8, 0xe1, 0x87, 0x06, 0x1c, 0x28, 0x40, 0x40, 0x40, 0x60, 0x61, 0x63, 0x23, 0x10,
0xf8, 0xfc, 0xfe, 0xf1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8,
0x38, 0xfc, 0x02, 0x01, 0xfc, 0x22, 0x12, 0x91, 0x91, 0x90, 0x92, 0x92, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
0x1e, 0x1c, 0x1e, 0x14, 0x1f, 0x1d, 0x1d, 0x0c, 0x0c, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xc1,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x77, 0x8f, 0xbf, 0x97, 0x87, 0x83, 0x81,
0xff, 0xff, 0xc0, 0xc0, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x1f,
0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const unsigned char epd_bitmap_3 [] PROGMEM = {64, 27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x70, 0x10, 0xc8, 0x20, 0x04, 0x12, 0x0a, 0x08, 0x01, 0x01,
0x01, 0x01, 0x01, 0x08, 0x0a, 0x12, 0x14, 0x64, 0xc8, 0x10, 0x70, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
0x48, 0x48, 0x48, 0x48, 0xfe, 0x01, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0xcc, 0x06, 0x02,
0x02, 0x02, 0x04, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x01, 0xfe, 0x48, 0x48, 0x48,
0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x25, 0x24, 0x30, 0x23, 0x4c, 0x90, 0x20, 0x20, 0x40, 0x40, 0x81, 0x81,
0x81, 0x81, 0x81, 0x40, 0x40, 0x20, 0x20, 0x90, 0x4c, 0x23, 0x30, 0x2c, 0x25, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void setup() {
Wire.begin();
dht.begin(); // инициализируем объект «dht»
myOLED.begin(); // инициализируем объект «display»
myOLED.invertDisplay(true); // инвертируем экран для наглядности изображение
myOLED.setFont(font6x8); // выбираем шрифт 6×8
Serial.begin(9600);

}

void loop() {

delay(2000); //время чтобы датчик прогрузился

float h = dht.readHumidity();
float t = dht.readTemperature();

myOLED.clearDisplay();

if(isnan(h)) myOLED.print("H: Error",65,1);
else {
myOLED.print("H:",65,1); // "Влажность: "
//myOLED.print(h);
myOLED.print(" %");
}
if(isnan(t)) myOLED.print("T: Error",65,11);
else {
myOLED.print("T:",65,11); // "Температура: "
//myOLED.print(t);
myOLED.print(" C");
}

myOLED.drawImage(epd_bitmap_4, 0, 0); // выводи изображение с координатами верхнего левого угла
myOLED.drawImage(epd_bitmap_3, 64, 40); // выводи 2 изображение с координатами среднего угла посередине

}

Все получилось, спасибо за помощь. Вопрос по шрифту,
"выбираем шрифт 6×8" следующий идет 12х10 но он чересчур большой выходит не влазит, промежуточных нету, перечитал вроде все, есть больше и меньше. Как можно жирным сделать или увеличить между 6×8 и 12х10 ?

Вложения
 
Изменено:

Normalek

★✩✩✩✩✩✩
6 Авг 2021
140
39
@Vitaly3108, видимо библиотека нормально не отработает float. Переводи или String полностью сроку например
C++:
myOLED.print("H:",65,1); // "Влажность: "
//myOLED.print(h);
myOLED.print(" %");
в
C++:
String str = String("H:") + h + String("%");
myOLED.print(str,65,1);
не оптимизирован можно использовать более быстрые функции.
Также можно использовать месив char* или double. То-есть myOLED.print(h); -->>myOLED.print((double)h); а так надо изучать библиотеку но мне лень
 
  • Лойс +1
Реакции: Vitaly3108