TUJUAN :
1.
Memahamicaramengirimkandanmenerima
data melaluiperiperal UART Arduino.
2.
Mampumembuat
program untukmengirimkan data berbasisteksdanberbasisbyte.
3.
Mampumembuat program untukmenerima data
secarapooling d ansecarainterupsi
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 10K
|
: 1 pcs
|
PERCOBAAN :
5.1 Mengirim
Data Teks
Padapercobaan kali iniakandibuat program
untukmengirimkan data tekskekomputermelaluikomunikasi serial.
Padapercobaaninicontohteks yang akandikirimkanadalah "Hello World". Pengiriman data akanmenggunakanbaudrate 9600.
Prosedur :
1. Tuliskansintaks program dibawahini,
kemudianlakukankompilasidanuploadprogram
kesistem minimum Arduino,
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Hello World"); delay(2000);
}
2. Buka Serial Monitor padaArduino IDE.
3. Pastikankonfigurasibaudrateadalah 9600
sepertiGambar 5.2.
4.
Pastikan data teks "Hello
Word" yang dikirimkanArduinoditerimaoleh Serial Monitor.
TugasdanPertanyaan :
1.
Gantiah parameter inputpadafungsiSerial.printsesuaidenganTabel 5.1. Amati data
yang diterimapadaHTerm, kemudianisilahTabel 5.1 di bawahini !
Tabel 5.1 Daftarteks yang
dikirimkanpada program
Teks yang DikirimkanArduinoTeks
yang DiterimaKomputer
Halo Halo
ApaKabarSemua Apa KabarSemua
Kabar Kabar
Semua Semua
Yang Yang
2.
GantilahfungsiSerial.printmenjadiSerial.println,
kemudiantuliskanamati data yang diterimaolehkomputer.
JelaskanperbedaanpenggunaanfungsiSerial.printdanSerial.println !
serial print akanmenampilkan text dalamsatubaris,
sedangakan serial printlnakanmengenterkansetelah kata di cetak
3. Tambahkankaraker \r\n
padaakhirbaristekspadaTabel5.1 . Amati data yang ditampilkanpadakomputer.
Jelaskanfungsikarakter \r\n padakomunikasiserial !
Karakter er\r\nsama
saja dengan fungsi dari Serial.println
- Jelaskanfungsitiapbarisdarisintaks
program padaPercobaan 5.1
void
setup() {
Serial.begin(9600);
// mensetkonfigurasibaudratepada 9600
}
void
loop() {
Serial.print("HelloWorld");
// untukmenampilkankalimat Hello World
pada serial monitor
delay(2000); // untukmenjeda selama 2 detik
2.
}
5.2 Mengirim Data Byte
Padapercobaan kali iniakandibuat program
untukmengirimkan databytekekomputermelaluikomunikasi
serial. Pengiriman data akanmenggunakanbaudrate115200.
Prosedur :
1.
Tuliskansintaks program dibawahini,
kemudianlakukankompilasidanuploadprogram
kesistem 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.
BukaaplikasiHTermpadakomputer, pastikankonfigurasipadaHTermsepertigambar
di bawahini.
3.
Kliktombol Connect, kemudianperhatikan
data yang ditampilkanpadabagian Receive Data. Pastikan data tersebutsamadengan
data yang dikirimkanolehArduino.
TugasdanPertanyaan :
1. Gantilah
parameter inputuntukfungsiSerial.writedengan da ta padaTabel 5.2. Amati
data yang diterimapadaHTerm, kemudianisilahTabel 5.2 !
Tabel 5.2 Daftar data byte
yang dikirimkanpadaprogr am
Data yang DikirimkanArduino Data yang DiterimaKomputer
0x00,0x01,0x02,0x03,0x04 01 02 03 04
0xF0,0x1F,0 x2F,0xF3,0xF4 F0 1F
2F F3
F4
0xF5,0xFF,0x3F,0xF3,0x44 F5
FF 3F F3 44
0xF0,0x1F, 0 x02,0x03,0x04 F0 1F
02 03 04
0x00,0x01, 0xF0,0x1F,0x2F 00
01 F0 1F 2F
2.
GantilahkonfigurasidariHTermmenjadiseperti
di bawahini, perhatikan data yang diterima. Kenapa data yang
diterimaberubahmenjadihuruf ?Jelaskan !
ASCIImerupakan kode standart yang di gunakanuntukmerubahbiner menjadi huruf.
3.
JelaskanperbedaanpenggunaanfungsiSerial.printdanfungsiSerial.write
!
Serial.write menampilkan data sesuai dengan bilangan hex
sedangkan Serial.print menampilkan data dengan mengganti huruf F menjadi 3
4.
Jelaskanfungsitiapbarisdarisintaks
program padaPercobaan5.2 !
void
setup() {
Serial.begin(115200); // banyaknya
data bit yang di kirim
}
void
loop() {
Serial.write(0x41); // menampilkan 41
Serial.write(0x42); // menampilkan42
Serial.write(0x44); // menampilkan 43
Serial.write(0x45);// menampilkan 44
delay(2000);// jeda selama 2 detik
}
5.3
Menerima
Data dari UARTdenganSistemPooling
Padapercobaan
kali iniakandibuat program untukmenerima data texkdarikomputermelaluikomunikasi
serial. Proses penerimaan data akanmenggunakan.
sistempooling(menunggu). Data yang
diterimaolehArduinoakanditampilkanpada LCD. Penerimaan data akanmenggunakanbaudrate 9600.
Prosedur :
1.
BuatlahrangkaiansepertiGambar
5.5.
2.
Tuliskansintaks program berikutini,
kemudianlakukankompilasidanuploadprogram,
#includeLiquidCrystallcd=(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;
}}}}
TugasdanPertanyaan :
1. Buka Serial
Monitor padaArduinopastikankonfigurasi Serial Monitor samasepertipadaGamba r
5.6.
Ketikkansembarang
kata untukdikirimkan (kurangdari 16 k arakter), kemudiantekan Send.Isilah T
abel5.3 !
Tabel5.3 Daftar data yang dikirimdanditampilkanpada
LCD
Teks yang dikirim
|
Teks Pada LCD
|
Apa
|
Apa
|
Kabar
|
Kabar
|
Anda
|
Anda
|
Saat
|
Saat
|
Ini
|
Ini
|
1.
Jelaskanfungsitiapbarisdarisintaks
program padaPercobaan5.3 !
#include // menambahkan library lcd
LiquidCrystallcd=(2,3,4,5,6,7);
// menyatakankonfigurasi LCD
String
textFromSerial = ""; // untukmenginisialkantextFromSerial sebagai string
void
setup() {
lcd.begin(16,2); // mensetbanyaknyabarisdancolompada
LCD
lcd.clear(); // menbersihkan data padaLCD
lcd.setCursor(0,0); // untukmemulai pada
baris 0 kolom 0
lcd.print("Data From Serial") //untukmenampilkan tulisanpada Data From Serial
Serial.begin(9600); //mensetkonfigurasibaudratepada
9600
2.
}
void loop() {
while(Serial.available()>0){ // untukmengecek dariserial komunikasi
char
data =Serial.read(); // untukmembacapada data serial
if(data
== '\n') { // jika ada datanya
lcd.setCursor(0,1); // akanmenampilkan text padabaris kedua pada LCD
lcd.print(textFromSerial); //akanmenampilkan text yang dikirimdariserialkomunikasi
textFromSerial=""; //data serial dimulaidari 0
3.
}
else{
if(data!='\r'){ // jika tidak ada data
textFromSerial
+= data; //untukmenjumlahkan dataserial dengan data//
}}}}
4.
5.4 Menerima Data
dari UART denganInterupsi
Pada
|
percobaan
|
kali
|
iniakandibuat
program untukmeneri ma data
|
teks
|
sama
|
seperti
|
Percobaan
|
5. 3.
|
Padapercobaan kali
ini proses penerimaan
|
data
|
kan
|
menggunakaninterupsi serial. Data yang
diterimaolehArduinoakanditampilkanpada LCD. Penerimaan data akanmenggunakanbaudrate
115200.
Prosedur :
#include
#define FOSC 16000000
LiquidCrystallcd(2,
3, 4, 5, 6, 7); String dataSerial;
voidinitSerial(intbaudrate) { intubrr =
FOSC/16/baudrate-1;
// UntukMengisi
register UBRR0H dan UBRR0L untukmenentukanbaudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
//
UntukMengaktifkansaluranpada transmitter
dan receiver
UCSR0B
|= (1<
UCSR0C |=
(0<
// Menggunakan
1 stop bit UCSR0C |= (0<
//
No Parity
UCSR0C |=
(0<
}
//
Rutin yang akandijalankanjikaterjadiinterupsiISR(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();
}
TugasdanPertanyaan :
1.
Buka Serial Monitor padaArduino IDE,
sesuaikankonfigurasi Serial Monitor sesuaidenganGambar 5.7.
Ketikkansembarangteksuntukdikirimkan, tekan Send. LengkapilahTabel5.4
!
Tabel5.4 Daftar data yangdikirimdanditampilkanpada LCD
Teks yang dikirim
|
Teks Pada LCD
|
Apa
|
Apa
|
Kabar
|
Kabar
|
Anda
|
Anda
|
Saat
|
Saat
|
Ini
|
Ini
|
Jelaskanfungsitiapbarisdarisintaks program padaPercobaan5.4
!
#include
#define FOSC 16000000
LiquidCrystallcd(2, 3, 4, 5,6,7); String dataSerial;
voidinitSerial(intbaudrate) { intubrr = FOSC/16/baudrate-1;
register UBRR0H dan
UBRR0L untukmenentukanbaudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
Untukmengaktifkansaluran transmitter dan receiver
UCSR0B |= (1<
UCSR0C |=
(0<
Menggunakan 1 stop bit UCSR0C |= (0<
No Parity
UCSR0C |= (0<
}
// akan di jalankanjikaterjadiinterupsiISR(USART_RX_vect){
char data = UDR0;
if(data=='\n') //jika data samadengan di tekan enter
makaakanmelakukan program di bawahini//
lcd.clear(); //menghapus
data pada LCD
lcd.setCursor(0,0); // memulai dari baris 0
kolom 0
lcd.print("Incoming Data"); //mencetak
kata incoming data
lcd.setCursor(0,1); //untukmengeset data pada baris 0 colom 1
lcd.print(dataSerial);
//untuk di tampilkan data serial
dataSerial =""; //data dimulai dari kosong atau 0
}
Else // jikatidak di enter maka
{
if(data!='\r') {//
jika data tidak di enter maka data serial akan di jumlahan dengan data
dataSerial += data; // menjumlahkan dataserial dengan data
}
}
}
Jelaskanperbedaanpenggunaaninterupsidansistempooling !
Interupsiakanmengeluarkan
program dari program utamasaatterjadisuatukondisitertentu.Sistem pooling
adalahkondisipadaarduinountukmenunggupengirimanpada data danmelalui serial.
Tidak ada komentar:
Posting Komentar