Bagaimana cara mengubah int,, n
menjadi string sehingga ketika saya mengirimkannya melalui serial, itu dikirim sebagai string?
Inilah yang saya miliki sejauh ini:
int ledPin=13;
int testerPin=8;
int n=1;
char buf[10];
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(testerPin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
digitalWrite(ledPin, HIGH);
sprintf(buf, "Hello!%d", n);
Serial.println(buf);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
n++;
}
Jawaban:
Gunakan seperti ini:
Anda dapat menemukan lebih banyak contoh di sini .
sumber
gunakan
itoa()
fungsi yang disertakanstdlib.h
sumber
Anda cukup melakukan:
yang akan diubah
n
menjadi string ASCII secara otomatis. Lihat dokumentasi untukSerial.println()
.sumber
Anda hanya perlu membungkusnya di sekitar objek String seperti ini:
Anda juga bisa melakukan:
sumber
Ini adalah solusi kecepatan yang dioptimalkan untuk mengonversi int (bertanda integer 16-bit) menjadi string.
Implementasi ini menghindari penggunaan pembagian karena AVR 8-bit yang digunakan untuk Arduino tidak memiliki instruksi DIV perangkat keras, kompilator menerjemahkan pembagian menjadi pengurangan berulang yang memakan waktu. Jadi solusi tercepat adalah menggunakan cabang bersyarat untuk membangun string.
Buffer tetap 7 byte yang disiapkan dari awal dalam RAM untuk menghindari alokasi dinamis. Karena hanya 7 byte, biaya penggunaan RAM tetap dianggap minimum. Untuk membantu compiler, kami menambahkan pengubah register ke dalam deklarasi variabel untuk mempercepat eksekusi.
Sketsa ini dikompilasi menjadi 1.082 byte kode menggunakan avr-gcc yang dibundel dengan Arduino v1.0.5 (ukuran fungsi int2str sendiri adalah 594 byte). Dibandingkan dengan solusi menggunakan objek String yang dikompilasi menjadi 2.398 byte, implementasi ini dapat mengurangi ukuran kode Anda sebesar 1.2 Kb (diasumsikan bahwa Anda tidak memerlukan metode objek String lain, dan nomor Anda ketat untuk tipe int bertanda tangan).
Fungsi ini dapat dioptimalkan lebih jauh dengan menuliskannya dalam kode assembler yang tepat.
sumber
Solusinya terlalu besar. Coba yang sederhana ini. Harap berikan buffer 7+ karakter, tidak ada pemeriksaan yang dilakukan.
Dapat dengan mudah dimodifikasi untuk memberikan ujung belakang buffer, jika Anda membuang indeks 'l' dan menaikkan buffer secara langsung.
sumber
untuk lebih lanjut Anda dapat mengunjungi situs arduino https://www.arduino.cc/en/Serial/Println
berharap ini akan membantu Anda. Terima kasih!
sumber
Berikut di bawah ini adalah myitoa yang disusun sendiri () yang jauh lebih kecil dalam kode, dan menyimpan array TETAP 7 (termasuk mengakhiri 0) dalam char * mystring, yang sering diinginkan. Jelas bahwa seseorang dapat membangun kode dengan pergeseran karakter sebagai gantinya, jika seseorang membutuhkan string keluaran dengan panjang variabel.
sumber
Ini bekerja untuk saya:
sumber