PRAKTIKUM
5
KOMUNIKASI
SERIAL
TUJUAN :
1. Memahami cara mengirimkan dan menerima data
melalui periperal UART arduino
2. Mampu membuat program untuk mengirimkan data
berbasis teks dan berbasis byte
3. Mampu membuat program untuk menerima data secara pooling
dan secara interupsi serial
Peralatan :
1. Komputer : 1 set
2. Arduino Uno : 1 pcs
3. Project Board : 1 pcs
4. Kabel Jumper : 1 set
5. LCD : 1 pcs
6. Potensiometer : 1 pcs
PERCOBAAN :
5.1 Mengirim Data Teks
Pada percobaan kali ini akan dibuat
program untuk mengirimkan data teks ke komputer melalui komunikasi serial. Pada
percobaan ini contoh teks yang akan dikirimkan adalah "Hello World".
Pengiriman data akan menggunakan baudrate 9600.
Void setup () {
Serial.begin (9600);
}
void loop () {
Serial.print ("Hello World");
delay (2000);
}
3. Pastikan konfigurasi baudrate adalah 9600 seperti gambar 5.2
4. Pastikan data
teks "Hello Word" yang dikirimkan Arduino diterima oleh Serial
Monitor
Tugas dan
Pertanyaan :
1. Gantiah parameter input
pada fungsi Serial.print sesuai dengan Tabel 5.1. Amati data yang diterima pada
HTerm, kemudian isilah Tabel 5.1 di bawah ini !
2. Gantilah
fungsi Serial.print menjadi Serial.println, kemudian tuliskan amati data
yang diterima oleh komputer. Jelaskan
perbedaan penggunaan fungsi Serial.print dan serial.println
Jawab
: Untuk Serial.print
berfungsi untuk untuk menampilkan data berbasis teks dengan satu baris
menyambung secara terus-menerus sehingga teksnya memanjang pada satu baris.
Sedangkan Serial.println berfungsi
untuk menampilkan teks pada baris baru secara terus-menerus.
3. Tambahkan karakter
\r\n pada akhir baris teks pada Tabel 5.1. Amati data yang ditampilkan pada
komputer. jelaskan fungsi karakter \r\n pada komunikasi serial !
Jawab : Karakter
\r\n dengan Serial.println fungsinya sama yaitu menampilkan teks pada baris baru tapi teks
pada baris baru tersebut line spacingnya double.
4. Jelaskan
fungsi tiap baris dari sintaks program pada Percobaaan 5.1 !
void setup() {
// Berfungsi sebagai salah satu fungsi yang hanya
di panggil sekali dan satu kali eksekusi ketika awal program berjalan //
Serial.begin(9600);
// untuk menginisialisasikan bahwa serial yang di monitor
menggunakan komunikasi serial dengan kecepatan 9600 bit per second//
}
void loop() {
// Untuk
menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board
Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang //
Serial.print("Hello
World");
// Untuk menampilkan teks Hello World di serial monitor//
delay(2000);
// Untuk mendelay program yang akan di jalankan selama 2000 mS //
}
5.2
Mengirim Data Byte
Pada percobaan kali ini akan dibuat
program untuk mengirimkan data byte ke komputer melalui komunikasi serial.
Pengiriman data akan menggunakan baudrate 115200.
Prosedur
:
1.
Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upoload
program ke sistem minimum Arduino.
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.write(0x41);
Serial.write(0x42); Serial.write(0x43); Serial.write(0x44); Serial.write(0x45);
delay(2000);
}
2. Buka
aplikasi HTe rm pada komputer, pastikan konfigurasi pada HTerm seperti gambar
di bawah ini.
3. Klik tombol Connect, kemudian perhatikan data yang ditam pilkan pada bagian Receive Data. Pastikan data tersebut sama dengan data yang dikirimkan oleh Arduino.
Tugas dan Pertanyaa n :
1. Gantilah
parameter input untuk fungsi Serial.write dengan da ta pada Tabel 5.2.
Amati data yang diterima pada HTerm, kemudian isilah Tabel 5. 2 !
2. Gantilah
konfigurasi dari HTerm menjadi seperti di bawah ini, perhatikan data yang
diterima. Kenapa data yang diterima berubah menjadi huruf ? Jelaskan !
Jawab : Kode
ASCII digunakan untuk merubah data hex atau biner menjadi huruf
3. Jelaskan
perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !
Jawab : Serial.write untuk
menampilkan data bilangan hexadesimal, sedangkan Serial.print untuk menampilkan
data huruf menjadi angka.
4.
Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 !
void setup() {
// Berfungsi sebagai salah satu fungsi yang hanya
di panggil sekali dan satu kali eksekusi ketika awal program berjalan //
Serial.begin(115200);
// untuk menginisialisasikan bahwa serial yang di monitor
menggunakan komunikasi serial baudrate 115200 //
}
void loop() {
// Untuk
menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board
Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang //
Serial.write(0x41);
/ / menampilkan angka 41 //
Serial.write(0x42);
/ / menampilkan angka 42 //
Serial.write(0x43);
/ / menampilkan angka 43 //
Serial.write(0x44);
/ / menampilkan angka 44 //
Serial.write(0x45);
/ / menampilkan angka 45 //
delay(2000);
// Untuk mendelay program yang akan di jalankan selama 2000 mS //
}
5.3 Menerima Data
dari UART dengan Sistem Pooling
|
||
Pada
percobaan kali ini
akan dibuat program
untuk
|
menerima
|
data teks
dari
|
komputer melalui
komunikasi serial. Proses
penerimaan
|
data akan
|
menggunakan
|
sistem pooling
(menunggu). Data yang diterima oleh Arduino akan ditampilkan pada LCD.
Penerimaan data akan menggunakan baudrate 9600.
1. Buatlah rangkaian seperti Gambar 5.5
2. Tuliskan sintaks program berikut ini, kemudian lakukan ko mpilasi dan upload program,
#include<LiquidCrystal.h> LiquidCrystal
lcd=(2,3,4,5,6,7); String textFromSerial = "";
void setup() {
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Data
FromSerial") Serial.begin(9600);
}
void loop() { while(Serial.available()>0)
{
char data = Serial.read(); if(data == '\n') {
lcd.setCursor(0,1);
lcd.print(textFromSerial); textFromSerial="";
}
else{ if(data!='\r')
{
textFromSerial += data;
}
}
}
}
Tugas dan Pertanyaan :
1. Buka
Serial Monitor pada Arduino pastikan konfigurasi Serial Monitor sama seperti
pada Gambar 5.6
Gambar
5.6 Konfigurasi Serial Monitor
Ketikkan
sembarang kata untuk dikirimkan (kurang dari 16 k arakter), kemudian tekan
Send. Isilah T abel 5.3 !
2. Jelaskan
fungsi tiap baris dari sintaks program pada Percobaan 5.3 !
#include<LiquidCrystal.h>
// Untuk membaca dan
mengenalkan liquidCrystal di library yang akan di programkan //
LiquidCrystal lcd=(2,3,4,5,6,7);
// Untuk menginisialisasikan dan mensetting pada
pin 2,3,4,5,6,7 di LCD //

String textFromSerial = "";
//
Mengenalkan textFromSerial pada karakter string//
void setup() {
// Berfungsi sebagai salah
satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal
program berjalan //
lcd.begin(16,2);
// untuk menginisialisasikan bahwa LCD yang digunakan jumlah
barisnya 16 dan kolomnya ada 2 //
lcd.clear();
//
menghapus tampilan yang ada di LCD //
lcd.setCursor(0,0);
//meletakkan
cursor di posisi (baris 0, kolom 0) yang di inginkan //
lcd.print("Data
From Serial")
// Untuk
menampilkan kata Data From Serial //
Serial.begin(9600);
// Untuk mengirim data dengan kecepatan 9600 per second //
}
void loop() {
// Untuk
menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board
Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang //
while(Serial.available()>0) {
// memilih serial komunikasi //
char data = Serial.read();
// membaca data serial dengan variabel char //
if(data
== '\n') {
// jika data //
lcd.setCursor(0,1);
//meletakkan
cursor di posisi (baris 0, kolom 1) yang di inginkan //
lcd.print(textFromSerial);
// Untuk menampilkan textFromSerial yang dikirim dari serial
komunikasi //
textFromSerial="";
// Data serial textFromserial dimulai dari teks kosong //
}
else{ if(data!='\r')
{
// Jika tidak ada data //
textFromSerial += data;
// textFromSerial di
jumlahkan dengan data //
}
}
}
}
5.4
Menerima Data dari UART
dengan Interupsi
Pada percobaan kali ini akan dibuat program untuk menerima data teks sama seperti Percobaan 5.3. Pada percobaan kali ini proses penerima data akan menggunakan interupsi serial. Data yang diterima oleh Arduino akan ditampilkan pada LCD. Penerima data akan menggunakan baudrate 115200.
Prosedur :
1. Tuliskan sintaks program di bawah ini,
lakukan kompilasi dan upload program.
#include
<LiquidCrystal.h> #define FOSC 16000000
LiquidCrystal
lcd(2, 3, 4, 5, 6, 7); String dataSerial;
void initSerial(int baudrate) { int ubrr
= FOSC/16/baudrate-1;
// Mengisi
register UBRR0H dan UBRR0L untuk menentukan baudrate UBRR0H
|=
ubrr>>8;
UBRR0L |= ubrr;
//
Mengaktifkan saluran transmitter dan receiver
UCSR0B
|=
(1<<RXEN0)|(1<<TXEN0); // Menggunakan format data 8 bit
UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
// Menggunakan
1 stop bit UCSR0C |= (0<<USBS0);
//
No Parity
UCSR0C |= (0<<UPM01)|(0<<UPM00); // Mengaktifkan RX
interrupt UCSR0B |= (1<<RXCIE0);
}
//
Rutin yang akan dijalankan jika terjadi interupsi ISR(USART_RX_vect){
char data
= UDR0; if(data=='\n') { lcd.clear();
lcd.setCursor(0,0);
lcd.print("Incoming Data");
lcd.setCursor(0,1); lcd.print(dataSerial); dataSerial = "";
}
else{ if(data!='\r') {
dataSerial += data;
}
}
}
void setup() {
initSerial(9600);
lcd.begin(16,2);
lcd.clear();
sei();
}
void loop() {
}
Tugas
dan Pertanyaa n :
1.
Buka Serial Monitor
pada Arduino IDE, sesuaikan konfigurasi Serial Monitor sesuai dengan Gambar
5.7.
Ketikkan
sembarang teks untuk dikirimkan, tekan Send. Lengka pilah Tabel 5.4 !
2. Jelaskan
fungsi tiap baris dari sintaks program pada Percobaan 5.4 !
#include
<LiquidCrystal.h> #define FOSC 16000000
LiquidCrystal
lcd(2, 3, 4, 5, 6, 7); String dataSerial;
void initSerial(int baudrate) { int ubrr = FOSC/16/baudrate-1;
// Mengisi register UBRR0H
dan UBRR0L untuk menentukan baudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
// Mengaktifkan saluran
transmitter dan receiver
UCSR0B
|=
(1<<RXEN0)|(1<<TXEN0);
//
Menggunakan format data 8 bit
UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
// Menggunakan 1 stop bit UCSR0C
|=
(0<<USBS0);
// No Parity
UCSR0C |= (0<<UPM01)|(0<<UPM00);
// Mengaktifkan RX
interrupt UCSR0B
|= (1<<RXCIE0);
}
//
Rutin yang akan dijalankan jika terjadi interupsi ISR(USART_RX_vect){
char data = UDR0;
if(data=='\n') {
//
Jika data yang dikeluarkan sama dengan enter (\n) maka program akan berjalan //
lcd.clear();
// menghapus tampilan yang ada di LCD //
lcd.setCursor(0,0);
//meletakkan cursor di posisi (baris 0, kolom 0) yang di inginkan //
lcd.print("Incoming Data");
// Untuk menampilkan kata seperti Incoming data //
lcd.setCursor(0,1);
//meletakkan cursor di posisi (baris 0, kolom 1) yang di inginkan //
lcd.print(dataSerial);
// Untuk menampilkan data serial di baris 0 kolom 1 //
dataSerial = "";
// Data yang akan di tampilkan dimulai
dari kosong //
}
else{
if(data!='\r') {
// jika data tidak di tekan enter maka program akan melakukan
eksekusi di bawah ini //
dataSerial += data;
// Data serial
akan dijumlahkan dengan data//
}
}
}
void
setup() {
// Berfungsi sebagai salah satu fungsi yang
hanya di panggil sekali dan satu kali eksekusi ketika awal program
berjalan //
initSerial(9600);
//
untuk menginisialisasikan iniSerial komunikasi pada baudrate dengan kecepatan
9600 per second //
lcd.begin(16,2);
//
untuk menginisialisasikan bahwa LCD yang digunakan jumlah barisnya 16 dan
kolomnya ada 2 //
lcd.clear();
//
menghapus tampilan yang ada di LCD //
sei();
}
void
loop() {
}
3. Jelaskan perbedaan penggunaan interupsi dan sistem pooling !
Jawab : Untuk
interupsi data diterima dari arduino dan program utama tersebut meninggalkan dari arduino untuk
menjalakan program dan akan kembali lagi ke program tersebut sedangkan sistem pooling untuk menunggu pengiriman data
melalui serial komunikasi
Tidak ada komentar:
Posting Komentar