КАК проверить подключен ли OLED дисплей программно

Привет.
Подключаю OLED SSD1306, адрес 0х3С
как проверить программно, подключен ли он?
в i2c_scanner определяется если подключен, или не определяется если подключен.
это с библиотекой Wire.h
если после неё также подключить библиотеку для текстового использования OLED
#include “SSD1306Ascii.h”
#include “SSD1306AsciiAvrI2c.h”

то при выполнении Wire.endTransmittion() происходит остановка :frowning:
Это когда дисплейчик отключен от I2C, когда подключен - всё нормально
то есть
// проверка наличия OLED с адресом OLED_ADDRESS
Wire.beginTransmission(OLED_ADDRESS);
Serial.print(“after BeginTransmittion\n”);
byte error = Wire.endTransmission();
Serial.print("ERROR = "); Serial.println(error);
в мониторе вижу “after Transmittion” и всё… стоп. Это то, что я пробовал.

в билиотеках текстового использования есть begin(…) - но он типа void и на нём происходит остановка.
вопрос - как определить есть ли готовность OLED с использованием библиотек для текстового вывода?
#include “SSD1306Ascii.h”
#include “SSD1306AsciiAvrI2c.h”

… вдруг кто подскажет что толковое?

Так i2c_scanner’ом и определяйте, посмотрите, как там сделано и сделайте у себя такую же проверку – там всего-то две строчки. В чём проблема? Он же хорошо определяет.

Если Вам мешает определение дополнительных библиотек, разнесите их по разным файлам.

Правда я не понимаю, как оно может помешать, думаю, Вы просто что-то накосячили в коде, он же секретный, как всегда.

1 лайк

А это то чем не устраивает?

void setup() {

  Wire.beginTransmission(OLED_ADDRESS);
  byte error = Wire.endTransmission();

  if (error != 0) { // Если ошибка передачи данных, то....

    Serial.println("OLED device not found...");
    Serial.print("ERROR = "); Serial.println(error);
    while (1) {                           // Останавливаем программу...
      digitalWrite(13, digitalRead(13));  // И мигаем светодиодом на 13 пине, сообщая о проблеме
      delay(500);
    }
  }
  // Если всё хорошо настраиваем дисплей и работаем дальше...
}

void loop() {}
1 лайк

Сорри, вопрос решился :slight_smile:
как бывает, пропустил
Wire.begin();

Спасибо за поддержку.

2 лайка

как и предполагали выше

1 лайк