Saya ingin memindahkan beberapa kode saya ke tab kedua di Arduino IDE, agar semuanya lebih teratur. Pada awalnya, saya hanya mencoba memindahkan fungsi, dan sepertinya berfungsi dengan baik. Saya dapat memanggil fungsi dari setup()
fungsi di tab utama saya, dan tidak ada masalah saat mengompilasi atau mengunggah.
Namun, saya mencoba menempatkan seluruh kelas ke tab kedua, dan tiba-tiba itu tidak berfungsi lagi. Sebagai contoh:
Tab 1:
TestClass obj;
void setup()
{
obj.init();
}
void loop()
{
//...
}
Tab 2:
class TestClass
{
public:
void init()
{
//...
}
};
Ketika saya mencoba untuk mengkompilasi ini, itu memberi saya kesalahan berikut:
tab1:1: error: 'TestClass' does not name a type
tab1.ino: In function 'void setup()':
tab1:5: error: 'obj' was not declared in this scope
Mengapa ia mengenali fungsi di tab lain, tetapi bukan kelas? Apakah ada cara untuk membuatnya bekerja di Arduino IDE, atau apakah saya perlu menggunakan alternatif seperti Eclipse?
programming
arduino-ide
compile
Peter Bloomfield
sumber
sumber
#include
?tab1
dantab2
masing - masing. Nama-nama itu diatur menggunakan IDE, sehingga file yang mendasarinya sama-sama.ino
.Jawaban:
Tidak mungkin untuk mendeklarasikan dan menggunakan kelas yang dideklarasikan dalam satu
.pde
file di.pde
file lain dari dalam Arduino IDE.Salah satu solusinya adalah membuat file kedua menjadi file sumber C ++ (
.cpp
) dan kemudian menambahkan#include "<filename>"
arahan di awal file pertama.Kode ini dikompilasi dengan benar:
Tab 1:
test.cpp:
sumber
TestClass::init()
mencoba meneleponpinMode()
, kompiler mengeluh yangpinMode
tidak dideklarasikan dalam lingkup ini. Apakah ada cara untuk mengakses fungsi Arduino di kelas saya?#include <Arduino.h>
ke bagian atas.cpp
file.#include "test.cpp"
). Ini bekerja, tetapi mungkin rem pemahaman proses menghubungkan. Hanya file header yang harus dimasukkan.Cara kerja Arduino IDE adalah mengkompilasi kode Anda (kode yang Anda tulis dalam IDE) sebagai kode "utama". Kemudian ia menarik kode dari semua perpustakaan yang telah Anda impor dan mengkompilasinya bersama dengan kode utama. Untuk melakukan apa yang Anda sarankan akan mengharuskan Anda membuat perpustakaan untuk Arduino.
Berikut ini beberapa informasi lebih lanjut tentang perpustakaan Arduino:
http://arduino.cc/en/Guide/Libraries
Dan berikut ini beberapa cara membuat perpustakaan:
http://arduino.cc/en/Hacking/LibraryTutorial // yang ini adalah yang termudah untuk dipahami imo
http://playground.arduino.cc/Code/Library
http://www.divilabs.com/2013/03/ write-your-own-arduino-library.html #
Berikut adalah contoh perpustakaan yang saya tulis https://github.com/jamolnng/Arduino/tree/master/libraries/ShiftRegister seperti yang Anda lihat tidak ada masalah dengan memanggil fungsi Arduino dari file .cpp (saya tahu, saya sudah menguji perpustakaan)
sumber
.h
dan.cpp
file di proyek utama Anda, tanpa harus membuat perpustakaan terpisah.