Fungsi pinMode(), digitalRead() dan digitalWrite() pada Arduino

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

Jika kita mengatur pinMode() sebagai OUTPUT, maka pin itu akan berada didalam kondisi yang disebut Low-Impedance (Low resistance), artinya pin itu bisa mengalirkan arus dengan mudah, pin arduino bisa mensupply arus positif (source current) atau arus negatif (sink current) sampai 40mA, arus segitu cukup untuk menyalakan LED atau menjalankan sensor, tapi tidak cukup untuk menjalankan relay, solenoid atau berbagai jenis motor, jadi lebih baik gunakan power supply eksternal agar pin arduino tidak rusak. FYI, beberapa hal yang bisa merusak pin arduino adalah short circuit dan arus yang overload, jadi cek dulu rangkaian dan kebutuhan arus yang tersambung ke pin arduino. 
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

Sebenarnya mode default pin arduino adalah mode input, jadi kita tidak perlu mengatur mode lagi jika pin yang digunakan difungsikan sebagai input. Apabila diatur dalam mode ini, maka pin itu akan berada didalam kondisi High-Impedance (High Resistance), artinya pin arduino memiliki resistansi yang sangat besar, sehingga sangat sedikit arus yang mengalir dari pin tersebut, karena resistansinya tinggi, pin menjadi sensitif terhadap perubahan tegangan, kondisi ini memungkinkan untuk mendetesi tagangan dan membaca sinyal dari sensor. Setelah pin diatur sebagai INPUT, kita bisa menggunakan berbagai fungsi untuk menerima input dari perangkat lain menggunakan fungsi digitalRead(), analogRead(), shiftIn() dan pulseIn().

Mode pin INPUT_PULLUP

Secara fungsi sama dengan mode INPUT, bedanya adalah jika kita mengatur mode pin sebagai INPUT_PULLUP, maka itu akan mengaktifkan internal resistor, artinya pin sudah terhubung secara internal dengan sumber tegangan melalui resistor 22 – 50 kilo Ohm. dengan adanya rangkaian PULLUP internal, pin akan berada pada kondisi HIGH secara default untuk menghindari floating (kondisi bingung antara HIGH atau LOW) ketika tidak ada input eksternal. Untuk membaca input LOW, rangkaian perlu dihubungkan dengan GND (ground) secara external melalui saklar/switch/tombol, sehingga ketika tombol ditekan maka pin akan terhubung dengan ground dan membuat kondisi pin menjadi LOW, sebaliknya jika tombol dilepas, maka rangkaian akan terputus dengan ground dan terhubung kembali dengan rangkaian pullup sehingga kondisi pin nya menjadi HIGH. 

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

Sekarang kita coba implementasikan fungsi-fungsi tadi ke project sederhana “menyalakan LED dengan tombol”, beberpa komponen yang kita perlukan adalah

  • Arduino Uno  BELI
  • Kabel USB BELI
  • Kabel Jumper Male to Male BELI
  • Push Button BELI
  • Resistor 1K & 220 Ohm
  • LED 5mm
Coba buat rangkaian seperti gambar ini

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 !!

Tinggalkan komentar