1. Kompetensi
Mahasiswa mampu menjelaskan pemrograman input output digital mikrokontroler Arduino
menggunakan serial monitor
2. Sub Kompetensi
Dapat menerapkan pemrograman input output digital dengan pushbutton
Dapat menerapkan pemrograman input output digital dengan serial monitor
3. Dasar Teori
Serial Monitor
Serial monitor bisa kita gunakan untuk men-debug secara software. Jika tanpa serial monitor,
kita tidak bisa melakukan debug untuk aplikasi yang kita buat sehingga untuk menemukan
solusinya, kita harus men-debug dari sisi hardware. Misal ketika ada error, kita akan mencoba
dengan LED atau menambah/mengurangi rangkaian.
Tapi jika menggunakan serial monitor, kita akan tahu error-nya melalui data yang dikirimkan
oleh Arduino. Misal ketika nyala LED terlalu lama atau terlalu pelan, kita langsung bisa
mengecek nilai (angka) yang digunakan untuk delay dan semua isi variabel dalam program yang
kita buat. Sehingga kita bisa menelusuri logika dan algoritma program berdasarkan data-data
yang dikirimkan tadi.
Perhatikan pada board arduino, pin 0 dan 1 ada tulisan RX dan TX. Pin tersebut berfungsi
untuk menerima dan mengirim data melalui komunikasi serial dari Arduino ke komputer melalui
kabel USB. Untuk menggunakan komunikasi serial, kita tidak perlu menambahkan komponen
tambahan pada Arduino karena pada board tersebut sudah disediakan. Kita cukup
menghubungkan Arduino ke komputer, dan kita bisa langsung membuat program.
Pada baris ke-6, perintah Seril.begin(9600); berarti kita akan membuat koneksi serial dengan
baud rate 9600. Sederhananya, baud berkaitan dengan jumlah bit yang akan ditransfer setiap
detik. Nilai baud rate ini tergantung pada clock mikrokontroller. Arduino Uno sendiri
menggunakan clock 16 MHz. Jika clock-nya makin rendah, maka baud rate harus kita kurangi.
Sebagai contoh, jika kita menggunakan mikrokontroller dengan clock 1 MHz, maka baud rate
yang cocok adalah 4800. Jika clock 1 MHz kita menggunakan baud rate 9600, maka data yang
FAKULTAS TEKNIK UNIVERSITAS NEGERI MAKASSAR
PROGRAM STUDI PENDIDIKAN VOKASI MEKATRONIKA
Praktik Mikrokontroler
Semester 3 Input Output Digital Serial Monitor 3 SKS
Nama : Hasriana Aris Nim : 1826042010
dikirim ke komputer tidak akan terbaca. Pada Arduino IDE, nilai baud rate default pada Serial
Monitor adalah 9600.
Pada baris ke 12 dan 13, kita menemukan perintha print yang berbeda, yaitu print() dan
println(). Jika kita menggunakan print, maka kita sekedar mengirim data tanpa diikuti end of line
(perintah untuk ganti baris , atau ENTER). Jika kita menggunakan println(), maka tulisan akan
diikuti perintah untuk pindah baris.
Buka Serial Monitor dengan cara mengklik icon Serial Monitor (lihat Gambar 1). Jika/ Anda
menggunakan versi Arduino IDE selain versi 1.63, mungkin letaknya berbeda. Sebelum muncul
pesan “Done Uploading”, maka Serial Monitor belum bisa dibuka. Setelah Serial Monitor
dibuka, maka setidaknya Anda akan melihat pesan seperti pada Gambar 2.
Explorasi pushbutton
Pada labsheet 3 kita sudah mempelajari tentang penggunaan pushbutton sebagai input digital.
Pada labsheet ke-4 ini akan lebih coba dieksplor contoh program menggunakan pushbutton yang
sering dijumpai dalam membuat aplikasi yang cukup kompleks antara lain:
1. Cara menggunakan internal Pullup Resistor
2. Membuat tombol multikondisi
3. Membuat aksi ketika tombol ditekan lama
pinMode(PIN_TOMBOL,INPUT);
}
void loop() {
// baca data tombol
data = digitalRead(PIN_TOMBOL);
// jika data berbeda dari data sebelumnya
// cetak ke serial monitor
if(data != data_last){
Serial.println( data );
// simpan data sebagai data sebelumnya
data_last = data;
}
}
3. Upload program ke Arduino dan klik serial monitor.
4. Tekan pushbutton dan amati tampilan serial monitor, ketika pushbutton tidak ditekan amati
apakah ada output tampilan pada serial monitor.
Jawab : ketika tombol tidak ditekan maka data berubah dari 1 ke 0 dan 0 ke 1 secara terus
menerus, ktika tombol di tekan maka data yang tampil di serial monitor bertahan di 0.
5. Edit perintah pinMode(PIN_TOMBOL,INPUT); dengan perintah
pinMode(PIN_TOMBOL,INPUT_PULLUP);
/*
* MONSTER ARDUINO V2
* Program Tombol tanpa Pullup Resistor
* www.ElangSakti.com
*/
// tombol pada pin 2
const byte PIN_TOMBOL = 2;
// variabel penyimpan data dari tombol
// dan data sebelumnya
boolean data = HIGH;
boolean data_last = data;
void setup() {
if(data != data_last){
Serial.println( data );
// simpan data sebagai data sebelumnya
data_last = data;
delay(500);
}
}
Analisa = ketika tombol di tekan maka data akan muncul dari 0 ke 1 dan 1 ke 0 secara terus menerus,
ketika tombol ditekan lama maka yang tampil di serial monitor adalah 0 dan jika di lepas maka yang
muncul adalah angka 1
Tombol multikondisi
1. Buat rangkaian Arduino dan sebuah pushbutton seperti gambar berikut :
Serial.println("ON");
} else {
Serial.println("OFF");
}
}
// simpan data sebagai data sebelumnya
data_last = data;
// catat waktu penekanan tombol terakhir
delay_press_last = millis();
}
}
}
3. Upload program ke Arduino dan klik serial monitor.
4. Tekan pushbutton dan amati tampilan serial monitor, ketika pushbutton tidak ditekan amati
apakah ada output tampilan pada serial monitor.
Jawab = ketika ditekan pertama kali maka data yang muncul adalah ON jika ditekan kedua kali
maka data yang muncul adalah OFF.
FAKULTAS TEKNIK UNIVERSITAS NEGERI MAKASSAR
PROGRAM STUDI PENDIDIKAN VOKASI MEKATRONIKA
Praktik Mikrokontroler
Semester 3 Input Output Digital Serial Monitor 3 SKS
Nama : Hasriana Aris Nim : 1826042010
Jawab = ketika di tekan pertama kali maka data yang muncul adalah menu utama, di tekan
kedua kali yang muncul adalah menu 1 setting, dotekan ketiga kali maka yang muncul
menu 2 input data, dan ketika di tekan ke empat kali maka yang muncul menu 3 exit.
#define MENU_3 3
// tombol pada pin 2
const byte PIN_TOMBOL = 2;
// data awal ada OFF
// dan data sebelumnya juga OFF
boolean data = OFF;
boolean data_last = data;
// variabel untuk lock status
boolean logika = data;
// pemetaan delay terhadap aksi menu
// delay 0 - 3000 => muncul menu_0
// delay 3000 - 5000 => muncul menu_1
// delay 5000 - 10000=> muncul menu_2
// delay > 10000 => muncul menu_3
const unsigned int TOMBOL_DELAY[] = {0, 3000, 5000, 10000}; // dalam
ms
// jadikan menu sebagai array supaya lebih mudah
const byte MENU[] = {MENU_0,MENU_1,MENU_2,MENU_3};
// siapkan teks nama-nama menu
const String TEKS_MENU[] = {
"Menu Utama",
"Menu 1 Setting",
"Menu 2 Input Data",
"Menu 3 Exit"
};
// cata menu yang aktif saat ini
// saat start, menu yg aktif adalah menu_3
byte MENU_COUNTER = MENU_3;
// delay untuk penekanan tombol.
// setelah tombol ditekan, maka selama 150 ms
// tidak bisa ditekan.
// delay ini berguna untuk menghindari 2 kali eksekusi
unsigned long delay_press = 150; // dalam ms
unsigned long delay_press_last = 0;
// variabel untuk mencatat awal tombol ditekan
unsigned long start_press = 0;
void setup() {
// buka koneksi ke serial
Serial.begin(19200);
while(!Serial);
// tombol sebagai input dengan pullup resistor
pinMode(PIN_TOMBOL,INPUT_PULLUP);
}
void loop() {
// baca logika tombol
FAKULTAS TEKNIK UNIVERSITAS NEGERI MAKASSAR
PROGRAM STUDI PENDIDIKAN VOKASI MEKATRONIKA
Praktik Mikrokontroler
Semester 3 Input Output Digital Serial Monitor 3 SKS
Nama : Hasriana Aris Nim : 1826042010
TombolListener();
}
// fungsi TombolListener
void TombolListener(){
// jika selisih waktu penekanan tombol
// lebih besar dari waktu delay tombol
// baca tombol lagi, jika tidak tombol tdk dibaca
if( millis() - delay_press_last > delay_press ){
// baca data tombol
data = digitalRead(PIN_TOMBOL);
// jika data berbeda dari data sebelumnya
// cetak ke serial monitor
if(data != data_last){
// ketika OFF / onKeyUp
if(data == OFF){
// catat selisih antara
// awal tombol ditekan hingga dilepas
unsigned long selisih = millis() - start_press;
if( selisih >= TOMBOL_DELAY[MENU_3] ){
// jika lama ditekan >= 10 detik
MENU_COUNTER = MENU_3;
} else if( selisih >= TOMBOL_DELAY[MENU_2] ){
// jika lama ditekan >= 5 detik
MENU_COUNTER = MENU_2;
} else if( selisih >= TOMBOL_DELAY[MENU_1] ){
// jika lama ditekan >= 3 detik
MENU_COUNTER = MENU_1;
} else {
// jika antara 0 - 3 detik
MENU_COUNTER = MENU_0;
}
// eksekusi aksi tombol sesuai logika
AksiTombol(MENU_COUNTER);
} else {
// reset waktu yang tercatat
start_press = millis();
}
// simpan data sebagai data sebelumnya
data_last = data;
// catat waktu penekanan tombol terakhir
delay_press_last = millis();
}
}
}
// Fungsi AksiTombol
FAKULTAS TEKNIK UNIVERSITAS NEGERI MAKASSAR
PROGRAM STUDI PENDIDIKAN VOKASI MEKATRONIKA
Praktik Mikrokontroler
Semester 3 Input Output Digital Serial Monitor 3 SKS
Nama : Hasriana Aris Nim : 1826042010
Tugas :
Modifikasi program aksi tombol ditekan lama, jika tombol ditekan sebentar nyala 1 led berkedip
dan jika tombol yang sama ditekan lama maka nyala 2 led berkedip.
int hitung;
int kondisi;
void setup() {
// put your setup code here, to run once:
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(kondisi==0){
digitalWrite(12,0);
digitalWrite(13,0);
}
else if(kondisi==1){
digitalWrite(12,(millis()/500)%2);
digitalWrite(13,0);
}
else if (kondisi==2){
digitalWrite(12,(millis()/500)%2);
digitalWrite(13,(millis()/500)%2);
}
if (digitalRead(2)==0)
{hitung++;delay(200);}
if(hitung==1)kondisi=1;
if(hitung>=10)kondisi=2;
if(digitalRead(2)==1){hitung=0;}
}
FAKULTAS TEKNIK UNIVERSITAS NEGERI MAKASSAR
PROGRAM STUDI PENDIDIKAN VOKASI MEKATRONIKA
Praktik Mikrokontroler
Semester 3 Input Output Digital Serial Monitor 3 SKS
Nama : Hasriana Aris Nim : 1826042010
6. KESIMPULAN
Serial Monitor
Serial monitor bisa kita gunakan untuk men-debug secara software. Jika tanpa serial monitor,
kita tidak bisa melakukan debug untuk aplikasi yang kita buat sehingga untuk menemukan
solusinya, kita harus men-debug dari sisi hardware. Misal ketika ada error, kita akan mencoba
dengan LED atau menambah/mengurangi rangkaian.
Tapi jika menggunakan serial monitor, kita akan tahu error-nya melalui data yang dikirimkan
oleh Arduino. Misal ketika nyala LED terlalu lama atau terlalu pelan, kita langsung bisa
mengecek nilai (angka) yang digunakan untuk delay dan semua isi variabel dalam program yang
kita buat. Sehingga kita bisa menelusuri logika dan algoritma program berdasarkan data-data
yang dikirimkan tadi.