Не компилируется скетч для Arduino Due Troykai2cHub
- Войдите на сайт для отправки комментариев
Сб, 23/01/2021 - 12:58
Здравствуйте, столкнулся с проблемой.
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(); }
Я так понимаю проблема скомпилировать этот файл библиотеки TroykaI2CHub.cpp
нет, ошибка в USB\USBCore.cpp
Вопрос - а где-нить вообще упоминается. что библиотека совместима с Дуе?
И второе - я бы попробовал собрать код в обычном Ардуино ИДЕ. Многие жалуются, что платформио криво работает с пакетами других МК и их библиотеками.
Вот это выдает Arduino IDE:
>>> Вопрос - а где-нить вообще упоминается. что библиотека совместима с Дуе?
Написано, что совместимо с любыми Ардуино.
Код здесь есть.
https://github.com/amperka/TroykaI2CHub
Функция описана, как void, а зачем-то возвращает false.
Вопрос к Amperk-е - зачем выкладывают библиотеки с ошибками. Можете их пинать или самостоятельно исправить библиотеку.
Написано, что совместимо с любыми Ардуино.
Код здесь есть.
https://github.com/amperka/TroykaI2CHub
жестоко обманули )))
видимо придётся переписать библиотеку
Решено!
Спасибо всем за участие=)
http://forum.amperka.ru/threads/Не-компилируется-скетч-для-arduino-due-troykai2chub.21754/
Написано, что совместимо с любыми Ардуино.
не надо понимать "любые" так буквально. Если нет специального уточнения - обычно это означает " любые АВР" - то есть уно, нано, мега, мини...
Решено!
Спасибо всем за участие=)
http://forum.amperka.ru/threads/Не-компилируется-скетч-для-arduino-due-troykai2chub.21754/
Вам это и посоветовали )))
ЗЫ или воспользоваться правленой библиотекой