Hallo, selamat datang. Pada artikel ini kita akan belajar tentang fungsi yang sering sekali digunakan saat memprogram arduino khususnya saat kita menggunakan input dan output yang terhubung dengan pin-pin arduino, fungsi itu adalah pinMode(), digitalWrite() dan digitalRead(), mari kita bahas :
pinMode()
pinMode() berfungsi untuk mengatur mode pin pada Arduino, apakah pin tersebut diatur sebagai input atau output. Setiap pin GPIO Arduino bisa diatur menjadi input (pin menerima data dari luar untuk diproses di arduino) atau output (pin mengirim data keluar untuk diproses di hardware lain). berikut syntax nya:
pinMode (pin,mode);
Parameter :
- pin : Nomor pin arduino yang diatur modenya
- mode : ada 3 pilihan mode yaitu OUTPUT, INPUT dan INPUT_PULLUP
Fungsi pinMode() biasa nya ditempatkan didalam fungsi void setup(), karena pengaturan mode pin cukup dilakukan sekali saja, ada tiga mode yang bisa kita gunakan, yaitu : OUTPUT, INPUT dan INPUT_PULLUP. Ayo kita bahas satu per satu:
Mode pin OUTPUT
Setelah pin di atur sebagai OUTPUT, kita bisa menggunakan berbagai fungsi untuk mengeluarkan output dari arduino menggunakan fungsi digitalWrite(), analogWrite(), shiftOut() dll.
Mode pin INPUT
Mode pin INPUT_PULLUP
digitalWrite()
Fungsi digitalWrite() digunakan untuk memberikan kondisi atau logika pada pin arduino, ada 2 kondisi yaitu HIGH dan LOW, kondisi HIGH artinya pin arduino mengeluarkan tegangan sebesar 5 volt (besar tegangan tergantung jenis board arduino), sedangkan kondisi LOW artinya pin arduino mengeluarkan tegangan 0 volt. fungsi ini khusus untuk menghasilkan output dari arduino agar bisa digunakan untuk sumber tegangan atau trigger rangkaian lain. penggunaan fungsi digitalWrite() harus diinisiasi/diawali oleh fungsi pinMode(pin,OUTPUT);.
berikut syntax digitalWrite():
digitalWrite(pin,kondisi);
Parameter
- pin : nomor pin digital arduino yang ingin diatur
- kondisi : HIGH (5v) atau LOW (0v)
digitalRead()
Fungsi digitalRead() digunakan untuk membaca input digital yang masuk ke pin arduino, fungsi ini berguna untuk membaca status tombol/switch, sensor atau perangkat yang mengeluarkan output digital. fungsi digitalRead() bisa memberikan return value/nilai hasil berupa logika HIGH atau LOW, return value yang didapat dari fungsi digitalRead() bisa kita simpan kedalam variabel. penggunaan fungsi digitalRead() harus diinisiasi oleh fungsi pinMode(pin,INPUT/INPUT_PULLUP)
berikut syntax digitalRead()
digitalRead(pin);
Parameter
- pin : nomor pin digital yang digunakan
Fungsi digitalRead() biasa digunakan untuk mendeteksi kondisi tombol (ditekan atau tidak), membaca sinyal sensor digital seperti sensor PIR, IR, dan ultrasonic, juga bisa untuk melakukan interaksi dengan IC logic gate atau perangkat lain yang mengeluarkan output digital.
Eksperiment
Lalu ketik dan upload code dibawah ini :
byte LED = 9;
byte button_pin = 8;
int buttonState;
void setup() {
pinMode(LED, OUTPUT);
pinMode(button_pin,INPUT); //atau INPUT_PULLUP
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(button_pin);
if(buttonState==LOW){
digitalWrite(LED,HIGH);}
else{
digitalWrite(LED,LOW);
}
Serial.println(buttonState);
delay(50);
}
Amati dulu apa yang terjadi, saat tombol tidak ditekan LED terus berkedip-kedip, padahal pada sketch, yang kita inginkan adalah ketika tombol tidak ditekan LEDnya mati, ini terjadi karena pin 8 (pin yang terhubung ke tombol) mengalami floating, yaitu kondisi dimana pin tidak mampu menentukan kondisi HIGH dan LOW. buktinya bisa kita lihat pada serial plotter, tekan CTRL+Shift+L pada arduino IDE untuk membuka jendela serial plotter. dari serial plotter terlihat bahwa kondisi pin saat tombol tidak ditekan mengalami floating
Untuk mengatasinya ada 2 cara yaitu mengaktifkan pullup internal dengan mengganti mode pin INPUT menjadi INPUT_PULLUP (lihat baris yang saya beri keterangan). atau pin mode nya tetap menggunakan syntax pinMode(button_pin, INPUT); tetapi menggunakan rangkaian pullup external seperti gambar dibawah ini
Kedua cara itu memberikan hasil yang sama yaitu ketika tombol ditekan LED menyala dan ketika tombol dilepas LED mati. perbedaanya juga bisa kita lihat pada serial plotter
Terlihat pada grafik plotter sudah tidak ada floating lagi, sekian pembahasan tentang digital I/O beserta penerapannya. semoga bermanfaat !!