Key button & LED

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.

aeProduct.getSubject()Gambar 1. [sumber]

Modul seperti Gambar 1 sudah dijual di toko online lokal, jadi yang berminat tidak harus membelinya langsung Aliexpress.

aeProduct.getSubject()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.

aeProduct.getSubject()Gambar 3. [sumber]

aeProduct.getSubject()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:

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.

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.

 

Leave a Comment