Fungsi masukan (input) dan keluaran (output) pada Arduino diperankan oleh pin. Pin di sini berfungsi sebagai antarmuka. Pin antarmuka ini dibagi menjadi dua jenis yaitu pin digital dan pin analog. Gambaran umum dari posisi pin pada Arduino dapat dibaca pada artikel Mengenal Komponen pada Papan Arduino UNO. Pin pada Arduino dapat dikonfigurasikan sebagai input atau output. Mayoritas pin analog Arduino, dapat dikonfigurasikan, dan digunakan, dengan cara yang persis sama dengan pin digital.
Konfigurasi Pin sebagai INPUT
Pin-pin pada arduino secara standar/default telah dikonfigurasi sebagai masukan/input, sehingga pin-pin ini tidak perlu secara eksplisit dideklrarasikan sebagai masukan/iput dengan pinMode() jika kita menggunakannya sebagai masukan/input. Pin-pin yang dikonfigurasi dengan cara ini dikatakan dalam keadaan impedansi tinggi. Pin input memerlukan arus yang sangat kecil pada rangkaian disampling, setara dengan resistor seri 100 megaohm di depan pin.
Hal ini berarti bahwa pin memerlukan arus yang sangat kecil untuk mengubah pin masukan dari satu keadaan ke keadaan lain. Ini membuat pin berguna untuk tugas-tugas seperti menerapkan sensor sentuh kapasitif atau membaca LED sebagai fotodioda.
Pin yang dikonfigurasikan dengan pinMode (pin, INPUT) dengan tidak ada yang terhubung dengannya, atau dengan kabel yang terhubung padanya yang tidak terhubung ke rangkaian lain, menunjukkan perubahan acak yang tampak dalam pin state, mengambil derau listrik dari lingkungan, atau secara kapasitif menyambungkan keadaan dari pin terdekat.
Pull-up Resistor
Pull-up resistors sering digunakan untuk mengandalikan suatu pin masukan/input pada suatu keadaaan yang diketahui jika tidak ada masukan. Hal ini dapat dilakukan dengan menambahkan suatu pull-up resistor (ke +5V), atau pull-down resistor (resistor ke ground) pada masukan/input. Resistor 10 K merupakan ilai yang baik untuk pull-up atau pull-down resistor.
Built-in Pull-up Resistor dengan Pin Dikonfigurasi sebagai Input
Ada 20.000 pull-up resistor yang ditanam pada chip ATMega yang dapat diakses dari software. Pull-up resistor ini diakses dengan mengatur pinMode() sebagai INPUT_PULLUP. Ini akan menginversi perilaku dari mode INPUT, dimana HIGH berarti sensor OFF dan LOW berarti sensor ON. Nilai dari pull-up ini tergantung pada mikrokontroler yang digunakan. Pada sebagian besar perangkat berbasis AVR, nilai pull-upnya berkisar antara 20kΩ sampai 50kΩ. Pada Arduino Due, nilainya antara 50kΩ sampai 150kΩ. Untuk nilai yang lebih persisnya dapat dilihat pada lembar data mikrokontroler yang bersangkutan.
Ketika menghubungkan suatu sensor ke pin yang dikonfigurasi dengan INPUT_PULLUP, maka ujung yang lain harus dihubungkan ke ground. Dalam kasus saklar sederhana, hal ini akan menyebabkan pin membaca HIGH ketika saklar terbuka dan LOW ketika saklar ditekan/terhubung. Pull-up resistors menyediakan arus yang cukup untuk menyalakan LED secara redup yang terhubung pada pin yang dikonfigurasi sebagai input. Jika LED dalam suatu proyek nampak redup, bisa jadi mode ini sedang berjalan.
Register yang sama (lokasi memori chip internal) yang mengendalikan apakah pin bernilai TINGGI atau RENDAH mengendalikan resistor pull-up. Akibatnya, pin yang dikonfigurasikan untuk mengaktifkan resistor pull-up ketika pin berada dalam mode INPUT, akan memiliki pin yang dikonfigurasi sebagai TINGGI jika pin kemudian beralih ke mode OUTPUT dengan pinMode(). Ini bekerja di arah lain juga, dan pin output yang dibiarkan dalam keadaan TINGGI akan memiliki set pull-up resistor jika beralih ke input dengan pinMode ().
Contoh
pinMode(3,INPUT) ; // set pin menjadi input tanpa pull up resistor bawaan
pinMode(5,INPUT_PULLUP) ; // set pin menjadi input menggunakan pull up resistor bawaan
Konfigurasi Pin sebagai OUTPUT
Pin yang dikonfigurasi sebagai OUTPUT dengan pinMode() dikatakan sebagai keadaan impedansi rendah (low-impedance state). Hal ini berarti bahwa pin tersebut dapat menyediakan sejumlah arus substansial pada rangkaian. Pin ATMega pins menyediakan arus positif (source) atau meyediakan arus negatif (sink) hingga 40 mA ke rangkaian/perangkat lain. Arus ini cukup untuk menyalakan LED dengan terang (jangan lupa untuk menambahkan resistor seri), atau menjalankan banyak sensor namun tidak menyediakan arus yang cukup untuk menjalankan relay, solenoida, atau motor.
Mencoba menjalankan perangkat dengan arus tinggi dari pin keluaran, dapat merusak atau menghancurkan transistor keluaran di pin, atau merusak seluruh chip Atmega. Seringkali, ini menghasilkan pin “mati” pada mikrokontroler tetapi sisa chip masih berfungsi dengan baik. Untuk alasan ini, adalah ide yang baik untuk menghubungkan pin OUTPUT ke perangkat lain melalui resistor 470Ω atau 1k, kecuali arus maksimum yang diambil dari pin diperlukan untuk aplikasi tertentu.
Fungsi pinMode()
Fungsi pinMode() digunakan untuk mengkonfigurasi pin spesifik untuk berperilaku baik sebagai input atau output. Hal ini memungkinkan Dimungkinkan untuk mengaktifkan resistor pull-up internal dengan mode INPUT_PULLUP. Selain itu, mode INPUT secara eksplisit menonaktifkan pull-up internal.
Sintaks Fungsi pinMode()
Void setup () {
pinMode (pin , mode);
}
- pin– nomor pin yang modenya akan diatur
- mode− INPUT, OUTPUT, atau
Contoh
int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6
void setup () {
pinMode(button , INPUT_PULLUP);
// set the digital pin as input with pull-up resistor
pinMode(button , OUTPUT); // set the digital pin as output
}
void setup () {
If (digitalRead(button ) == LOW) // if button pressed {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
}
Fungsi digitalWrite()
Fungsi digitalWrite() digunakan untuk menulis nilai TINGGI atau RENDAH ke pin digital. Jika pin telah dikonfigurasi sebagai OUTPUT dengan pinMode(), tegangannya akan ditetapkan ke nilai yang sesuai: 5V (atau 3,3V pada papan arduino 3.3V) untuk HIGH, 0V (ground) untuk LOW. Jika pin dikonfigurasikan sebagai INPUT, digitalWrite() akan mengaktifkan (HIGH) atau menonaktifkan (RENDAH) pull-up internal pada pin input. Disarankan untuk mengatur pinMode() ke INPUT_PULLUP untuk mengaktifkan resistor pull-up internal.
Jika Anda tidak mengatur pinMode() ke OUTPUT, dan menghubungkan LED ke pin, saat memanggil digitalWrite(HIGH), LED mungkin tampak redup. Tanpa menetapkan pinMode() secara eksplisit, digitalWrite() akan mengaktifkan resistor pull-up internal, yang bertindak seperti resistor pembatas arus yang besar.
Sintaks fungsi digitalWrite()
Void loop() {
digitalWrite (pin ,value);
}
- pin– nomor pin yang modenya akan diatur
- value− HIGH, atau
Contoh
int LED = 6; // LED dihubungkan ke 6
void setup () {
pinMode(LED, OUTPUT); // atur pin digital sebagai output
}
void setup () {
digitalWrite(LED,HIGH); // nyalakan led
delay(500); // delay 500 ms
digitalWrite(LED,LOW); // matikan led
delay(500); // delay 500 ms
}
analogRead( ) function
Arduino dapat mendeteksi apakah ada tegangan yang diterapkan ke salah satu pinnya dan melaporkannya melalui fungsi digitalRead(). Ada perbedaan antara sensor on/off (yang mendeteksi keberadaan objek) dan sensor analog, yang nilainya terus berubah. Untuk dapat membaca jenis sensor ini, kita membutuhkan jenis pin yang berbeda.
Di bagian kanan bawah papan Arduino, terdapat enam pin bertanda “Analog In”. Pin khusus ini tidak hanya memberi tahu apakah ada tegangan yang diberikan padanya, tetapi juga nilainya. Dengan menggunakan fungsi analogRead(), kita dapat membaca tegangan yang diberikan ke salah satu pin.
This function returns a number between 0 and 1023, which represents voltages between 0 and 5 volts. For example, if there is a voltage of 2.5 V applied to pin number 0, analogRead(0) returns 512.
Fungsi ini menghasilkan angka antara 0 dan 1023, yang mewakili tegangan antara 0 dan 5 volt. Misalnya, jika ada tegangan 2,5 V yang diterapkan ke pin angka 0, analogRead(0) menghasilkan 512.
Sintaks Fungsi analogRead()
analogRead(pin);
- pin– nomor pin masukan analog untuk dibaca (0 sampai 5 pada sebagian papan arduino, 0 sampai 7 pada arduino Mini dan Nano, 0 sampai 15 pada Arduino Mega)
Contoh
int analogPin = 3;//potentiometer wiper (middle terminal)
// dihubungkan ke pin analog 3
int val = 0; // variable untuk menyimpan nilai yang dibaca
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // membaca pin masukan
Serial.println(val); // debug nilai
}