Pengetahuan Dasar Komunikasi Serial Board Arduino
Pada bab kali ini kita akan belajar tentang Pengetahuan Dasar Komunikasi Serial Board Arduino, untuk mengirim data dari arduino ke PC dan sebaliknya (menerima data dari PC) kita bisa menggunakan berbagai cara dan salah satunya yg paling sederhana dan familiar adalah komunikasi Serial.
Perlu kita ketahui pemrograman sketch arduino menggunakan gaya bahasa C tapi pada pembuatan librarynya menggunakan C++ yg menerapkan pemrograman Objek (Class). Untuk itu sy sarankan anda sebaiknya mengetahuai sedikit dasar-dasar pemrograman berorientasi objek.
Pemrograman code arduino (sketch) untuk komunikasi serial menjadi mudah karena fungsi fungsi sudah tersedia dlm class yg tersedia untuk komunikasi Serial . Instance dari class untuk komunikasi serial (objek) sudah dibuatkan namanya Serial . Untuk arduino yg mempunyai lebih dari 1 port serial misal arduino mega256 nama objek untuk komunikasi serialnya adalah Serial1, Serial2, Serial3.
Penulisan objek dan fungsi pada library arduino adalah : namaobjek.namafungsi
Contoh : Serial.read() , artinya kita memanggil fungsi read() dari objek bernama Serial .
Data yg dikirim ke serial port akan dikirim ke buffer pengirim (Tx buffer) begitupun data yg diterima adalah data yg diambil dari buffer penerima (RX buffer).
Untuk merubah data ascii ke data numerik dengan cara yg cukup sederhana yaitu :
- untuk mendapatkan angka 0 dari ascii ‘0’ dgn cara ‘0’- 48=0 (atau bisa juga ditulis ‘0’-‘0’=0)
- untuk mendapatkan angka 1 dari ascii ‘1’ dgn cara ‘1’- 48=1 (atau bisa juga ditulis ‘1’-‘0’=1)
- dan seterusnya.
int hasil = (‘3’ – ‘0’) + (‘4’ – ‘0’) atau
int hasil = (‘3’- 48) + (‘4’-48)
maka hasil berupa bilangan integer 7.
Fungsi Dasar Komunikasi Serial Board Arduino
- if (Serial) : Untuk mengecek apakah Port sudah siap
- Serial.available() : Untuk mengecek apakah data sudah ada di buffer penerima
- Serial.begin() : untuk mengeset kecepatan transmisi data
- serial.end() : Untuk menon-aktifkan pin rx dan tx sbg fungsi serial dan kembali sbg pin I/O
- Serial.find() : mencari string dlm buffer data
- Serial.findUntil(): mencari buffer data sampai data dgn panjang/terminator nya yg diberikan ditemukan
- Serial.flush(): menunggu data terkirim semua
- Serial.parseFloat(): mengambil data float pertama dari data di buffer serial.
- serial.parseInt(): mengambil data integer pertama dari data di buffer serial.
- Serial.peek(): mengambil data berikutnya di bufer penerima
- Serial.print() : mengirim data ASCII
- Serial.println() : mengirimdata ASCII + CR,LF (kode enter)
- Serial.read(): membaca data yg diterima
- Serial.readBytes(): membaca data byte yg diterima
- Serial.readBytesUntil()
- Serial.setTimeout(): mengeset batas maksimum waktu tunggu(timeout) transmisi data.
- Serial.write() : mengirim data byte (numerik)
- Serial.serialEvent(): fungsi ini akan dipanggil jika data datang/diterima.berlaku spt interupsi serial.
Gambar 1. Menu Serial Monitor
Selain dengan tool serial monitor yg terdapat pada IDE arduino anda juga bisa menggunakan tool serial lainya seperti hyperterminal, putty dll untuk mengirim dan menerima data pada PC Anda.
Langkah membuat program sketch komunikasi serial
- Set baud rate misal 9600 dgn fungsi serial.begin(9600) dlm fungsi void setup(). Speed yg tersedia antara lain 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800,38400, 57600, 115200 (liat dokumentasi tiap jenis arduino).
- Untuk menerima data cek apakah ada data di Rx Buffer dgn fungsi serial.avalable()
jika data tersedia return value = true jika data kosong return value = false.
if( serial.available() > 0) // Mengambil data dari buffer penerima : serial.read(), return valuenya adalah 1 byte data pertama yg ada di RX Buffer . - Misal byte pertama RX buffer berisi char 2
maka :
char data = serial.read(); //data = ‘2’ –> karakterbyte data = serial.read(); // data = 50 –> numerik - Untuk mengirim data bisa menggunakan
serial.print(dataygdikirim) : mengirim data ascii
serial.println(dataygdikirim) , ditambahkan kode enter (CR dan LF)
serial.write(dataygdikirim) : mengirim data byte
Contoh
serial.print(‘A’) // akan mengirim huruf A
serial.print(65) // akan mengirim 2 byte berisi code Ascii ‘6’ dan ‘5’ (aktual yg dikirim 54 dan 53)
serial.write(65) // akan mengirim 1 byte 65 (aktual yg dikirim numerik 65)
serial.write(data) // adalah pengganti syntax Serial.print(data, BYTE) versi sebelumnya. Parameter data pada serial.write adalah angka 1 byte ( 0-255)
Beberapa Contoh yg akan kita buat antara lain:
- Mengirim data string/text “apa kabar”
- Mengirim data bilangan/angka : 123
- Menerima data bilangan ASCII misal data yg datang misal “435”
Cara Pertama
karakter ditampung di array dan dirubah menjadi string dgn menambahkan null 0 diakhir array( karena string adalah sebuah array type char yg diakhiri dgn null). kemudian array tsb /data string di konversi ke int dgn fungsi atoi.
Cara kedua
mengggunakan loop sbb :
Contoh Proses loop saat penerimaan data “435” , spt tabel dibawah , jika data berupa ‘/n maka loop selesai:
Kode sketch nya sbb:
Mengirim data berurutan ” A,123,B,456″
Menerima data berurutan : “123,456,789 /n”
Pada contoh ini kita akan menggunakan serial.parseint() untuk mengambil data berurutan yg dibatasi koma dan diakhiri ‘/n’
Menambahkan port serial pada pin I/O
Jika arduino yg kita miliki hanya punya 1 port serial kita bisa merubah pin I/O yg manapun menjadi Port serial tambahan .dengan bantuan class SoftwareSerial .
Tambahkan file header SoftwareSerial.h pada sketch anda dan buat 1 buah objek SoftwareSerial untuk penambahan 1 port, pada contoh dibawah ini kita buat 1 objek sofwareSerial dgn nama serialkedua.
Langsung saja kita lihat contohnya sbb:
Demikianlah tutorial Pengetahuan Dasar Komunikasi Serial Board Arduino
Semoga Bermanfaat :)
Terima kasih tutorialnya
ReplyDeletesalam kenal dari saya http://belajarlistrik.com/
Gan kalo copas sumbernya jangan lupa dong dicantumkan.
ReplyDelete