Quiero escribir un boceto que se pueda compilar en diferentes tableros Arduino. Quiero mostrar en la PC qué placa está conectada actualmente.
Esto significa que el usuario conecta la PC a través del cable USB a la placa Arduino / Teensy en la que se ejecuta mi boceto y mi boceto le dice a la PC a través de la serie qué placa está conectada. En la PC ejecuta mi aplicación C # que recibe estos datos y los muestra.
Por lo tanto, necesito el tablero que se seleccionó cuando se compiló el boceto:
Encontré el código en https://github.com/backupbrain/ArduinoBoardManager pero no da resultados correctos (aparte del hecho de que faltan varias placas).
Aquí un fragmento del 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(.....
Entonces, este código da el mismo resultado (BOARD = 0x04 = Micro) para Yun 16MHz, Micro, Leonardo y Esplora.
¿Hay alguna forma de obtener en mi código C exactamente la cadena que el usuario ha seleccionado en el menú del compilador Arduino?
Respuestas:
¡Gracias a la ayuda de Charlie Hanson y Jantje encontré la solución universal!
Debido a que es una pena que cada programador de Arduino tenga que pasar por el mismo problema para descubrir cómo obtener el nombre de la placa, ofreceré mi código al público para que todos puedan copiarlo y pegarlo.
Aquí está:
Incluso puede poner este código en un nuevo archivo de encabezado e incluirlo en su proyecto.
PD Si desea conocer adicionalmente a la placa también el modelo de CPU, busque el archivo avr_cpunames.h
fuente
Tenga en cuenta que este es un mod de Windows, algo similar debe existir en Linux.
El primero es rápido y fácil. Simplemente modifique los archivos platform.txt que está utilizando como se describe a continuación. El inconveniente de esto es que necesitará cambiar los archivos de platform.txt con cada versión.
agregue -DBOARD = \ "$ {build.board} \" a la receta. Esto permitirá
Lo que te da la cadena "ARDUINO_AVR_LEONARDO" (para el leonardo) en boardName.
La segunda forma es cambiar a un IDE mejor (como ya lo propusieron otros). Como creador del complemento arduino eclipse, recomendaría usar el complemento arduino eclipse. En el complemento arduino eclipse, haga lo siguiente: Haga clic derecho en el proyecto-> propiedades-> arduino-> pestaña "opciones de compilación" poner
en el campo anexar a C y C ++.
Esto hará que el código anterior compile
Adendum
No sabía que querías el "buen nombre". No estoy seguro de que esto se pueda solucionar en platform.txt en arduino IDE. En el plugin Arduino Eclipse, cambie la corrección anterior en
para obtener el bonito nombre (para el leonardo "Arduino Leonardo") en la tabla de definición.
fuente
Los nombres exactos en el menú provienen del archivo boards.txt en su IDE Arduino (Arduino \ hardware \ arduino \ avr \ boards.txt). Creo que tendría que analizar el archivo usted mismo y encontrar la placa detectada allí.
fuente
Hice una pregunta relacionada hace un tiempo.
Existe un archivo * .h interno creado por el IDE y que contiene el tipo de placa que se ha seleccionado. La lista de opciones posibles se proporciona en la pregunta vinculada, pero solo para placas AVR. Creo que la lista no AVR es mucho más corta.
Es simplemente una cuestión de agregar algunas declaraciones condicionales para enviar a la PC la información correcta. Un simple ejemplo:
Si necesita referirse al tipo de tablero más de una vez en el boceto, use el siguiente formato:
Este último es mucho más ordenado, incluso si solo lo necesita
__BOARD_TYPE
una vez, ya que elimina la#ifdef
parte engorrosa de sus funciones.Por supuesto, tendrá que escribir uno para cada tablero que espera que su usuario final pueda tener, y posiblemente necesite actualizar esta lista a medida que aparezcan nuevos modelos.
fuente
La respuesta original está desactualizada ya que se han agregado nuevos tableros. La prueba básica es correcta, pero no está claro de dónde proviene la lista de tablas.
Si localiza el
boards.txt
archivo y lo revisa (por ejemplo,~\Library\Arduino\hardware\arduino\avr\boards.txt
en una Mac), cada placa tendrá una entrada en la misma línea que<BOARD>.build.board=<NAME>
, por ejemplo, el MKR1000 tendría una línea:mkr1000.build.board=SAMD_MKR1000
El #define correspondiente se puede generar con el prefijo
<NAME>
conARDUINO_
lo que en este ejemplo, el siguiente código de error para una junta MKR1000 ...#if defined(ARDUINO_SAMD_MKR1000) #error
fuente