Untuk belajar maupun untuk pengujian program, secara berurutan yang sering secara sederhana diperlukan adalah LED, push-button/key, dan potensiometer. Selain perangkat lunak simulator dan komunikasi serial (via USB), indikator hardware sering mempermudah proses pembuatan program. Itulah gunanya LED. Berikutnya adalah push button/keys, yang berguna sebagai masukan (input) digital. Tombol-tombol/anak kunci itu sebenarnya bisa diganti dengan kabel, tetapi cara itu bisa jadi tidak praktis dan tidak rapi. Sedangkan yang terakhir, potensiometer, adalah pengganti yang cukup baik untuk banyak sensor dengan output berupa tegangan analog.
Sekarang, modul/papan LED dan push-button sudah banyak dijual dalam bentuk yang lebih praktis untuk dipergunakan. Salah satunya ditampilkan di halaman ini, lihat Gambar 1.
Gambar 1. [sumber]
Modul seperti Gambar 1 sudah dijual di toko online lokal, jadi yang berminat tidak harus membelinya langsung Aliexpress.
Gambar 2. [sumber]
Penggunaan modul LED tidak berisiko mendatangkan masalah yang fatal. Papan LED sudah dilengkapi dengan resistor pembatas arus sebesar 1 KOhm, seperti yang bisa dilihat pada Gambar 2.
Hal yang berbeda dengan push button/key. Bisa diperhatikan pada Gambar 3 dan [ps2id url=’#gambar4′ offset=’300′]Gambar 4[/ps2id], papan ini tidak memiliki bantuan perlindungan apapun, hanya berisi sakelar saja.
Gambar 3. [sumber]
Gambar 4. [sumber]
Untuk menjaga keselamatan alat (papan sistem Arduino), ada baiknya sebelum menggunakan papan sakelar, pengguna terlebih dahulu mempelajari hal-hal yang berisiko dapat merusak sistem papan Arduino. Beberapa tulisan yang berisi hal-hal yang harus dihindari saya kumpulkan sebagai berikut:
- 10 Ways to Destroy An Arduino
- How To Destroy an Arduino Board
- 5 Ways to Destroy an Arduino
- 5 More Ways to Destroy an Arduino
- Ways in which you will possibly Destroy your Arduino!
- Ruggeduino: 5 Mistakes to Destroy an Arduino
- What are the most common ways to fry an arduino?
- Topic: About the article “10 Ways to Destroy an Arduino”
Dari membaca halaman-halaman pada tautan di atas ada beberapa pembahasan mengenai hal yang sama. Justru di situlah salah satu letak keutamaan belajar, melihat berbagai sudut pandang dan pengalaman orang lain mengenai suatu hal/permasalahan. Salah satu yang penting untuk diketahui adalah menghindari arus lebih pada pin, port dan sistem papan Arduino.
Penting untuk mengetahui bagaimana menjadikan suatu pin di papan Arduino sebagai INPUT (bukan OUTPUT) dan bagaimana menggunakan pull-up untuk pin itu.
- Pull up resistor / Pull down resistor
- Pull-up Resistors
- Pull-up Resistors (SparkFun)
- Pull-up Resistors
- A question on pull up resistors
- https://www.arduino.cc/en/Reference/PinMode
- https://www.arduino.cc/en/Tutorial/DigitalPins
- https://www.arduino.cc/en/Tutorial/InputPullupSerial
- What’s the difference between INPUT and INPUT_PULLUP?
- The care and feeding of arduino inputs
- Using Push Button Switch with Arduino Uno
- Internal Pullup Resistors on the Arduino for Digital and Analog Pins
- Arduino Internal Pull-Up Resistor Tutorial
- Arduino misconceptions 1: need to use external pull-up resistors
- Topic: Is this internal pull up resistor enough for a toggle switch?
- Pull-up resistor not activated, digital input examples not working on Launchpad
- Internal Pull-Up Resistors?
Dari dua bagian kumpulan tautan di atas, kita bisa belajar tentang bahaya kesalahan penggunaan tombol/sakelar/push button/key pada sistem Arduino. Selanjutnya bagaimana memanfaatkan pin pada papan Arduino sebagai masukan dan bagaimana melakukan konfigurasi yang sesuai dengan pull-up. Juga disinggung bagaimana konsep internel pull-up di sistem mikrokontroler yang lain, sekadar sebagai pembanding.
Berikut, di bawah ini adalah kode dari halaman Aliexpress mengenai penggunaan papan LED dan keys. Dengan pemahaman sebelumnya tentang keamanan dan internel pull-up, kode ini menjadi lebih mudah dipahami.
/* Format ulang dari kode pada: Aliexpress https://goo.gl/wYK6mi Ardiuno_4key_6led This example code is in the public domain. */ // Define key pin int K1 = 13; int K2 = 12; int K3 = 11; int K4 = 10; // Define led pin int GND = 6; int D1 = 5; int D2 = 4; int D3 = 3; int D4 = 2; int D5 = 1; int D6 = 0; // variables will change: int buttonState = 0; // variable for reading the pushbutton status uint8_t btn1, btn2, btn3, btn4; // the setup routine runs once when you press reset: void setup() { // initialize the keys pin as an input. // pinMode(K1, INPUT); // pinMode(K2, INPUT); // pinMode(K3, INPUT); // pinMode(K4, INPUT); for (int i = K1; i >= K4; i--) { pinMode(i, INPUT); } // initialize the leds pin as an output. // pinMode(GND, OUTPUT); // pinMode(D1, OUTPUT); // pinMode(D2, OUTPUT); // pinMode(D3, OUTPUT); // pinMode(D4, OUTPUT); // pinMode(D5, OUTPUT); // pinMode(D6, OUTPUT); pinMode(GND, OUTPUT); for (int i = D1; i >= D6; i--) { pinMode(i, OUTPUT); } /* PERHATIKAN BAGIAN KODE INI */ //Activate key pin internal pull-up resistors digitalWrite(K1, HIGH); digitalWrite(K2, HIGH); digitalWrite(K3, HIGH); digitalWrite(K4, HIGH); // for (int i = K1; i >= K4; i--) // { // pinMode(i, HIGH); // } //as LED GND digitalWrite(GND, LOW); } // the loop routine runs over and over again forever: void loop() { btn1 = digitalRead(K1); buttonState = btn1; digitalWrite(D1, buttonState); // btn2 = digitalRead(K2); buttonState = btn2; digitalWrite(D2, buttonState); // buttonState = btn3 = digitalRead(K3); // buttonState digitalWrite(D3, buttonState); // btn4 = buttonState = digitalRead(K4); // buttonState digitalWrite(D4, buttonState); // // delay(2000); // digitalWrite(D5, HIGH); // turn the LED on (HIGH is the voltage level) // digitalWrite(D6, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(D5, buttonState); // turn the LED on (HIGH is the voltage level) digitalWrite(D6, btn2); // turn the LED on (HIGH is the voltage level) // delay(2000); } //******************************************************//
Sebagai bonus dan penutup, berikut adalah tautan ke tulisan-tulisan yang bagus mengenai bouncing, debounce/debouncing. Bisa dibaca jika diperlukan, bahan-bahan sudah diurutkan dari pemahaman dasar umum ke tingkat yang lebih advance.
- Switch Bounce and How to Deal with It
- A Guide to Debouncing, or, How to Debounce a Contact in Two Easy Pages
- A Guide to Debouncing – Part 2, or, How to Debounce a Contact in Two Easy Pages
- Switch bouncing and debouncing with Arduino
- Tutorial 19: Debouncing a Button with Arduino
- Working with and de-bouncing switches for Arduino
- Switches, Debouncing and the Arduino
- Arduino Software and Hardware Based Button Debouncing
- Arduino: De-Bounce a Button with micros() or millis()
- https://www.arduino.cc/en/Tutorial/Debounce
- Smart Arduino library for debouncing switches and buttons
- Embed with Elliot: Debounce your Noisy Buttons, Part I
- Embed with Elliot: Debounce your Noisy Buttons, Part II
- Example code for multi-button checker with debouncing
- Debounce Code – one post to rule them all