Jenis variabel apa yang digunakan Serial.print()?

Di Arduino, saya perlu menggunakan Serial.print() di dalam fungsi seperti;

void loop()
{
    serial_send(any_type);
}

void serial_send(type message)
{
   Serial.print(message);
}

Serial.print dapat menerima semua jenis variabel seperti int, double atau String. Bagaimana saya bisa mendapatkan perilaku yang sama dengan serial_send jadi saya tidak perlu menentukan tipenya?


person bladekel    schedule 23.08.2019    source sumber
comment
Mengapa tidak google Serial.pring arduino dan klik salah satu hasil pertama untuk mengetahuinya?   -  person Tomáš Zato - Reinstate Monica    schedule 23.08.2019
comment
@ TomášZato Saya rasa inti pertanyaannya di sini adalah untuk memahami bagaimana mungkin fungsi seperti Serial.print() dapat menerima semua jenis argumen - Saya membayangkan OP mungkin ingin menulis argumennya sendiri fungsi yang dapat mengambil jenis apa pun. Ini pertanyaan yang bagus. Jawabannya dapat ditemukan di kode sumber, tetapi OP mungkin tidak tahu di mana menemukannya.   -  person Caleb    schedule 23.08.2019
comment
@Caleb Maaf, saya salah memahami pertanyaannya.   -  person Tomáš Zato - Reinstate Monica    schedule 23.08.2019


Jawaban (2)


Inilah gunanya template. Menggunakan

template <typename T>
void serial_send(T message)
{
   Serial.print(message);
}

Anda dapat memanggil send_message dengan tipe apa pun yang Anda inginkan dan selama print memiliki kelebihan, itu akan berfungsi. Jika tidak, Anda akan mendapatkan pesan kesalahan karena tidak ada panggilan yang cocok ke print.

person NathanOliver    schedule 23.08.2019

Ini bukan satu Serial.print. Nama fungsi print 'kelebihan beban' untuk banyak fungsi dengan parameter berbeda. Kutipan dari Print.h

    size_t print(const __FlashStringHelper *);
    size_t print(const String &);
    size_t print(const char[]);
    size_t print(char);
    size_t print(unsigned char, int = DEC);
    size_t print(int, int = DEC);
    size_t print(unsigned int, int = DEC);
    size_t print(long, int = DEC);
    size_t print(unsigned long, int = DEC);
    size_t print(double, int = 2);
    size_t print(const Printable&);

Jika Anda ingin menggabungkan fungsi Serial.print, Anda dapat menggunakan fungsi templat dari jawaban NathanOliver. Kompiler akan menghasilkan fungsi berdasarkan templat untuk setiap tipe parameter yang digunakan dalam sketsa Anda dengan templat.

person Juraj    schedule 23.08.2019