Форм-фактор Arduino Uno позволяет поставить на ELBEAR привычный шилд, а пакет MIK32 Boards поддерживает стандартные функции Arduino. Но внутри ACE-UNO находится не AVR, а 32-битный RISC-V микроконтроллер MIK32. Поэтому старый скетч может не собраться или начать работать иначе.
Если ошибка появляется при компиляции, сначала посмотрите, где именно она возникла: в самом скетче или в сторонней библиотеке. Код на digitalWrite(), analogRead(), Wire и SPI обычно переносится проще. Код с прямым обращением к регистрам AVR — например, PORTB, DDRB, TCCR1A — привязан к другому микроконтроллеру и потребует переделки.
То же относится к библиотекам. Пометка «для Arduino» ещё не означает поддержку любой архитектуры. Перед установкой стоит проверить поле architectures в library.properties, список поддерживаемых плат и наличие условий вроде #ifdef __AVR__ в исходниках. Для начала лучше свериться со списком библиотек, уже проверенных с MIK32 Boards.
Если скетч собрался, но устройство ведёт себя не так, следующий кандидат — выводы. Не подставляйте номера, запомнившиеся по другой плате. Используйте обозначения SDA, SCL, A0 и LED_BUILTIN.
С прерываниями нужна отдельная проверка: на ACE-UNO они доступны не на каждом выводе. В текущем BSP это D2–D5, D8, D9, A1 и встроенная кнопка. Функция digitalPinToInterrupt() вернёт для остальных выводов NOT_AN_INTERRUPT.
У ACE-UNO штатные SDA и SCL — отдельные выводы. Это не A4 и A5, как на классической Arduino Uno. А у самих A0–A5 есть DIP-переключатели аналогового тракта. Их назначение и распиновка показаны на странице ACE-UNO.
Для обычного входа, который опрашивается через digitalRead(), внутренние подтяжки работают. Но включать их вызовом digitalWrite(HIGH) для вывода, уже настроенного как вход, нельзя. Используйте INPUT_PULLUP. Доступна и подтяжка к земле через INPUT_PULLDOWN:
pinMode(buttonPin, INPUT_PULLDOWN);
Следующая проверка — аналоговые измерения и ШИМ. АЦП MIK32 имеет аппаратное разрешение 12 бит, но analogRead() по умолчанию возвращает результат в привычном для Arduino 10-битном представлении и усредняет десять измерений. Для получения 12-битного результата разрешение задаётся явно:
analogReadResolution(12);
У обычного ШИМ, создаваемого через analogWrite(), по умолчанию разрешение 8 бит, а частота составляет 1 кГц. Если проекту нужна другая частота, вызов analogWriteFrequency() следует сделать до первого analogWrite(). Эта настройка относится именно к обычному ШИМ: Servo и tone() используют свои механизмы.
Каналы одного аппаратного таймера не могут работать на разных частотах, а часть выводов ШИМ делит функции с SPI. Если проект одновременно использует несколько каналов или SPI, совместимость выводов нужно сверить с особенностями BSP и описанием платы.
Наконец, не забывайте про электрическую часть. Логические уровни ACE-UNO — 3,3 В. Совпадающий разъём не делает пяти-вольтовый шилд безопасным. Нужно отдельно проверить питание и уровни его сигнальных линий; подавать 5 В на цифровой вход MIK32 нельзя.
Получается короткий порядок проверки: найти архитектурно-зависимый код, сверить поддержку библиотек, проверить обозначения выводов, затем настройки АЦП, ШИМ и прерываний, и только после этого искать редкую ошибку в компиляторе или самой плате. Особенности текущего BSP собраны в документации и в репозитории MIK32 Boards.
Если есть скетч для обычной Arduino Uno, который не удалось перенести на ACE-UNO, приложите ссылку или текст ошибки. По конкретному примеру будет проще понять, каких совместимых функций или библиотек не хватает.