Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
For my IoT project I needed to write code slightly differently for specific Arduino boards. E.g. for Arduino UNO I wanted to use Serial to talk to ESP8266 and for Arduino Mega wanted to use Serial1. So basically I wanted to use Board specific #defines
#ifdef MEGA
#define SERIAL Serial1
#elif UNO
#define SERIAL Serial
#endif
SERIAL.println("Something")
For that I needed to get board specific #defines for each of the board options in the Arduino IDE, so that as I change the board type in the IDE, I automatically build code for that specific board.
That information is actually available in a file called board.txt inside your arduino install folder. For me it is G:\arduino-1.6.5\arduino-1.6.5-r5\hardware\arduino\avr\boards.txt. For each board there is a section inside that file and the relevant entries look something as follows
##############################################################
uno.name=Arduino/Genuino Uno
uno.vid.0=0x2341
uno.pid.0=0x0043
uno.vid.1=0x2341
uno.pid.1=0x0001
...
uno.build.board=AVR_UNO
uno.build.core=arduino
uno.build.variant=standard
The .board entry when prefixed by ARDUINO_ becomes the #define. I wrote a quick PowerShell routine to get all such entires. The code for it is in GitHub at https://github.com/bonggeek/Samples/blob/master/Arduino/ListBoard.ps1
$f = Get-ChildItem -Path $args[0] -Filter "boards.txt" -Recurse
foreach($file in $f)
{
Write-Host "For file" $file.FullName
foreach ($l in get-content $file.FullName) {
if($l.Contains(".name")) {
$b = $l.Split('=')[1];
}
if($l.Contains(".board")) {
$s = [string]::Format("{0,-40}ARDUINO_{1}", $b, ($l.Split('=')[1]));
Write-Host $s
}
}
}
Given the argument of root folder or Arduino install, you get the following.
PS C:\Users\abhinaba> D:\SkyDrive\bin\ListBoard.ps1 G:\arduino-1.6.5\
For file G:\arduino-1.6.5\arduino-1.6.5-r5\hardware\arduino\avr\boards.txt
Arduino Yún ARDUINO_AVR_YUN
Arduino/Genuino Uno ARDUINO_AVR_UNO
Arduino Duemilanove or Diecimila ARDUINO_AVR_DUEMILANOVE
Arduino Nano ARDUINO_AVR_NANO
Arduino/Genuino Mega or Mega 2560 ARDUINO_AVR_MEGA2560
Arduino Mega ADK ARDUINO_AVR_ADK
Arduino Leonardo ARDUINO_AVR_LEONARDO
Arduino/Genuino Micro ARDUINO_AVR_MICRO
Arduino Esplora ARDUINO_AVR_ESPLORA
Arduino Mini ARDUINO_AVR_MINI
Arduino Ethernet ARDUINO_AVR_ETHERNET
Arduino Fio ARDUINO_AVR_FIO
Arduino BT ARDUINO_AVR_BT
LilyPad Arduino USB ARDUINO_AVR_LILYPAD_USB
LilyPad Arduino ARDUINO_AVR_LILYPAD
Arduino Pro or Pro Mini ARDUINO_AVR_PRO
Arduino NG or older ARDUINO_AVR_NG
Arduino Robot Control ARDUINO_AVR_ROBOT_CONTROL
Arduino Robot Motor ARDUINO_AVR_ROBOT_MOTOR
Arduino Gemma ARDUINO_AVR_GEMMA
So now I can use
#ifdef ARDUINO_AVR_MEGA2560
// Serial 1: 19 (RX) 18 (TX);
#define SERIAL Serial1
#elif ARDUINO_AVR_NANO
#define SERIAL Serial
#endif // ARDUINO_MEGA