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.
PERALATAN:
1.
Komputer :
1 set
2.
Arduino Uno : 1 pcs
3.
Project board : 1 pcs
4.
Kabel jumper : secukupnya
5.
LCD :
1 pcs
6.
Potensiometer 10K : 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.
Prosedur:
1.
Tuliskan sintaks program di bawah ini,
kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
void setup()
{
Serial.begin(9600);
}
void loop() {
Serial.println("hello
world");
delay(2000);
}
2.
Buka Serial Monitor pada Arduino IDE.
3.
Pastikan konfigurasi baudrate adalah 9600 seperti pada gambar
dibawah ini.
4.
Pastikan data teks “Hello World” yang
dikirimkan Arduino diterima oleh Serial Monitor.
Tugas
dan Pertanyaan:
1.
Gantilah parameter input pada fungsi Serial print sesuai dengan tabel dibawah ini.
Amati data yang diterima pada Hterm,
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 !
3.
Tambahkan karakter \r\n pada akhir baris
teks pada Tabel. Amati data yang ditampilkan pada komputer. Jelaskan fungsi
karakter \r\n pada komunikasi serial !
4.
Jelaskan fungsi tiap baris dari sintaks
progra pada Percobaan 5.1 !
void setup()
{
Serial.begin(9600);
//mengatur konfigurasi baudrate yaitu 9600
}
void loop() {
Serial.println("hello world");// Mengirim data dalam bentuk text
“Hello World”
delay(2000); //
jeda waktu 2 sekon
}
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 dibawah ini,
kemudian lakukan kompilasi dan upload 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 Hterm pada komputer,
pastikan konfigurasi pada Hterm seperti gambar di bawah ini.
3.
Klik tombol Connect,
kemudian perhatikan data yang ditampilkan pada bagian Receive Data. Pastikan
data tersebut sama dengan data yang dikirimkan oleh Arduino.
Tugas dan Pertanyaan :
1.
Gantilah parameter input
untuk fungsi Serial.write dengan data pada Tabel 5.2 Amati data yang diterima
pada HTerm,
2.
Gantilah
konfigurasi dari HTerm menjadi seperti di bawah ini, perhatikan data yang
diterima. Kenapa data yang diterima berubah menjadi huruf ? Jelaskan!
3.
Jelaskan
perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !
4.
Jelaskan fungsi tiap baris dari sintaks program
pada Percobaan 5.2 !
void setup()
{
Serial.begin(115200);//mengatur konfigurasi baudrate yaitu 9600
}
void loop() {
Serial.write(0x41);//mengirim data dalam byte yaitu 41
Serial.write(0x42);//mengirim data dalam byte yaitu 42
Serial.write(0x43);//mengirim data dalam byte yaitu 43
Serial.write(0x44);//mengirim
data dalam byte yaitu 44
Serial.write(0x45);//mengirim data dalam byte yaitu 45
delay(2000);//
jeda selama 2 sekon
}
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
2. Tuliskan sintaks program berikut ini, kemudian lakukan
kompilasi 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
From Serial");
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
Ketikkan sembarang kata untuk dikirimkan
(kurang dari 16 karakter), kemudian tekan Send.
2. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.3
#include
<LiquidCrystal.h>
LiquidCrystal
lcd(2,3,4,5,6,7);// setting pin 2 hingga 7 output ke LCD
String
textFromSerial ="";
void setup()
{
lcd.begin(16,2);// setting ukuran LCD yaitu 16X2
lcd.clear();//reset
tampuilan LCD
lcd.setCursor(0,0);//setting
posisi teks LCD
lcd.print("Data
From Serial");//cetak teks pada LCD
Serial.begin(9600);// mengatur konfigurasi baudrate yaitu 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;
}
}
}
}
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 penerimaan data kan menggunakan interupsi serial. Data yang diterima
oleh Arduino akan ditampilkan pada LCD. Penerimaan 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 Pertanyaan :
1.
Buka Serial Monitor pada Arduino IDE, sesuaikan
konfigurasi Serial Monitor sesuai
dengan Gambar
Ketikkan sembarang teks untuk dikirimkan, tekan Send. Lengkapilah Tabel 5.4 !