Не срабатывает i²c хаб (troyka-модуль)

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Иван981, 3 сен 2020.

Метки:
  1. Иван981

    Иван981 Нуб

    Здравствуйте!

    У меня 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
     
  2. b707

    b707 Гуру

    если метод tcs.begin(); посылает какие-то команды датчику для инициализации - его тоже нужно запускать 6 раз. переключая каналы сплиттера.
     
    Иван981 нравится это.
  3. Иван981

    Иван981 Нуб

    Спасибо! :) Заработало!!