Авто определение I2C
- Войдите на сайт для отправки комментариев
Сб, 04/04/2020 - 11:08
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
String stringOne = String(address, HEX);
Serial.print("0x"); Serial.print(stringOne); Serial.print(" - ");
if(stringOne=="3C") Serial.println("'OLED 3C'");
if(stringOne=="3D") Serial.println("'OLED 3D'");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
}Как сделать определение экрана только 1 раз чтобы когда экран подключили выполнялася команда myOLED.begin(); 1 раз
if(stringOne=="3C") Serial.println("'OLED 3C'");
if(stringOne=="3D") Serial.println("'OLED 3D'"); - определяет когда экран включен
i2c шина не предназначена для горячего включения.
i2c шина не предназначена для горячего включения.
Но всеже можно это сделать.. Делал 2 экрана ssd1306 с указанием пинов SCL SDA для каждого так они сами определяюся, а через адрес 0x3C, 0x3D нет.. нужно выполнить meOLED.begin в цикле 1 раз
Думал не додумаюсь... сам сделал автоопридиление все работает.
byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 55; address < 65; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { String stringOne = String(address, HEX); Serial.print("0x"); Serial.print(stringOne); Serial.print(" - "); if(stringOne=="3c") Serial.println("'OLED 3C'"); if(stringOne=="3d") Serial.println("'OLED 3D'"); nDevices++; flag=stringOne+flag; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else if (flag1<=1){ myOLED.begin(); myOLED2.begin(); } if (flag!="3d3c"){ // Опридиляет все ли подключено. flag1=0; } else{ flag1++; } if (flag1>=5){ flag1=5; } Serial.println(flag); Serial.println(flag1); flag=""; Serial.println("done\n"); }