Здравствуйте! У меня 6 датчиков TCS34725 (замеряет уровень освещенности в Lux). Подключаю через I²C хаб (Troyka-модуль), AmperkaShield и Arduino Uno (китайская). Код для ардуино скопирован со страницы http://wiki.amperka.ru/ Добавил только небольшой кусок по расчету Lux. Проблема в том, что не все датчики передают значения. Код копирую ниже. Все датчики по отдельности работают. Что я делаю не так? Код: Код (C++): #include <TroykaI2CHub.h> #include <Wire.h> #include <Adafruit_TCS34725.h> Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X); TroykaI2CHub splitter; void setup() { Serial.begin(115200); Wire.begin(); tcs.begin(); splitter.begin(); } void loop() { for (int i = 0; i < 6; i++) { splitter.setBusChannel(i); uint16_t r, g, b, c, colorTemp, lux; tcs.getRawData(&r, &g, &b, &c); lux = tcs.calculateLux(r, g, b); Serial.print(i); Serial.print(" :"); Serial.println(lux, DEC); startScanerI2C(); delay(100); } } void startScanerI2C() { byte state; byte address; int countDevices = 0; for (address = 1; address < 127; address++ ) { Wire.beginTransmission(address); state = Wire.endTransmission(); if (state == 0) { if (address < 16) { Serial.print("0"); } countDevices++; } } if (countDevices == 0) { Serial.println("No I²C devices found"); } } Вот что получаю в результате: 0 :34196 1 :90 2 :0 3 :75 4 :0 5 :0 6 :34196 или 0 :34196 1 :90 2 :0 3 :0 4 :0 5 :0 6 :34196
если метод tcs.begin(); посылает какие-то команды датчику для инициализации - его тоже нужно запускать 6 раз. переключая каналы сплиттера.