Refactor I2C device scanning and update display pin assignments

- Changed I2C scanning function to probe only expected device addresses, improving startup reliability.
- Updated logging to provide clearer output for found and missing devices.
- Modified I2C SDA and SCL pin assignments from 6 and 7 to 8 and 9, respectively, to accommodate hardware changes.
- Added a timeout for I2C communication to enhance robustness.
This commit is contained in:
Joshua King
2026-02-22 11:21:29 -05:00
parent a80a6b59d1
commit a8e8268b65
4 changed files with 122 additions and 112 deletions

File diff suppressed because one or more lines are too long

View File

@@ -16,11 +16,12 @@ lib_deps =
board_upload.flash_size = 16MB board_upload.flash_size = 16MB
board_build.partitions = default_16MB.csv board_build.partitions = default_16MB.csv
board_build.arduino.memory_type = qio_opi board_build.arduino.memory_type = qio_opi
board_build.extra_flags = -DBOARD_HAS_PSRAM
; board_build.filesystem = spiffs ; board_build.filesystem = spiffs
build_flags = build_flags =
-D BOARD_HAS_PSRAM
-D ARDUINO_USB_CDC_ON_BOOT=1
-D PB_VERSION=\"1.0.0\" -D PB_VERSION=\"1.0.0\"
-D PB_HOSTNAME=\"faceplant\" -D PB_HOSTNAME=\"faceplant\"
-D PB_TZ=\"America/New_York\" -D PB_TZ=\"America/New_York\"

View File

@@ -1,19 +1,27 @@
#include "Display.h" #include "Display.h"
static void logI2CScan() { static void logExpectedI2CDevices() {
Serial.println("[Display] Scanning I2C bus..."); // Probe only expected addresses to reduce startup risk if the bus is unhealthy.
const uint8_t addrs[] = {0x3C, 0x3D, 0x10, 0x36, 0x68}; // SH1106, VEML7700, MAX17048, MPU6050
Serial.println("[Display] Probing expected I2C addresses...");
uint8_t found = 0; uint8_t found = 0;
for (uint8_t addr = 1; addr < 127; addr++) { for (uint8_t i = 0; i < sizeof(addrs); i++) {
uint8_t addr = addrs[i];
Wire.beginTransmission(addr); Wire.beginTransmission(addr);
uint8_t err = Wire.endTransmission(); uint8_t err = Wire.endTransmission();
Serial.print("[Display] 0x");
if (addr < 16) Serial.print('0');
Serial.print(addr, HEX);
Serial.print(" -> ");
if (err == 0) { if (err == 0) {
Serial.print("[Display] I2C device @ 0x"); Serial.println("OK");
if (addr < 16) Serial.print('0');
Serial.println(addr, HEX);
found++; found++;
} else {
Serial.print("ERR ");
Serial.println(err);
} }
} }
if (found == 0) Serial.println("[Display] No I2C devices found"); if (found == 0) Serial.println("[Display] No expected I2C devices responded");
} }
void Display::begin() { void Display::begin() {
@@ -27,8 +35,9 @@ void Display::begin() {
Serial.println(OLED_ADDR, HEX); Serial.println(OLED_ADDR, HEX);
Wire.begin(PIN_SDA, PIN_SCL); Wire.begin(PIN_SDA, PIN_SCL);
Wire.setTimeOut(20);
delay(20); delay(20);
logI2CScan(); logExpectedI2CDevices();
Serial.println("[Display] Initializing SH1106..."); Serial.println("[Display] Initializing SH1106...");
_ok = _oled.begin(OLED_ADDR, true); _ok = _oled.begin(OLED_ADDR, true);

View File

@@ -18,8 +18,8 @@ public:
bool displayEnabled() const { return _displayEnabled; } bool displayEnabled() const { return _displayEnabled; }
private: private:
static constexpr int PIN_SDA = 6; static constexpr int PIN_SDA = 8;
static constexpr int PIN_SCL = 7; static constexpr int PIN_SCL = 9;
static constexpr uint8_t OLED_ADDR = 0x3C; // try 0x3D if blank static constexpr uint8_t OLED_ADDR = 0x3C; // try 0x3D if blank
Adafruit_SH1106G _oled = Adafruit_SH1106G(128, 64, &Wire, -1); Adafruit_SH1106G _oled = Adafruit_SH1106G(128, 64, &Wire, -1);
bool _ok = false; bool _ok = false;