Не компилируется скетч для Arduino Due Troykai2cHub

Bolcman
Offline
Зарегистрирован: 23.01.2021

Здравствуйте, столкнулся с проблемой.

IDE отказывается компилировать стандартный скетч для модуля Troyka i2c Hub на Arduino Duo на базе ARM.

Скетч из примера спокойно работает на Уно.

Очень нужно завести на Дуо, помогите пожалуйста.

Скетч:
 

// библиотека для работы с I²C хабом
#include <TroykaI2CHub.h>

// создаём объект для работы с хабом
// адрес по умолчанию 0x70
TroykaI2CHub splitter;

// можно создавать несколько объектов с разными адресами
// подробнее читайте на:
// http://wiki.amperka.ru/продукты:troyka-i2c-hub

void setup() {
  // открываем последовательный порт
  Serial.begin(115200);
  // ждём открытия порта
  while(!Serial) {
  }
  // печатаем сообщение об успешной инициализации Serial-порта
  Serial.println("Serial init OK");
  // начало работы с I²C хабом
  splitter.begin();
  Serial.println("Splitter init OK");
  // ждём одну секунду
  delay(1000);
}

void loop() {
  // счётчик цикла
  for (int i = 0; i < 8; i++) {
    // переключаем по очереди каналы
    splitter.setBusChannel(i);
    // выводим номер канала
    Serial.print("Set channel ");
    Serial.print(i);
    Serial.println(":");
    // запускаем I²C сканер
    startScanerI2C();
    // ждём одну секунду
    delay(1000);
  }
}

void startScanerI2C()
{
  // переменная состояние ответа
  byte state;
  // переменная хранения текущего адреса
  byte address;
  // переменная для хранения количества найденых I²C устройств
  int countDevices = 0;
  // печатем о начале поиска
  Serial.println("Scanning...");
  // перебираем по очереди все адреса от 0 до 127
  for (address = 1; address < 127; address++ ) {
    // начинаем передачу данных по текущем адресу
    Wire.beginTransmission(address);
    // завершаем передачу данных
    state = Wire.endTransmission();
    // если пришедший байт равен нулю
    if (state == 0) {
      // на адресе есть устройство
      // печатаем об этом
      Serial.print("I2C device found at address 0x");
      // если адрес меньше 16, печатем ноль
      if (address < 16) {
        Serial.print("0");
      }
      // печатаем текущий адрес в 16 разрядной системе исчесления
      Serial.print(address, HEX);
      Serial.println("  !");
      // инкрементируем кол-во найденых устройств
      countDevices++;
    }    
  }
  // если не найдено ни одного I²C устройства
  // печатаем об этом
  if (countDevices == 0) {
    Serial.println("No I²C devices found");
  } else {
    // печатаем о завершении процесса
    Serial.println("Done");
  }
}

Выдает следующую ошибку:

Compiling .pio\build\due\FrameworkArduino\USB\CDC.cpp.o
Compiling .pio\build\due\FrameworkArduino\USB\PluggableUSB.cpp.o
Compiling .pio\build\due\FrameworkArduino\USB\USBCore.cpp.o
Compiling .pio\build\due\FrameworkArduino\WInterrupts.c.o
*** [.pio\build\due\lib227\TroykaI2CHub\TroykaI2CHub.cpp.o] Error 1
C:\Users\Pavel\.platformio\packages\framework-arduino-sam\cores\arduino\USB\USBCore.cpp: In function 'void USB_ISR()':
C:\Users\Pavel\.platformio\packages\framework-arduino-sam\cores\arduino\USB\USBCore.cpp:688:21: warning: this 'else' clause does not guard... [-Wmisleading-indentatio
n]
                     else
                     ^~~~
C:\Users\Pavel\.platformio\packages\framework-arduino-sam\cores\arduino\USB\USBCore.cpp:690:9: note: ...this statement, but the latter is misleadingly indented as if
it were guarded by the 'else'
         UDD_Send8(EP0, 0);
         ^~~~~~~~~
========================== [FAILED] Took 1.31 seconds ==========================

Я так понимаю проблема скомпилировать этот файл библиотеки TroykaI2CHub.cpp
 

#include "TroykaI2CHub.h"

TroykaI2CHub::TroykaI2CHub(uint8_t i2cHubAddr) {
    _i2cHubAddr = i2cHubAddr;
}

TroykaI2CHub::~TroykaI2CHub() {
}

void TroykaI2CHub::begin() {
    Wire.begin();
    setBusChannel(DEFAULT_CHANNEL);
}

void TroykaI2CHub::setBusChannel(uint8_t channel) {
    if (channel >= COUNT_CHANNEL) {
        return false;
    }

    Wire.beginTransmission(_i2cHubAddr);
    Wire.write(channel | ENABLE_MASK);
    Wire.endTransmission();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Bolcman пишет:

Я так понимаю проблема скомпилировать этот файл библиотеки TroykaI2CHub.cpp

нет, ошибка в USB\USBCore.cpp

Вопрос - а где-нить вообще упоминается. что библиотека совместима с Дуе?

И второе - я бы попробовал собрать код в обычном Ардуино ИДЕ.  Многие жалуются, что платформио криво работает с пакетами других МК и их библиотеками.

Bolcman
Offline
Зарегистрирован: 23.01.2021

Вот это выдает Arduino IDE:
 

In file included from C:\Users\Pavel\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\cores\arduino/Arduino.h:44:0,
                 from C:\Users\Pavel\Documents\Arduino\libraries\TroykaI2CHub\src\TroykaI2CHub.h:14,
                 from C:\Users\Pavel\Documents\Arduino\libraries\TroykaI2CHub\src\TroykaI2CHub.cpp:11:
C:\Users\Pavel\Documents\Arduino\libraries\TroykaI2CHub\src\TroykaI2CHub.cpp: In member function 'void TroykaI2CHub::setBusChannel(uint8_t)':
C:\Users\Pavel\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\cores\arduino/wiring_constants.h:34:15: error: return-statement with a value, in function returning 'void' [-fpermissive]
 #define false 0x0
               ^
C:\Users\Pavel\Documents\Arduino\libraries\TroykaI2CHub\src\TroykaI2CHub.cpp:27:16: note: in expansion of macro 'false'
         return false;
                ^
exit status 1
Ошибка компиляции для платы Arduino Due (Programming Port).

 

sadman41
Offline
Зарегистрирован: 19.10.2016

>>> Вопрос - а где-нить вообще упоминается. что библиотека совместима с Дуе?

Bolcman
Offline
Зарегистрирован: 23.01.2021

Написано, что совместимо с любыми Ардуино.
Код здесь есть.
https://github.com/amperka/TroykaI2CHub
 

sadman41
Offline
Зарегистрирован: 19.10.2016

Функция описана, как void, а зачем-то возвращает false.

Вопрос к Amperk-е - зачем выкладывают библиотеки с ошибками. Можете их пинать или самостоятельно исправить библиотеку.

 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Bolcman пишет:

Написано, что совместимо с любыми Ардуино.
Код здесь есть.
https://github.com/amperka/TroykaI2CHub
 

жестоко обманули )))
видимо придётся переписать библиотеку

Bolcman
Offline
Зарегистрирован: 23.01.2021
b707
Offline
Зарегистрирован: 26.05.2017

Bolcman пишет:

Написано, что совместимо с любыми Ардуино.


не надо понимать "любые" так буквально. Если нет специального уточнения - обычно это означает " любые АВР" - то есть уно, нано, мега, мини...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Bolcman пишет:

Решено!
Спасибо всем за участие=)
http://forum.amperka.ru/threads/Не-компилируется-скетч-для-arduino-due-troykai2chub.21754/

Вам это и посоветовали )))

ЗЫ или воспользоваться правленой библиотекой