Counter up dan counter down sangat banyak manfaat nya pada pemrograman Arduino, di antara nya adalah membuat menu pada LCD, schedule tugas, running LED dan lain-lain. Counter ini sering kali digunakan dalam logaritma pemrograman Arduino. Saya, penulis sengaja memasukkan materi counter ini sebagai salah satu tahapan proses untuk mempermudah pelajaran Arduino Selanjut nya.
Pada materi sebelum nya kita sudah paham bagaimana cara mempercepat respon pembacaan button dengan metode hold, atau jika ingin kembali membaca nya, cukup click tombol di bawahi ini
Untuk lebih mudah nya, program nya adalah seperti berikut ini,
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(btn_1, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
Serial.println("ditekan");
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Pada Program di atas kita tahu persis bahwa, ketika tekan button GPIO34, maka Serial.println(“ditekan”); hanya akan di akses sekali, walau button masih sedang di tekan. Hal ini karena fungsi hold. Nah di sekarang kita letakkan counter up di dalam nya.
Counter Up
Penulisan counter UP pada C++ ada berbagai cara penulisan, di antara nya adalah sebagai berikut,
Counter++;
Counter = Counter + 1;
Counter += 1;
++counter;
Semua jenis penulisan di atas adalah nilai counter akan bertambah satu setiap proses nya. Program Counter up final nya adalah sebagai berikut,
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
int counter = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(btn_1, INPUT);
Serial.println();
}
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
counter += 1; // ini counter
Serial.print("counter: ");
Serial.println(counter);
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Sekarang compile dan lihat di Serial Monitor, apa yang terjadi setiap button GPIO34 di tekan, akan terlihat seperti pada gambar di bawah ini
Counter Down
Pada Counter down, kita hanya merubah nilai counter berkurang dari satu. Program nya adalah sebagai berikut.
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
int counter = 100;// nilai di set dulu
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(btn_1, INPUT);
Serial.println();
}
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
counter -= 1; // ini counter down
Serial.print("counter: ");
Serial.println(counter);
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Upload Code di atas dan lihat pada Serial Monitor, maka teman-teman akan terlihat seperti gambar di bawah ini
Pada program di atas, counter kita set nilai nya 100, sebagai nilai awal, kemudian di counter down dengan GPIO34,
Nah Mudah bukan, nah sekarang aplikasi sederhana dari counter dalam menyalakan LED, agar tutorial ini berkesinambungan dengan tutorial berikut nya, Bagi yang belum bisa langsung klik button di bawah ini.
Menyalakan LED dengan Counter
Kita akan menyalakan LED secara bergantian setiap Button di tekan, bagaimanakah program nya?
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
int counter = -1;// nilai di set dulu
byte pin_led[] = {17, 16, 2, 15, 5, 18, 19, 23};
void setup() {
// put your setup code here, to run once:
pinMode(pin_led[0], OUTPUT);
pinMode(pin_led[1], OUTPUT);
pinMode(pin_led[2], OUTPUT);
pinMode(pin_led[3], OUTPUT);
pinMode(pin_led[4], OUTPUT);
pinMode(pin_led[5], OUTPUT);
pinMode(pin_led[6], OUTPUT);
pinMode(pin_led[7], OUTPUT);
Serial.begin(9600);
pinMode(btn_1, INPUT);
Serial.println();
}
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
counter += 1; // ini counter down
Serial.print("counter: ");
Serial.println(counter);
digitalWrite(pin_led[counter], HIGH);
if(counter == 8){
counter=-1;
digitalWrite(pin_led[0], LOW);
digitalWrite(pin_led[1], LOW);
digitalWrite(pin_led[2], LOW);
digitalWrite(pin_led[3], LOW);
digitalWrite(pin_led[4], LOW);
digitalWrite(pin_led[5], LOW);
digitalWrite(pin_led[6], LOW);
digitalWrite(pin_led[7], LOW);
}
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Program counter ini akan memilih GPIO LED yang ingin di nyalakan, Sebagai contoh sebagai berikut,
- counter di set nilai nya -1 (negatif satu)
- ketika btn GPIO34 di tekan, nilai counter =0, maka led yang di nyalakan adalah pin_led[0], pin_led[0] adalah LED GPIO17
- ketika btn GPIO34 di tekan, nilai counter=1, maka led yang di nyalakan adalah pin_led[1], pin_led[1] adalah LED GPIO16
- ketika btn GPIO34 di tekan, nilai counter=2, maka led yang di nyalakan adalah pin_led[2], pin_led[1] adalah LED GPIO2
- dan seterus nya sampai nilai counter = 8;
- ketika nilai counter = 8, maka nilai counter di set kembali menjadi -1, dan semua LED di padam kan ( off)
- Ketika kembali di tekan Button GPIO34 maka proses kembali ke 1,
Hasil nya akan terlihat seperti pada video di bawah ini
Tugas
Tugas nya adalah sebagai berikut,
- Buat lah counter up ketika di tekan Button GPIO34, kemudian
- Ketika di tekan GPIO36 maka terjadi counter down
Tertarik dengan Trainer IoT kami, cukup whatsapp kami dengan tekan tombol di bawah ini
Sekian dulu tulisan kita, semoga bermanfaat, Terimakasih