Saya ingin menulis sketsa yang dapat dikompilasi di papan Arduino yang berbeda. Saya ingin menampilkan pada PC papan mana yang saat ini terhubung.
Ini berarti bahwa pengguna menghubungkan PC melalui kabel USB ke papan Arduino / Teensy di mana menjalankan sketsa saya dan sketsa saya memberitahu PC melalui Serial papan mana yang terhubung. Di PC saya menjalankan aplikasi C # yang menerima data ini dan menampilkannya.
Karena itu saya membutuhkan papan yang telah dipilih ketika sketsa telah dikompilasi:
Saya menemukan kode di https://github.com/backupbrain/ArduinoBoardManager tetapi tidak memberikan hasil yang benar (terlepas dari kenyataan bahwa beberapa papan hilang).
Berikut cuplikan dari kode:
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(.....
Jadi kode ini memberikan hasil yang sama (BOARD = 0x04 = Mikro) untuk Yun 16MHz, Micro, Leonardo y Esplora.
Apakah ada cara untuk mendapatkan kode C saya persis string yang telah dipilih pengguna dalam menu dari kompiler Arduino?
Jawaban:
Berkat bantuan Charlie Hanson dan jantje, saya menemukan solusi universal!
Sangat disayangkan bahwa setiap programmer Arduino harus melalui rasa sakit yang sama untuk mengetahui cara mendapatkan nama papan, saya akan menawarkan kode saya kepada publik sehingga semua orang bisa menyalin dan menempelkannya.
Ini dia:
Anda bahkan dapat memasukkan kode ini ke file header baru dan # memasukkannya ke dalam proyek Anda.
PD Jika Anda ingin tahu lebih lanjut juga tentang model CPU, cari file avr_cpunames.h
sumber
perhatikan ini adalah mod windows sesuatu yang serupa harus ada di linux.
Yang pertama cepat dan mudah. Cukup modifikasi file platform.txt yang Anda gunakan seperti dijelaskan di bawah. Yang menarik dari ini adalah Anda perlu mengubah file platform.txt dengan setiap rilis.
tambahkan -DBOARD = \ "$ {build.board} \" ke resep. Ini akan memungkinkan
Yang memberi Anda string "ARDUINO_AVR_LEONARDO" (untuk leonardo) di boardName.
Cara kedua adalah beralih ke IDE yang lebih baik (seperti yang sudah diusulkan oleh orang lain). Sebagai pencipta plugin arduino eclipse, saya akan menyarankan untuk menggunakan plugin arduino eclipse. Dalam plugin arduino eclipse Anda melakukan ini sebagai berikut: Klik kanan pada project-> properties-> arduino-> tab "compile options" put
di bidang tambahkan ke C dan C ++.
Ini akan membuat kode di atas untuk dikompilasi
Adendum
Saya tidak sadar Anda menginginkan "nama yang bagus". Saya tidak yakin ini bisa diperbaiki di platform.txt di arduino IDE. Di plugin arduino eclipse ubah fixe di atas di
untuk mendapatkan nama yang bagus (untuk leonardo "Arduino Leonardo") di Papan define.
sumber
Nama-nama persis di menu berasal dari file boards.txt di IDE Arduino Anda (Arduino \ hardware \ arduino \ avr \ boards.txt). Saya pikir Anda harus mengurai file sendiri dan menemukan papan yang terdeteksi di sana.
sumber
Saya mengajukan pertanyaan terkait beberapa waktu lalu.
Ada file * .h internal yang dibuat oleh IDE, dan menyimpan di dalamnya jenis papan yang telah dipilih. Daftar opsi yang memungkinkan diberikan dalam pertanyaan yang ditautkan, tetapi hanya untuk papan AVR. Saya percaya daftar non-AVR jauh lebih pendek.
Ini hanyalah masalah menambahkan beberapa pernyataan kondisional untuk mengirim PC informasi yang benar. Contoh sederhana:
Jika Anda perlu merujuk pada jenis papan lebih dari satu kali dalam sketsa, gunakan format berikut:
Yang terakhir jauh lebih rapi, bahkan jika Anda hanya perlu
__BOARD_TYPE
sekali, karena menghapus#ifdef
potongan rumit dari fungsi Anda.Anda tentu saja harus menulis satu untuk setiap papan yang Anda harapkan dapat dimiliki oleh pengguna akhir Anda, dan Anda mungkin perlu memperbarui daftar ini ketika model baru muncul.
sumber
Jawaban asli sudah usang karena papan baru telah ditambahkan. Tes dasar sudah benar, tetapi tidak jelas dari mana daftar papan berasal.
Jika Anda menemukan
boards.txt
file dan melihatnya (mis.~\Library\Arduino\hardware\arduino\avr\boards.txt
Pada Mac), setiap papan akan memiliki entri di sepanjang baris<BOARD>.build.board=<NAME>
, jadi misalnya, MKR1000 akan memiliki baris:mkr1000.build.board=SAMD_MKR1000
#Define yang sesuai dapat dihasilkan dengan mengawali
<NAME>
denganARDUINO_
sehingga dalam contoh ini, kode berikut akan kesalahan untuk papan MKR1000 ...#if defined(ARDUINO_SAMD_MKR1000) #error
sumber