Quero escrever um esboço que possa ser compilado em diferentes placas do Arduino. Quero exibir no PC qual placa está conectada no momento.
Isso significa que o usuário conecta o PC via cabo USB à placa Arduino / Teensy na qual executa meu sketch e meu sketch informa ao PC via Serial qual placa está conectada. No PC, meu aplicativo C # recebe esses dados e os exibe.
Portanto, preciso do quadro selecionado quando o esboço foi compilado:
Encontrei o código em https://github.com/backupbrain/ArduinoBoardManager, mas ele não fornece resultados corretos (além do fato de que várias placas estão ausentes).
Aqui está um trecho do código:
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(.....
Portanto, esse código fornece o mesmo resultado (BOARD = 0x04 = Micro) para Yun 16MHz, Micro, Leonardo e Esplora.
Existe alguma maneira de entrar no meu código C exatamente a string que o usuário selecionou no menu do compilador Arduino?
Respostas:
Graças à ajuda de Charlie Hanson e Jantje, encontrei a solução universal!
Como é uma pena que todo programador do Arduino tenha que passar pela mesma dificuldade para descobrir como obter o nome do quadro, vou oferecer meu código ao público para que todos possam copiá-lo e colá-lo.
Aqui está:
Você pode até colocar esse código em um novo arquivo de cabeçalho e # incluí-lo em seu projeto.
PD Se você deseja conhecer adicionalmente à placa também o modelo da CPU, procure o arquivo avr_cpunames.h
fonte
note que este é um mod do Windows. Algo semelhante deve existir no Linux.
O primeiro é rápido e fácil. Simplesmente modifique os arquivos platform.txt que você está usando, conforme descrito a seguir. A desvantagem disso é que você precisará alterar os arquivos platform.txt a cada versão.
adicione -DBOARD = \ "$ {build.board} \" à receita. Isso permitirá
O que fornece a string "ARDUINO_AVR_LEONARDO" (para o leonardo) em boardName.
A segunda maneira é mudar para um IDE melhor (como já proposto por outros). Como criador do plug-in do arduino eclipse, aconselho usar o plug-in do arduino eclipse. No plug-in do arduino eclipse, faça o seguinte: Clique com o botão direito do mouse no projeto-> propriedades-> arduino-> guia "opções de compilação"
no campo anexar ao C e C ++.
Isso fará com que o código acima compile
Adendo
Eu não sabia que você queria o "nome bonito". Não tenho certeza se isso pode ser corrigido no platform.txt no arduino IDE. No plug-in do arduino eclipse, altere a correção acima em
para obter o belo nome (para o leonardo "Arduino Leonardo") na placa de definição.
fonte
Os nomes exatos no menu vêm do arquivo boards.txt no IDE do Arduino (Arduino \ hardware \ arduino \ avr \ boards.txt). Eu acho que você teria que analisar o arquivo sozinho e encontrar a placa detectada lá.
fonte
Eu fiz uma pergunta relacionada há um tempo atrás.
Existe um arquivo interno * .h, criado pelo IDE, e contém o tipo de placa que foi selecionada. A lista de opções possíveis é fornecida na pergunta vinculada, mas apenas para placas AVR. Eu acredito que a lista não-AVR é muito menor.
É simplesmente uma questão de adicionar algumas instruções condicionais para enviar ao PC as informações corretas. Um exemplo simples:
Se você precisar consultar o tipo de quadro mais de uma vez no esboço, use o seguinte formato:
O último é muito mais organizado, mesmo que você precise apenas
__BOARD_TYPE
uma vez, pois remove o#ifdef
pedaço pesado de suas funções.Obviamente, você precisará escrever um para cada quadro que espera que o usuário final possa ter, e possivelmente precisará atualizar esta lista à medida que novos modelos aparecerem.
fonte
A resposta original está desatualizada à medida que novas placas foram adicionadas. O teste básico está correto, mas não está claro de onde vem a lista de painéis.
Se você localizar o
boards.txt
arquivo e examiná-lo (por exemplo,~\Library\Arduino\hardware\arduino\avr\boards.txt
em um Mac), cada placa terá uma entrada ao longo das linhas de<BOARD>.build.board=<NAME>
, portanto, por exemplo, o MKR1000 teria uma linha:mkr1000.build.board=SAMD_MKR1000
O #define correspondente pode ser gerado prefixando o
<NAME>
comARDUINO_
neste exemplo, o código a seguir apresentará um erro para uma placa MKR1000 ...#if defined(ARDUINO_SAMD_MKR1000) #error
fonte