Я хочу написать эскиз, который можно скомпилировать на разных платах Arduino. Я хочу показать на ПК, какая плата в данный момент подключена.
Это означает, что пользователь подключает ПК через USB-кабель к плате Arduino / Teensy, на которой выполняется мой эскиз, а мой эскиз сообщает ПК через Serial, какая плата подключена. На ПК запускается мое приложение C #, которое получает эти данные и отображает их.
Поэтому мне нужна доска, которая была выбрана при компиляции эскиза:
Я нашел код на https://github.com/backupbrain/ArduinoBoardManager, но он не дает правильных результатов (за исключением того, что несколько плат отсутствуют).
Вот фрагмент кода:
static const uint8_t BOARD_MICRO= 0x04;
....
#elif defined(__AVR_Atmega32U4__) // Yun 16Mhz, Micro, Leonardo, Esplora
static const uint8_t BOARD = 0x04;
static const uint8_t NUM_BITS = 8;
static const uint16_t CPU = __AVR_Atmega32U4__;
static const unsigned long SRAM_SIZE = 2500;
static const unsigned long EEPROM_SIZE = 1000;
static const unsigned long FLASH_SIZE = 32000;
#elif defined(.....
Таким образом, этот код дает тот же результат (BOARD = 0x04 = Micro) для Yun 16 МГц, Micro, Leonardo y Esplora.
Есть ли способ получить в моем C-коде именно ту строку, которую пользователь выбрал в меню компилятора Arduino selecetd?
Ответы:
Благодаря помощи Чарли Хансона и Янтье я нашел универсальное решение!
Жаль, что каждому программисту Arduino приходится сталкиваться с одной и той же болью, чтобы понять, как получить название платы, я предложу свой код широкой публике, чтобы каждый мог просто скопировать и вставить его.
Вот:
Вы даже можете поместить этот код в новый заголовочный файл и включить его в свой проект.
PD Если вы хотите узнать дополнительно к плате также модель процессора, найдите файл avr_cpunames.h
источник
обратите внимание, что это мод для Windows, что-то подобное должно существовать в Linux.
Первый быстрый и легкий. Просто измените файлы platform.txt, которые вы используете, как описано ниже. Недостатком этого является то, что вам нужно будет менять файлы platform.txt с каждым выпуском.
добавьте -DBOARD = \ "$ {build.board} \" к рецепту. Это позволит
Что дает вам строку "ARDUINO_AVR_LEONARDO" (для Леонардо) в BoardName.
Второй способ - перейти на более совершенную IDE (как уже было предложено другими). Как создатель плагина arduino eclipse я бы посоветовал использовать плагин arduino eclipse. В плагине arduino eclipse вы делаете это следующим образом: Щелкните правой кнопкой мыши по проекту -> свойства -> arduino-> вкладка «Параметры компиляции»
в приложении к полю C и C ++.
Это сделает приведенный выше код для компиляции
Adendum
Я не знал, что вы хотели "красивое имя". Я не уверен, что это можно исправить в платформе .txt в IDE Arduino. В плагине arduino eclipse измените исправление выше в
чтобы получить красивое имя (для леонардо "Arduino Leonardo") в определении доски.
источник
Точные названия в меню взяты из файлаboards.txt в вашей среде разработки Arduino (Arduino \ hardware \ arduino \ avr \ boards.txt). Я думаю, вам придется проанализировать файл самостоятельно и найти там обнаруженную плату.
источник
Я задал связанный вопрос некоторое время назад.
Существует внутренний файл * .h, который создается в среде IDE и в котором хранится выбранный тип платы. Список возможных опций приведен в связанном вопросе, но только для плат AVR. Я считаю, что список не-AVR намного короче.
Это просто вопрос добавления некоторых условных операторов для отправки ПК правильной информации. Простой пример:
Если вам нужно более одного раза ссылаться на тип доски в эскизе, используйте следующий формат:
Последнее намного аккуратнее, даже если вам нужно только
__BOARD_TYPE
один раз, так как оно удаляет громоздкий#ifdef
кусок из ваших функций.Вам, конечно, придется написать по одному для каждой платы, которую, как вы ожидаете, может иметь ваш конечный пользователь, и вам, возможно, придется обновлять этот список по мере появления новых моделей.
источник
Оригинальный ответ устарел, так как были добавлены новые доски. Базовый тест правильный, но неясно, откуда берется список плат.
Если вы найдете
boards.txt
файл и просмотрите его (например,~\Library\Arduino\hardware\arduino\avr\boards.txt
на Mac), на каждой плате будет запись по строкам<BOARD>.build.board=<NAME>
, например, у MKR1000 будет строка:mkr1000.build.board=SAMD_MKR1000
Соответствующий #define может быть сгенерирован с префиксом
<NAME>
with,ARDUINO_
поэтому в этом примере следующий код выдаст ошибку для платы MKR1000 ...#if defined(ARDUINO_SAMD_MKR1000) #error
источник